通过上面的对比,阶段一需要4步完成一次打包测试流程,阶段二则需要12步来完成一次打包测试流程,阶段二都是用各种命令来完成,一方面比较繁琐,另一方面也容易出错,还有可能的阶段三、阶段四。。
说了一堆废话,但是我们都能感觉到好麻烦,为什么打个包这么繁琐。。。有没有什么方法能够更优雅一些?
有,答案就在Jenkins
接下来就让我们用Jenkins将繁琐的流程统统解决掉
Tinker使用过程及注意点(1)-环境搭建及简单使用
Tinker使用过程及注意点(2)-360加固及多渠道分包
源码管理
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 *
以上步骤就可以实现Jenkins的自动构建了。
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}consolea><br/><hr/>
构建地址:<a href="$BUILD_URL">$BUILD_URLa><br/><hr/>
变更集:${JELLY_SCRIPT,template="html"}<br/><hr/>
全部设置完成后点击保存,完成全局的配置
接下来就解决gradle中,如何解放双手,实现360加固和Walle多渠道分包的脚本实现
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} <${KEY_PASSWORD}
EOF
echo "------ signer finished! ------"
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文件夹。即可正常加固。