Jenkins+Git+Walle+AndResGuard打造Android多渠道打包系統

摘要

本文介紹了在Mac系統上進行Jenkins配置,而後新建項目集成WalleAndResGuard,對託管在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集成環境

由於本文不是主要介紹怎麼配置Jenkins集成環境的,並且網上的教程也不少。我我的在Mac上的配置過程沒遇到什麼大的問題,Windows下可能略有不一樣。git

  • 預先安裝Java和Git,並配置好本機的環境變量;
  • 先安裝Homebrew,輸入命令brew install jenkins安裝Jenkins;
  • 輸入密碼,進入Jenkins,安裝插件,不少插件已經安裝好了, 安裝Environment Injector就好了
  • 在系統管理-系統設置中配置ANDROID_HOME

  • 在系統管理-全局工具配置中配置Jdk
  • 在系統管理-全局工具配置中配置Gradle,可讓Jenkins自動安裝也能夠選本地的,只要版本號和項目的同樣就行,同時配置本機Gadle命令的環境變量。

建立Android項目

在Android Studio中新建一個項目,集成下Walle,而後簡單輸出下渠道信息:github

String channel = WalleChannelReader.getChannel(this.getApplicationContext());
        TextView textView=findViewById(R.id.text);
        textView.setText("channel=="+channel);
複製代碼

而後上傳到Github。
在Jenkins中新建一個自由風格的軟件項目,點參數化構建: shell

這樣在構建的時候就能夠手動輸入渠道包了。
在構建環境中定義好須要打包的項目變量和配置

打包
調用AndResGuard的jar包對Apk文件進行資源混淆,注意AndResGuard輸出的簽名包是V1簽名,因此須要咱們取未簽名的包本身去對齊和V2簽名。

輸出以下,打開任意一個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…

相關文章
相關標籤/搜索