Jenkins 打包Unity APK
新建一个Unity 工程,添加编辑器打包脚本
编辑器脚本 APKBuild.cs
编辑状态下调用 APKBuild中 Build 方法,执行打包,
测试成功开始编写 批处理脚本 Unity.bat 通过批处理脚本调用 APKBuild中 Build 方法 执行打包
执行批处理打包成功开始在Jenkins新建项目
APKBuild.cs 代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class APKBuild : Editor
{
[MenuItem("Tool/APKBuild")]
public static void Build()
{
BuildTarget buildTarget = BuildTarget.Android;
// 切换到 Android 平台
EditorUserBuildSettings.SwitchActiveBuildTarget(buildTarget);
// keystore 路径, G:\keystore\one.keystore
PlayerSettings.Android.keystoreName = "G:\\keystore\\one.keystore";
// one.keystore 密码
PlayerSettings.Android.keystorePass = "123456";
// one.keystore 别名
PlayerSettings.Android.keyaliasName = "bieming1";
// 别名密码
PlayerSettings.Android.keyaliasPass = "123456";
List<string> levels = new List<string>();
foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes)
{
if (!scene.enabled) continue;
// 获取有效的 Scene
levels.Add(scene.path);
}
// 打包出 APK 名
string apkName = string.Format("./{0}.apk", "Test");
// 执行打包
string res = BuildPipeline.BuildPlayer(levels.ToArray(), apkName, buildTarget, BuildOptions.None);
AssetDatabase.Refresh();
}
}
在编辑器下可以调用 Build() 方法执行打包 APK
新建批处理脚本 Unity.bat
H:\Unity\Unity\Editor\Unity.exe -projectPath G:\MyProject\AndroidSDKUnityDemo\AndroidSDKDemo -quit -batchmode -executeMethod APKBuild.Build -logFile build.log
参数介绍
H:\Unity\Unity\Editor\Unity.exe 为Unity 安装执行文件
-projectPath 执行Unity游戏工程
G:\MyProject\AndroidSDKUnityDemo\AndroidSDKDemo 为Unity 工程目录 Assets 上一层目录
-quit 表示执行结束自动退出
-executeMethod 表示执行 编辑器方法
APKBuild.Build APKBuild 为编辑器脚本 APKBuild.cs , 中APKBuild.cs Build 函数名
最终 Unity.bat 脚本
@echo off
echo 正在生成APK文件...
REM H:\Unity\Unity\Editor\Unity.exe -projectPath G:\MyProject\AndroidSDKUnityDemo\AndroidSDKDemo -quit -batchmode -executeMethod APKBuild.Build -logFile build.log
%1 -projectPath %2 -quit -batchmode -executeMethod APKBuild.Build -logFile build.log
echo APK文件生成完毕!
pause
上面 %1 %2 我通过在执行批处理脚本的时候将参数传递进来
将 Unity.bat 放在 Unity 项目根目录(和 Assets 同级)
将Unity 工程上传到 SVN服务器
开始Jenkins
新建一个新工程
下一步弹出配置界面
源码管理
中选择 SubVersion 配置SVN 路径和用户名密码
点击 Add 添加一个用户名和密码
Check -out Strategy 中配置每次构建时执行的 SVN update命令(每次构建时会将SVN 中最新的项目更新到 Jenkins 的工作空间WORKSPACE)
如我本地的Jenkins 工作空间位置,Jenkins新建的项目都会放在 workspace 下
C:\Users\Dev\.jenkins\workspace\
构建中选择 Windows 批处理,
第一行打印一个 HelloWorld
第二行执行 Unity.bat 后边两个参数 分别传递给批处理中 %1,%2
%WORKSPACE% 是Jenkins 中可用的环境变量,表示该项目在Jnekins 中的目录位置
本项目在Jenkins 为 TestDemo则 %WORKSPACE% 在我本地为 C:\Users\Dev\.jenkins\workspace\TestDemo
配置完成保存,执行构建(构建时要将 Unity 关掉)
可以查看日志
等待构建
构建完成后打开工作空间,发现目录下生成一个 Test.apk 表示 APK 生成成功
下面来看下我的 Unity 工程和 Jenkins 工程的关系
Unity Demo工程目录如下
Unity Demo工程上传到 SVN 服务器
在 Jenkins 中新建TestDemo项目,在 TestDemo配置中 添加 Demo工程上传的 SVN 服务器路径
Jenkins 在构建构建时会从 SVN 服务器将 Demo 工程 CheckOut 到 Jenkins 的工作空间中 TestDemo 项目下
打开 TestDmeo 文件夹,我已经执行过构建了, Jenkins 已经从 SVN 上更新了最新的项目到 工作空间中
然后我在执行 Unity.bat 时,将 %WORKSPACE%
在我本地为(C:\Users\Dev.jenkins\workspace\TestDemo)传递了进去,即执行的 打包工程是Jenkins 工作空间的这个工程
每次修改Unity Demo 工程,将修改提交到 SVN,然后再执行 Jenkins 构建