先介紹一下爲什麼要用這麼一大堆東西。。。。
- 階段一 開發了一個簡單的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文件夾。即可正常加固。