零. 前言
最近在做Unity開發(fā),有個(gè)任務(wù)是通過Jenkins實(shí)現(xiàn)自動(dòng)化打包Unity游戲成Android APK的需求慎恒,所以在完成任務(wù)后任内,梳理成了一個(gè)最簡單的教學(xué)撵渡,也把遇到的坑和大家分享。
若需要Jenkins打包死嗦,指需要通過Jenkins調(diào)用下面的命令即可實(shí)現(xiàn)基礎(chǔ)需求趋距。
一. 原理
打開Unity程序 → 打開指定工程 → 調(diào)用Unity的BuildPipeline類進(jìn)行打包
二. 打包命令
Mac樣例:
/Users/Ben/Application/Unity.app/Contents/MacOS/Unity -projectPath /Users/Ben/UnityBuildAndroid -executeMethod ProjectBuild.BuildForAndroid project-projectName -quit
Windows樣例:
D:\Unity\Editor\Unity -projectPath D:\UnityBuildAndroid -executeMethod ProjectBuild.BuildForAndroid
project-projectName -quit
格式說明:
- Unity編輯器路徑:非UnityHub路徑,可以在UnityHub → 安裝 → 具體Unity版本 → 右上角更多信息 → 在Finder中顯示(在資源管理器中顯示) 可以找到對(duì)應(yīng)Unity應(yīng)用的路徑
- 編譯的工程路徑:需要打包APK的項(xiàng)目路徑根目錄
- 執(zhí)行的方法:編譯APK運(yùn)行的腳步
- 參數(shù)(project-projectName):樣例中越除,projectName為工程名节腐,用于命名APK。"project-projectName"整個(gè)不寫摘盆,則會(huì)自動(dòng)讀取工程名翼雀。讀者可以根據(jù)自己項(xiàng)目需求,傳遞需要的參數(shù)進(jìn)入孩擂,然后自行解析處理锅纺。
- -quit:在運(yùn)行結(jié)束后關(guān)閉UnityHub,建議在前期未完全調(diào)通之前肋殴,不要添加該命令囤锉,否則打包失敗報(bào)錯(cuò)時(shí),無法通過Unity日志窗口查看具體原因护锤。
三. 執(zhí)行步驟
下面以全新Unity空工程來引入自動(dòng)化打包
1.引入打包工具類官地,將下面的代碼拷貝到工程Assets/Editor目錄下
using System.Collections;
using System.IO;
using UnityEditor;
using UnityEngine;
using System.Collections.Generic;
using System;
class ProjectBuild : Editor
{
//在這里找出你當(dāng)前工程所有的場(chǎng)景文件,假設(shè)你只想把部分的scene文件打包 那么這里可以寫你的條件判斷 總之返回一個(gè)字符串?dāng)?shù)組烙懦。
static string[] GetBuildScenes()
{
List<string> names = new List<string>();
foreach (EditorBuildSettingsScene e in EditorBuildSettings.scenes)
{
if (e == null)
continue;
if (e.enabled)
names.Add(e.path);
}
return names.ToArray();
}
/// <summary>
/// 自定義工程名:"project-"作為工程名的前綴參數(shù)
/// </summary>
public static string projectName
{
get
{
foreach (string arg in System.Environment.GetCommandLineArgs())
{
if (arg.StartsWith("project"))
{
return arg.Split("-"[0])[1];
}
}
return Application.productName;
}
}
/// <summary>
/// 打包Android應(yīng)用
/// </summary>
static void BuildForAndroid()
{
// 簽名文件配置驱入,若不配置,則使用Unity默認(rèn)簽名
PlayerSettings.Android.keyaliasName = "BenheroGithub";
PlayerSettings.Android.keyaliasPass = "BenheroGithub";
PlayerSettings.Android.keystoreName = Application.dataPath.Replace("/Assets", "") + "/BenheroGithub.jks";
PlayerSettings.Android.keystorePass = "BenheroGithub";
// APK路徑氯析、名字配置
string apkName = DateTime.Now.ToString("yyyyMMdd_HHmmss");
string path = Application.dataPath.Replace("/Assets", "") + "/APK/" + projectName + "_" + apkName + ".apk";
BuildPipeline.BuildPlayer(GetBuildScenes(), path, BuildTarget.Android, BuildOptions.None);
}
}
這個(gè)類中3個(gè)方法比較清晰簡單亏较,讀者可以根據(jù)需求進(jìn)行拓展。
2. 引入簽名文件到工程的根目錄下
3. 配置Android應(yīng)用包名
若不配置會(huì)報(bào)錯(cuò):
UnityException: Package Name has not been set up correctly
Please set the Package Name in the Player Settings. The value must follow the convention
解決方法:
- File/Build Settings切換Android平臺(tái)
- Player Settings → Other Settings → Identification → Package Name輸入APK包名
4. 在命令行窗口執(zhí)行打包命令
5. APK生成在工程根目錄中的APK文件夾下
四.工程案例
本教程中案例掩缓,已上傳到GitHub上雪情,讀者可以下載嘗試運(yùn)行∧憷保或者可用于與自己的配置進(jìn)行校驗(yàn)巡通。
GitHub工程地址:https://github.com/benhero/UnityBuildAndroid