gradle实现乐固+walle自动化构建项目

gradle实现乐固+walle自动化构建项目

问题说明

针对v2的签名方式,由美团团队创造了walle工具进行多渠道信息写入,这样在同一个release包中,写入不同信息就可以实现多渠道的目的,这种高效率的实现方式,成为了目前产出多渠道包的主流。
但同时诞生了一个问题:在通过三方加固之后,写入的信息被抹去了,要重新进行写入,而且加固软件的出现,局限了我们只能在本机进行打包加固,不利于jenkins自动化打包发布。所以我产出这篇博文,记录我是怎么处理这个问题的,希望能帮助到大家。

前期准备

在解决以上问题之前,我先对我目前所搭建的环境进行说明:

  1. 目前有配置完好的jenkins服务器,并映射了域名,可以做到直接性的文件访问。
  2. 有腾讯(QQ)账号,并通过腾讯云的子账号,生成了SecretId和SecretKey。

自动化流程说明

首先,打开腾讯乐固的官方网站查询资料:
https://cloud.tencent.com/document/api/283/17753
由网站文档可知:

  1. 乐固同360加固不同,乐固仅提供api接口,由我方自己调用。
  2. 调用的核心参数AppInfo:
  • AppUrl:待加固的APP的下载地址,不需要身份校验。
  • AppMd5:由于对方在下载完毕后,会对下载的APP进行MD5校验,所以此处产生的MD5值需要与待加固的APP保持一致。
  1. 加固流程:
    (1) 打包release版本APP,可以是已经签名好的APP。
    (2) 将APP push进服务器,提供可下载的URL。
    (3) 计算本地的APP的MD5值。
    (4) 生成乐固请求参数,主要是将2、3步骤生成的数据写入,接口为CreateShieldInstance。
    (5) 轮询加固结果,接口为DescribeShieldInstances。
    (6) 如果加固成功,则返回参数中的AppUrl会提供加固好未签名的APP下载地址。
    (7) 下载已经加固好的APP。
    (8) 对该APP进行对齐、签名。
    (9) 对该APP进行walle信息写入。
    (10) 将完成的APP push进发布服务器,所有步骤完成。

具体流程解析和实现

  1. 配置jenkins,先对应用进行打包:
    增加一个execute shell的构建步骤,执行:./gradlew clean assembleRelease
    在这里插入图片描述
  2. 根据R神大佬的AS–›Gradle乐固加固和下载一文,我们配置好legu task的运行参数,引用步骤如下:
    (1) 在project app的同级目录下,新建一个名为legu的文件夹
    (2) 将大佬写的.gradle文件复制在该文件夹下的lejiagu.gradle中,名字随便取,只要预编译不报错,则代码提示报红无视。
    在这里插入图片描述
    (3) 在自己app级的.gradle中引入该文件
    在这里插入图片描述
    (4) 在lejaigu.gradle中,填入leguConfig的必填项参数,如下:
    在这里插入图片描述
    如果一切顺利,此时运行legu task:gradlew legu,会成功生成加固完成的apk包。
  3. 很好,成功就在眼前。我们现在还需要对应用进行对齐、签名和写入渠道信息了。不过这里出现了问题:
    在android sdk中,为我们提供了两个工具进行应用的对齐和签名,分别是:
    zipalign.exe和apksigner.bat(windows平台)
    它们都在build-tools/你的targetVersion/中,我们需要使用这两个工具才能对应用进行对齐和v2签名。
    看到exe我开始犯难,因为在其他平台,如linux,可执行不了exe文件,那么为了写出来通用性高,可移植的脚本,我们需要对平台进行判断,包括其他一些差异,如文件路径/和\。
    一开始我的思路是【复用】:
    我们都知道,在打release包时,gradle执行了assembleRelease task,该task除了打包之外,还进行了引用的对齐和签名,那么虽然这两个task是隐藏的,但是通过查看android.tools.build:gradle源码,我们可以找到官方的思路和方法,退一步来说,可以仿写出来-------------------------------
    想法很美好,现实很骨感,我追了2天的android.tools.build:gradle源码,仅发现了zipalign的task,而签名的task始终没有找到,对于这部分源码的解析,我会再另一篇文章中专门讲解。
    好吧,这条路走不通了。
    那么查看walle的官方说明,我们找到了一个python脚本 ,用于处理对齐、签名、多渠道写入,这不是正是我们需要的吗?
  4. 集成对齐,签名,多渠道python脚本
    我们先将该文件集成进我们的项目,还好都是基本工具,所以不大,直接丢进legu文件夹中。
    在这里插入图片描述
    其中ApkResigner.py是主流程的文件,我们不需要去改动,仅对channel和config.py修改即可。
    配置好之后,先在本地跑一下,这里有个细节:
    需要CD到legu目录下,脚本才能正常执行,应该是和我的配置有关。
    不出意外,一切正常,在channels下生成了多渠道签名包。
    现在我们把这一切丢到jenkins上去,由于路径差异,有些地方需要修改:
    我的方式是,在jenkins执行打包命令之前,修改config.py,主要是设置服务器上的SDK路径,确定build-tools的文件位置。
    在这里插入图片描述
    做好这一切后,我们编译一下…等待结果。
    在这里插入图片描述
    很好。。打包成功!

猜你喜欢

转载自blog.csdn.net/xuehaiwuya1212/article/details/86222717