本文介紹了在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文件寫入渠道信息,輸出渠道包。java
由於本文不是主要介紹怎麼配置Jenkins集成環境的,並且網上的教程也不少。我我的在Mac上的配置過程沒遇到什麼大的問題,Windows下可能略有不一樣。git
brew install jenkins
安裝Jenkins;Environment Injector
就好了在Android Studio中新建一個項目,集成下Walle,而後簡單輸出下渠道信息:github
String channel = WalleChannelReader.getChannel(this.getApplicationContext());
TextView textView=findViewById(R.id.text);
textView.setText("channel=="+channel);
複製代碼
而後上傳到Github。
在Jenkins中新建一個自由風格的軟件項目,點參數化構建: shell
輸出以下,打開任意一個Apk文件,看到資源文件已經被混淆了。 bash
進行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文件:ide
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 "," "\n")
for x in $arr; do
echo $x >> markets.txt
done
fi
複製代碼
最後調用Walle的jar包進行多渠道打包工具
之後每次構建的時候選擇Build with Parameters輸入渠道列表就好了:oop
據開發者說AndResGuard下個版本會支持V2簽名,參看--連接,到時候整個流程會簡化許多。gradle
追加:3月1往後develop分支已添加v2簽名功能,參看--Provide the latest jar file for v2 signature
能夠去掉參數化構建方式和寫入的shell命令,直接在markets.txt上寫渠道列表。不過我這麼作是方便運營的同窗打包。
想要了解更多實現細節請前往本項目github地址--github.com/renjianan/J…