摘要
本文介绍了在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 "," "\n")
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/ren93/Jenki…