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

5,201 阅读3分钟

摘要

本文介绍了在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文件写入渠道信息,输出渠道包。

配置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…