先介绍一下为什么要用这么一大堆东西。。。。
- 阶段一 开发了一个简单的app
- 每次打包只需要./gradlew assembleRelease,然后等待几分钟,就可以得到一个安装包。
- 使用360加固助手进行加固
- 然后将安装包上传到fir.im
- 然后通知测试安装测试
- 阶段二 为了更好的用户体验,使用了热修复tinker
- ./gradlew assembleRelease打包
- 生成的安装包上传到360官网进行加固,然后下载加固后未签名的jg.apk
- 对jg.apk进行对齐,得到zip.apk
- 对zip.apk进行签名
- 检查是否采用了V2签名
- 使用walle进行多渠道分包
- 上传到fir.im
- 通知测试人员
- 阶段三
- …
- …
- …
通过上面的对比,阶段一需要4步完成一次打包测试流程,阶段二则需要12步来完成一次打包测试流程,阶段二都是用各种命令来完成,一方面比较繁琐,另一方面也容易出错,还有可能的阶段三、阶段四。。
说了一堆废话,但是我们都能感觉到好麻烦,为什么打个包这么繁琐。。。有没有什么方法能够更优雅一些?
有,答案就在Jenkins
接下来就让我们用Jenkins将繁琐的流程统统解决掉
关于Tinker,Walle,360加固的可以查看下面两个链接:
Tinker使用过程及注意点(1)-环境搭建及简单使用
Tinker使用过程及注意点(2)-360加固及多渠道分包
Jenkins环境搭建
- Apache Tomcat
- Jenkins
- Jenkins官网,点击Download选择自己的环境下载
- 将下载的Jenkins.war包直接放到tomcat下的webapps目录
- 启动tomcat
- 然后打开http://localhost:8080/jenkins
- 然后就是一系列的安装过程,默认即可。。。加载的一些插件可以根据自己的需要选择,或者选择推荐的插件安装
- 可能遇到的问题:打开http://localhost:8080/jenkins报404错误,可能tomcat没启动,或者下载的Jenkins.war是坏的,重新下载即可
创建Jenkins项目
填写项目名称,选择构建一个自由风格的软件项目,点击ok
General
填写一下项目的描述信息即可
源码管理
- 如果是Git上的项目,勾选Git,然后在Repository URL填写项目的git url
- 如果是公共仓库则不需要进行其它操作,如果是私有仓库,需要点击Add添加帐号密码,并将node替换成添加的帐号密码
构建器触发
上面H/15 * * * * 表示每15分钟检查一次
定时检查的配置,JenKins给出的注释:
Examples:
# every fifteen minutes (perhaps at :07, :22, :37, :52)
H/15 * * * *
# every ten minutes in the first half of every hour (three times, perhaps at :04, :14, :24)
H(0-29)/10 * * * *
# once every two hours at 45 minutes past the hour starting at 9:45 AM and finishing at 3:45 PM every weekday.
45 9-16/2 * * 1-5
# once in every two hours slot between 9 AM and 5 PM every weekday (perhaps at 10:38 AM, 12:38 PM, 2:38 PM, 4:38 PM)
H H(9-16)/2 * * 1-5
# once a day on the 1st and 15th of every month except December
H H 1,15 1-11 *
构建环境
构建
- 点击增加构建步骤,选择Invoke Gradle script
- 勾选Use Gradle Wrapper,选择Make gradle executable
- 点击增加构建步骤,选择Invoke Gradle script
以上步骤就可以实现Jenkins的自动构建了。
接下来我们还可以设置以下功能
构建成功后自动上传到fir.im
- fir.im Jenkins 插件使用方法
- 下载fir.im插件
- 安装插件参考:fir.im Jenkins 插件使用方法
- 进入 Jenkins 管理界面后,点击左侧进入 系统管理
- 然后找到 管理插件 并点击进入
- 进入插件管理后,点击 高级 选项卡
- 然后在页面找到 上传插件,选择已下载好的 fir.im jenkins 插件文件路径,并点击 上传 等待安装成功。
- 安装成功后,如果没有创建 Jenkins 项目,请先创建项目。如果需要配置已存在的项目,请进入在 配置 中找到 增加构建后操作步骤 ,并选择 Upload to fir.im 添加到 Jenkins 项目中。
- 添加成功后开始配置各种参数,如图显示:
- 配置插件
- fir.im Token(必填)
保存,然后构建后将会自动上传到fir.im
- fir.im Token(必填)
构建成功后给测试人员发邮件
- 全局配置
- 系统管理 -> 系统设置
- JenKins Location 中填写 JenkinsUrl和管理员邮件地址
- Extended E-mail Notification
关于step4的密码解释:qq邮箱-> 设置 -> 账户
- 邮件模版:
- JenKins Location 中填写 JenkinsUrl和管理员邮件地址
- 系统管理 -> 系统设置
Default Subject
安卓构建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!
Default Content
<hr/>
(本邮件是程序自动下发的,请勿回复!)<br/><hr/>
项目名称:$PROJECT_NAME<br/><hr/>
构建编号:$BUILD_NUMBER<br/><hr/>
GIT COMMIT:${GIT_COMMIT}<br/><hr/>
GIT URL:${GIT_URL}<br/><hr/>
GIT BRANCH:${GIT_BRANCH}<br/><hr/>
构建状态:$BUILD_STATUS<br/><hr/>
触发原因:${CAUSE}<br/><hr/>
构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><hr/>
构建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>
变更集:${JELLY_SCRIPT,template="html"}<br/><hr/>
-
-
- 邮件通知
- 邮件通知
-
全部设置完成后点击保存,完成全局的配置
- 接下来进行项目配置 回到项目 test -> 配置
- 增加构建后操作步骤 -> Editable Email Notification
- 都是一些默认设置
这里面的内容都是我们在全局中定义好的,如果不做更改,默认的邮件格式就是我们定义好的。 - 点击Advanced Settings
- 点击高级
然后保存,邮件的发送就配置好了。
- 增加构建后操作步骤 -> Editable Email Notification
Tinker+Walle+360加固的脚本实现
接下来就解决gradle中,如何解放双手,实现360加固和Walle多渠道分包的脚本实现
360加固
1.首先需要下载360的加固宝
2.然后将下载的文件解压
3.然后将解压的文件中的jiagu文件夹放到项目根目录
4.在jiagu文件夹中新建jiagu_360.sh文件
首先在jiagu_360.sh文件中定义一些用到的路径、帐号密码等。
然后写加固代码
echo "------ jiagu running! ------"
java -jar ${BASE} -version
java -jar ${BASE} -login ${NAME} ${PASSWORD}
#java -jar ${BASE} -importsign ${KEY_PATH} ${KEY_PASSWORD} ${ALIAS} ${ALIAS_PASSWORD}
#java -jar ${BASE} -showsign
#java -jar ${BASE} -importmulpkg ${CHANNEL} #根据自身情况使用
#java -jar ${BASE} -showmulpkg
#java -jar ${BASE} -showconfig
java -jar ${BASE} -jiagu ${APK} ${DEST} #-autosign
echo "------ jiagu finished! ------"
5.app的build.gradle中添加如下代码
afterEvaluate {
android.applicationVariants.all { variant ->
variant.assemble.doLast {
if (variant.buildType.name.contains('release')) {
def apkPath = variant.outputs.get(0).outputFile as File
exec {
ignoreExitValue true
commandLine "sh", "../../jiagu/jiagu_360.sh", apkPath, apkPath.getParent()
}
}
}
}
}
这样360加固就自动搞定了,你只需要.gradlew assembleRelease就会自动帮你打包并且加固。
接下来就是对加固的应用进行签名,多渠道什么的了。
对齐、签名
在加固的基础上,在sh文件中继续添加如下代码:
echo "------ output file start------"
for file_a in ${DEST}/*; do
temp_file=`basename $file_a`
if [[ $temp_file == *"jiagu"*.apk ]];then
JIAGU_PATH=${DEST}$temp_file
echo "find it "${JIAGU_PATH}
echo $temp_file
break
fi
echo $temp_file
done
echo "------ output file finish ------"
echo "------ zipalign running! ------"
${SDK_PATH}/zipalign -v 4 ${JIAGU_PATH} ${ZIP_PATH}
echo "------ zipalign finished! ------"
echo "------ signer running! ------"
${SDK_PATH}/apksigner sign --ks ${KEY_PATH} ${ZIP_PATH} <<EOF
${KEY_PASSWORD}
EOF
echo "------ signer finished! ------"
Walle多渠道分包
1.首先我们需要两个jar包
关于jar包的获取,可以参考:
Tinker使用过程及注意点(2)-360加固及多渠道分包
2.在jiagu文件夹下新建walle文件夹,然后加入
CheckAndroidV2Signature.jar
walle-cli-all.jar
channel.txt
3.在sh文件中添加如下代码:
echo "------ check android v2 signature start ------"
java -jar ${WALLE_PATH}/CheckAndroidV2Signature.jar ${ZIP_PATH}
echo "------ check android v2 signature finish ------"
echo "------ walle channel start ------"
java -jar ${WALLE_PATH}/walle-cli-all.jar batch -f ${WALLE_PATH}/channel.txt ${ZIP_PATH} ${DEST}
echo "------ walle channel finished ------"
如果你或者测试需要一个包?
只需要点一下立即构建,将自动完成
打包,
加固,
多分包,
上传fir.im,
通知相关人员。
可能的坑?
1.点击立即构建,可能某一次运行成功了,然后就一直失败。。。
解决办法:
构建 -> Invoke Gradle script -> Use Gradle Wrapper -> 高级
不知道为什么jenkins会莫名其秒的在Build File添加一个路径,导致报错,所以删除它,就没问题了。
2.Jenkins自动构建过程中,360加固报错,说文件损坏。
原因:未知。。。
解决办法:找到Jenkins的项目地址:一般在/Users/.Jenkins/workspace
然后将jiagu文件夹从本地拷贝过去,删除workspace目录下原有的jiagu文件夹。即可正常加固。