一.搭建Jeknins环境
1.进入官网下载Jekkins
2.按照步骤安装Jenkins(这个不去赘述这些步骤,本文着重描写Unity打包相关)
3.输入地址查看是否可以打开网页(我这里改过了,默认是8080)
4.可以的话,就说明Jenkins安装成功!那么根据页面的指导,开始配置Jenkins(这里不去赘述怎么配置)
二.Unity相关
1.打开Unity,在Unity创建脚本APKBulid,准备编写Unity打包脚本
2.编写打包脚本
//设置打出包的路径
private static BuildOptions s_BuildOptions = BuildOptions.CompressWithLz4HC;
private static void ManualExportEnvironment()
{
string rootPath = Application.dataPath;
rootPath = Path.GetDirectoryName(rootPath);
rootPath = Path.GetDirectoryName(rootPath);
string exportPath = Path.Combine(rootPath, "Export/Android");
string exportApkPath = Path.Combine(exportPath, "test.apk");
Environment.SetEnvironmentVariable("EXPORT_PATH", exportPath);
Environment.SetEnvironmentVariable("EXPORT_APK_PATH", exportApkPath);
}
//封装的获取导出路径的方法
public static string WorkExportPath()
{
string exportPath = Environment.GetEnvironmentVariable("EXPORT_PATH");
if(string.IsNullOrEmpty(exportPath))
{
exportPath = Application.dataPath;
}
return exportPath;
}
//导出APk具体实现
public static void ExportApk()
{
Debug.Log("ExportAPK start");
//设置打包平台
bool switchAndroid = EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Android, BuildTarget.Android);
if (!switchAndroid)
{
Debug.LogError("ExportApk Switch Android Error");
return;
}
Debug.Log("ExportApk Switch Android success");
string export = WorkExportPath();
if(Directory.Exists(export))
{
Directory.Delete(export, true );
}
Directory.CreateDirectory(export);
//设置打包具体参数
PlayerSettings.applicationIdentifier = "com.DeCompany.Project";
PlayerSettings.Android.bundleVersionCode = 2;
PlayerSettings.Android.useAPKExpansionFiles = false;
EditorUserBuildSettings.buildAppBundle = false;
// 生成符号文件
EditorUserBuildSettings.androidCreateSymbols = AndroidCreateSymbols.Public;
EditorUserBuildSettings.exportAsGoogleAndroidProject = false;
var options = s_BuildOptions;
EditorUserBuildSettings.androidBuildSystem = AndroidBuildSystem.Gradle;
PlayerSettings.bundleVersion = "1.1.1";
PlayerSettings.productName = "TestProduct";
var targetArchitectures = AndroidArchitecture.ARM64 | AndroidArchitecture.ARMv7;
PlayerSettings.Android.targetArchitectures = (AndroidArchitecture)targetArchitectures;
List<string> levels = new List<string>();
foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes)
{
if (!scene.enabled) continue;
// 获取有效的 Scene
levels.Add(scene.path);
}
string apkPath = GetApkPath();
Debug.Log("apkPath:" + apkPath);
BuildPipeline.BuildPlayer(levels.ToArray(), apkPath, BuildTarget.Android, options);
}
##导出APK的方法
[MenuItem("Tools/Export/ExportAPK")]
public static void ExportAPKManual()
{
ManualExportEnvironment();
ExportApk();
}
3.在Unity中运行,查看时候是否可以打出包,如果可以的话,就说明脚本正常,准备在Jenkins中配置。(注意修改自己出包的位置,我自己的设置在Unity项目平级的Export文件夹中)
三.Jenkins的创建
1.创建Item
我这里选择了Freestyle风格,你可以根据自己需求来选择
选择Git,输入你的URL,之后添加你的凭证(有权限修改添加项目的账户),之后选择这个凭证
在构建步骤的地方添加Bat构建步骤即可(如果可以的话,最好使用.sh)
这个代码的意思就是启动位于D:\JenkinsProject\jenkins_scripts\android_distribute.bat这个位置的bat文件
echo "Starting Android APK Distribution"
set ANDROID_DISTRIBUTE_BAT_PATH=D:\JenkinsProject\jenkins_scripts\android_distribute.bat
echo "Running the batch script..."
call "%ANDROID_DISTRIBUTE_BAT_PATH%"
到这里配置完成,点击保存即可
2.Bat文件编写
set语句就是设置了变量的路径值。真正执行构建语句的只有
%UNITY_PATH% -projectPath %PROJECT_PATH% -buildTarget android -executeMethod GameEditor.APKBuild.ExportAPKManual -logfile - -batchMode -quit -GMMode
这一句调用了刚才我们编写的APKBuild.ExportAPKManual(因为我这个脚本在GameEditor命名空间,所以调用的时候前面要有GameEditor.,你不在这个命名空间可以去掉)
set UNITY_PATH="C:\Program Files\Unity\Hub\Editor\2022.3.26f1\Editor\Unity.exe"
set PROJECT_PATH="%WORKSPACE%\Test_Game"
set BUNDLE_TOOL_PATH="%WORKSPACE%\jenkins_scripts\Tools\bundletool-all-1.18.0.jar"
set APK_NAME=TestFreeStyle_29_.apk
set EXPORT_APK_PATH="%WORKSPACE%\Export\TestFreeStyle_29_.apk"
set BUILD_AAB=true
set GOOGLE_PLAY_AAB_PATH="%WORKSPACE%\Export\googlePlay.aab"
set OUT_PUT_APKS_PATH_1="%WORKSPACE%\Export\output_1.apks"
set OUT_PUT_APKS_PATH_2="%WORKSPACE%\Export\output_2.apks"
set SAMSUNG_S9_PATH="%WORKSPACE%\jenkins_scripts\Tools\Samsung_S9.json"
%UNITY_PATH% -projectPath %PROJECT_PATH% -buildTarget android -executeMethod GameEditor.APKBuild.ExportAPKManual -logfile - -batchMode -quit -GMMode
echo "Export apk and aab success"
echo "this is android_distribute.bat end"
3.在Jenkins执行构建
四.总结
这个基本没啥坑可以踩,基本不会出啥问题,大体思路就是,通过Jenkins来调用一些Shall或者Bat命令,这些命令再去调用之前在Unity中写的一些打包脚本就可以了。