最近研究了一下JenKins自动打包,遇到了一些网上教程上没有提到的一些坑,于是决定也写一篇教程,希望能帮助到后来的开发者。
我主要参考的教程有:
雨松: Unity3D研究院之Jenkins的使用
钱康来: Jenkins自动化出包流程分享
1.Jenkins的安装与启动
首先在Jenkins的官网下载Jenkins软件,这里选择12周更新版还是1周更新版看你的喜好,我选择的是1周更新版。
安装后程序会自己启动,手动启动的方法是
java -jar /Applications/Jenkins/jenkins.war -httpPort=8080
这样就默认在8080端口启动了,第一次启动会问你要密钥,将Jenkins提示的地址从Finder中用快捷键就可以很快打开了
CMD + SHIFT + G
输入密钥之后会提示让你创建管理员账号,这里要注意所有的输入框都要填写内容,我就是邮件没有填就点了提交,结果等了很久也没有反应。
2.破解版MAC Unity的安装
下一步就是安装Unity了,已经会破解Unity的可以跳过这一步,我在找教程的时候走了一些弯路,觉得还是有必要介绍一下。
教程可以参考这篇
我把破解文件公开出来,这样就不必在蛮牛上繁琐的回复可见了
破解时要注意一定要把Unity和破解文件按照版本对应好,如果不匹配的话,很可能打包出错但是很久找不到原因。
3.Android SDK的安装与第一个坑
我一开始是使用的Android Studio下载SDK的办法,这里遇到一个坑,就是安装好的Android Studio就是获取不到Android SDK的地址,不管选择什么目录都提示Android已安装,下一步之后又丢失掉Android SDK 的路径。
这个我后来的解决办法是放弃使用Android Studio而是直接使用它的命令行工具,使用工具下载了几个Android SDK之后,再使用Android Studio访问这个目录就可以正确识别了
这里提供几个命令:
sdkmanager --list
(获取全部SDK列表)
sdkmanager "platforms;android-14"
(下载 14版本的SDK)
4.配置Unity与第二个坑
接下来就是配置Unity了,主要就是配置JDK和Android SDK
这里我遇到一个坑是Unity打包总是提示
Error:Invalid command android
通过查阅资料得知这个错误的原因是,Android SDK 26以后版本的打包API有变更,而Unity还是使用的旧版本的API导致。
这个解决方法有两个一个是使用新版本Unity,另一个是使用旧版本的Android SDK,我选择后者,安装了24版本的SDK,解决了这个问题。
5.配置Jenkins
接下来是配置Jenkins,这里首先先安装两个插件
Manage Jenkins--> Manage Plugins --> Available -->Xcode integration && Unity3d plugin
然后在Jenkins->系统管理->Global Tool Configuration ->Unity3d 中填写Unity的安装路径,如果有多个Unity版本,可以填写多个,用别称区分。
然后就可以配置打包工程了,选择 Jenkins->新建->构建一个自由风格的软件项目->ok
在General->参数化构建->添加参数 这里可以添加你想要的参数,我目前使用了这些参数,这些参数可以在后面的脚本中通过 $ + 参数名获取到
ChannelName(Choice)
AppMode (Choice)
UseAssetsBundle (Bool)
UseLua (Bool)
ExportPath (string)
然后在源码管理中输入你的项目地址,如果有密码,则还需要输入账户密码,这里允许读取多个库合并成一个项目,很方便。
最后在构建项目中点击 增加构建步骤 -> Invoke Uinty3d Editor 我使用的参数是
-quit -batchmode -executeMethod ProjectBuildService.BuildForAndroid ChannelName-$ChannelName AppMode-$AppMode UseAssetsBundle-$UseAssetsBundle ExportPath-$ExportPath UseLua-$UseLua`
可以看到把前面声明的参数全部使用到了,这些参数的意思是调用ProjectBuildService.BuildForAndroid方法,并将以上参数传入
下面还需要在Unity中接收并解析这些参数,这里试举一例
public static bool isUseAssetsBundle
{
get
{
//这里遍历所有参数,找到 UseAssetsBundle 开头的参数,
// 然后把-符号后面的字符串返回,
foreach (string arg in Environment.GetCommandLineArgs())
{
if (arg.StartsWith("UseAssetsBundle"))
{
return bool.Parse(arg.Split("-"[0])[1]);
}
}
return false;
}
}
6.配置E-mail
记得配置系统管理员邮件地址