摘要
本文介紹了在Mac系統上進行Jenkins配置,然後新建專案整合Walle和AndResGuard,對託管在Git上的Android專案進行持續整合的過程,其中Walle是美團開源的Android Signature V2 Scheme簽名下的新一代渠道包打包神器,;AndResGuard是微信開源的資原始檔混淆工具。我整合的整體流程如下:配置好Jenkins整合環境,用Jenkins的gradle外掛打出未簽名的包,然後用AndResGuard提供的jar包進行資原始檔混淆,得到混淆過後的未簽名包(AndResGuard目前還未支援V2簽名,只有v1簽名),然後通過Android SDK提供的apksigner工具對包進行V2簽名,最後用Walle提供的jar包對Apk檔案寫入渠道資訊,輸出渠道包。
配置Jenkins整合環境
因為本文不是主要介紹怎麼配置Jenkins整合環境的,而且網上的教程也很多。我個人在Mac上的配置過程沒遇到什麼大的問題,Windows下可能略有不同。
- 預先安裝Java和Git,並配置好本機的環境變數;
- 先安裝Homebrew,輸入命令
brew install jenkins
安裝Jenkins; - 輸入密碼,進入Jenkins,安裝外掛,很多外掛已經安裝好了, 安裝
Environment Injector
就行了 - 在系統管理-系統設定中配置ANDROID_HOME
- 在系統管理-全域性工具配置中配置Jdk
- 在系統管理-全域性工具配置中配置Gradle,可以讓Jenkins自動安裝也可以選本地的,只要版本號和專案的一樣就行,同時配置本機Gadle命令的環境變數。
建立Android專案
在Android Studio中新建一個專案,整合下Walle,然後簡單輸出下渠道資訊:
String channel = WalleChannelReader.getChannel(this.getApplicationContext());
TextView textView=findViewById(R.id.text);
textView.setText("channel=="+channel);
複製程式碼
然後上傳到Github。
在Jenkins中新建一個自由風格的軟體專案,點引數化構建:
這樣在構建的時候就可以手動輸入渠道包了。
在構建環境中定義好需要打包的專案變數和配置
打包
呼叫AndResGuard的jar包對Apk檔案進行資源混淆,注意AndResGuard輸出的簽名包是V1簽名,所以需要我們取未簽名的包自己去對齊和V2簽名。
輸出如下,開啟任意一個Apk檔案,看到資原始檔已經被混淆了。
進行V2簽名(需要加入sdk/build-tools路徑到本機的全域性變數):
zipalign -v 4 in.apk out.apk //4位元組對齊優化
java -jar apksigner.jar sign --ks key.jks --ks-key-alias releasekey --ks-pass pass:pp123456 --key-pass pass:pp123456 --out output.apk input.apk
複製程式碼
將輸入的渠道包列表輸入到markets.txt檔案:
cd ${WORKSPACE}
if [[ ! -d "${SOURCE_TARGET}" ]]; then
git clone ${PROJECT_GIT_REPO} ${WORKSPACE} -b ${PROJECT_GIT_BRANCH}
fi
cd ${WORKSPACE}
git pull --no-commit --all
echo "最新提交:"$(git log -p -1 --pretty=format:"%s (%an)" --name-only | grep ")")
APP_VERSION=$(
path=${WORKSPACE}/build.gradle
key="versionName"
loop=1
version=""
while read line
do
readText=${line%%%=*}
if [[ $readText =~ $key ]]
then
version=${readText:15:5}
break
fi
((loop++))
done < $path
echo $version
)
echo APP_VERSION=$APP_VERSION > ${WORKSPACE}/build.properties
echo $Markets
if [ "$Markets" != "" ]; then
rm -f markets.txt
arr=$(echo $Markets|tr "," "
")
for x in $arr; do
echo $x >> markets.txt
done
fi
複製程式碼
最後呼叫Walle的jar包進行多渠道打包
輸出如下,安裝之後也可以正確讀出寫入的渠道的資訊了:
構建
以後每次構建的時候選擇Build with Parameters輸入渠道列表就行了:
後記
據開發者說AndResGuard下個版本會支援V2簽名,參看–連結,到時候整個流程會簡化許多。
追加:3月1日後develop分支已新增v2簽名功能,參看–Provide the latest jar file for v2 signature
可以去掉引數化構建方式和寫入的shell命令,直接在markets.txt上寫渠道列表。不過我這麼做是方便運營的同學打包。
想要了解更多實現細節請前往本專案github地址–github.com/renjianan/J…