专栏名称: 郭霖
Android技术分享平台,每天都有优质技术文章推送。你还可以向公众号投稿,将自己总结的技术心得分享给大家。
目录
相关文章推荐
stormzhang  ·  真正该刺激的是收入 ·  昨天  
鸿洋  ·  一款高效的HarmonyOS工具包 ·  昨天  
鸿洋  ·  Android主线程锁监控的一种方案 ·  5 天前  
stormzhang  ·  打工人维权,难吗? ·  6 天前  
鸿洋  ·  systemserver进程监控者--wat ... ·  1 周前  
51好读  ›  专栏  ›  郭霖

基于Walle的多渠道快速打包自动脚本

郭霖  · 公众号  · android  · 2017-07-24 08:00

正文

今日科技快讯

自今年5月份以来,国内加油站竞相降价促销。不仅民营加油站加大了促销力度,连中石油、中石化等国字号石化企业所属的加油站也放下身段,大规模加入到促销、降价大军中。降价广度幅度创近年来之最。为什么这些企业都开始搞降价大促销?除了炼油能力大幅提升导致供过于求之外,专家认为共享单车的快速发展也会对成品油消费产生替代作用。

作者简介

高温又持续了一周,大家新的一周还是要保持好心态,注意防暑,身体最重要。新的一周大家也要好好努力!

本篇来自 夕枫晚照 的投稿, 向大家分享基于 Walle 的多渠道快速打包自动脚本,是对多渠道快速打包知识进行进一步深入讲解,希望大家喜欢。

夕枫晚照 的博客地址:

http://www.jianshu.com/u/c796f8a8ba5e

前言

Walle 的项目链接:

https://github.com/Meituan-Dianping/walle

最近项目的渠道包越来越多,传统的多渠道打包方式十分缓慢,基本一分钟一个包,十几个渠道的时候还能忍受十几分钟,但是几十个包1个小时这种打包速度实在无法接受。于是在网上找了一下再写入的打包方式,看到了美团的解决方案。

因为自己的项目里用到了 360 加固,很自然的中招了,顺着去看美团的加固后失效的解决方案

http://18e0c209.wiz01.com/share/s/0oUc890scQDx2tkMAj02NI0c3Ubmms31ckdr2UwE0E2X-bzY

十分感谢 itang 的热心整理。本文的内容就是根据上面这篇文章编写的自动化脚本。

目的

为了解决使用 Walle 打包同时使用 360 或者其他三方加固的问题,根据上面的链接我们需要在打包时需要如下步骤:

  1. 使用 AS 进行普通的打包 打包后生成 apk 为未加固版

  2. 打开 360 加固助手或者使用网页进行加固,此时不需要签名
    加固后的 apk 文件假设为C:\Users\app225.apk

  3. 进行zipalign压缩对齐 得到 app_nosign.apk
    具体操作为:命令行输入(我的sdk在F盘)zipalign -v 4 [apk路径] [生成的apk路径]
    F:\sdk\build-tools\25.0.3>zipalign -v 4 C:\Users\app225.apk C:\Users\app_nosign.apk

  4. 对app_nosign.apk 进行签名 apksigner sign --ks [keystore路径] [apk路径]
    F:\sdk\build-tools\25.0.3>apksigner sign --ks C:\Users\xxxx.jks C:\Users\app_nosign.apk

  5. 检查是否使用 V2 签名 java -jar CheckAndroidV2Signature.jar [apk路径]
    java -jar C:\Users\CheckAndroidV2Signature.jar C:\Users\app_nosign.apk

  6. 写入渠道信息
    写入一个渠道
    java -jar walle-cli-all.jar put -c [渠道名] [apk路径]
    java -jar walle-cli-all.jar put -c [渠道名] [apk路径] [生成的apk路径(可选)]
    java -jar walle-cli-all.jar put -c yingyongbao C:\Users\app_nosign.apk
    批量写入渠道(生成的文件写入到apks目录下)
    java -jar walle-cli-all.jar batch -f [渠道文件] [apk路径] [生成的新apk路径(可选)]
    java -jar walle-cli-all.jar batch -f C:\Users\channel C:\Users\app_nosign.apk C:\Users\apks

  7. 显示当前apk中的渠道和额外信息
    java -jar walle-cli-all.jar show [apk路径]

经过一番在命令行中的折腾之后,终于搞定了。虽然完成了任务,但是实在太麻烦了,于是打算把这些全部封装成一个批处理。

批处理

预想的目标是做一个工具包,将 apk 文件拖到批处理bat文件上,就自动对 apk 进行渠道打包前面,然后在 apks 文件夹输出。

准备工作

一些命令的收集:
获取自身所在路径 set mypath=%~dp0
获取拖入文件路径 set filepath=%~dp1
设定的临时文件目录 当前工具包路径 /cache
调用其他批处理文件 CALL

初步完成

初步的按照上面的方案完成代码


通用性优化

上一步代码的问题是 keystore 完全是写死到里面的,无法修改也不够灵活,于是改为使用config.ini 配置文件配置参数,批处理读取的方法,同时将生成的文件改为和输入文件的文件名相关的模式。

这里遇到个问题:读入参数里含有中文和特殊符号(自己作死 keystore 名称写成中文了,还带有特殊符号),需要如果是写死到批处理文件中,那么需要使用 ascii 编码保存,如果是配置文件则要将配置文件保存成ascii编码。

拓展方案

这个方案的实质是要使用自动化的方式调用几个命令,完成文件生成,所以还可以采用其他的自动化脚本方案。这里试验了一下使用 Python 完成上述任务,不过被字符集问题困扰没有完成。试验的代码也放到 demo 的 beta 文件夹下了。类似的还可以考虑使用 gulp.js或者 Java 的 Jenkins,和Android关系紧密的 Gradle 应该也能完成。

实际demo和工具类

https://github.com/HortonGou/packtool

更多

每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。

如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。

欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号: