本文介绍了在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…