在Android 7.0(Nougat)推出了新的应用签名方案APK Signature Scheme v2后,之前快速生成渠道包的方式(美团Android自动化之旅—生成渠道包)已经行不通了,对此美团输出了新的开发渠道打包工具Walle,此篇博文针对使用Walle进行命令行打包的方式进行讲解。

Walle 工具原理

  1. 对新的应用签名方案生成的APK包中的ID-value进行扩展,提供自定义ID-value(渠道信息),并保存在APK中
  2. 而APK在安装过程中进行的签名校验,是忽略我们添加的这个ID-value的,这样就能正常安装了
  3. 在App运行阶段,可以通过ZIP的EOCD(End of central directory)Central directory等结构中的信息(会涉及ZIP格式的相关知识,这里不做展开描述)找到我们自己添加的ID-value,从而实现获取渠道信息的功能

使用该工具前提

  APK采用新的应用签名方案APK Signature Scheme v2!!!

  新的签名方案会在ZIP文件格式的 Central Directory 区块所在文件位置的前面添加一个APK Signing Block区块

  新的应用签名方案和旧的签名方案的一个对比:

Walle 使用

开源工具地址:https://github.com/Meituan-Dianping/walle

命令行工具使用方式

  获取cli所有功能

    java -jar walle-cli-all.jar -h
Usage: <main class> [options] [command] [command options]
Options:
-h, --help
show walle command line help
Default: false
-v, --version
show walle version
Default: false
Commands:
batch2 channel apk batch production
Usage: batch2 [options] inputFile [outputDirectory]
Options:
-f, --configFile
config file (json) show get channel info from apk and show all by default
Usage: show [options] file1 file2 file3 ...
Options:
-c, --channel
get channel
Default: false
-e, --extraInfo
get channel extra info
Default: false
-r, --raw
get raw string from Channel id
Default: false batch channel apk batch production
Usage: batch [options] inputFile [outputDirectory]
Options:
-f, --channelFile
channel file
-c, --channelList
Comma-separated list of channel, eg: -c meituan,xiaomi
-e, --extraInfo
Comma-separated list of key=value info, eg: -e time=1,type=android rm remove channel info for apk
Usage: rm [options] file1 file2 file3 ... put put channel info into apk
Usage: put [options] inputFile [outputFile]
Options:
-c, --channel
single channel, eg: -c meituan
-e, --extraInfo
Comma-separated list of key=value info, eg: -e time=1,type=android

  

使用示例

获取信息

显示当前apk中的渠道和额外信息:

java -jar walle-cli-all.jar show /Users/Meituan/app/build/outputs/apk/app.apk

写入信息

写入渠道

java -jar walle-cli-all.jar put -c meituan /Users/Meituan/Downloads/app.apk

指定输出文件,自定义名称。 不指定时默认与原apk包同目录。

java -jar walle-cli-all.jar put -c meituan /Users/Meituan/Downloads/app.apk /Users/xxx/Downloads/app-new-hahha.apk

批量写入

命令行指定渠道列表
java -jar walle-cli-all.jar batch -c meituan,meituan2,meituan3 /Users/walle/app/build/outputs/apk/app.apk
指定渠道配置文件
java -jar walle-cli-all.jar batch -f /Users/Meituan/walle/app/channel  /Users/Meituan/walle/app/build/outputs/apk/app.apk
配置文件示例 支持使用#号添加注释
指定渠道&额外信息配置文件
java -jar walle-cli-all.jar batch2 -f /Users/Meituan/walle/app/config.json  /Users/Meituan/walle/app/build/outputs/apk/app.apk

配置文件示例

输出目录可指定,不指定时默认在原apk包同目录下。

Walle 工具使用完整过程

  加固没签名的包  ->   用buildtool中的apksigner签名(有同学反馈24不可以,25.0.0就可以了)  ->   用walle注入渠道

  有热心的同学也帮忙整理了步骤: 支持Android7.0 Signature V2 Scheme 多渠道打包,并解决类似360加固后获取不到渠道信息 - 渠道统计失败的问题

android 7.0 多渠道打包 - 美团开源工具Walle 命令行打包的更多相关文章

  1. mac下使用命令行打包出现bash gradle command not found的解决方案

    命令行打包的时候出现 bash gradle command not found这个问题,主要是因为gradle环境丢失.需要重新配置gradle的环境变量. 1. gradle路径的查找 然后gra ...

  2. Android SQLite3工具常用命令行总结

    Android SDK的tools目录下提供了一个sqlite3.exe工具,这是一个简单的sqlite数据库管理工具.开发者可以方便的使用其对sqlite数据库进行命令行的操作. 程序运行生成的*. ...

  3. Android 命令行打包和签名

    使用命令行方式进行签名需要JDK中的两个命令行工具:keytool.exe和jarsigner.exe.可按如下两步对apk文件进行签名: 1. # keytool -genkey -v -keyst ...

  4. 两分钟学会Android平台NDK编程(无须Eclipse和cygwin,可使用命令行打包多个so)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wangbin_jxust/article/details/37389383 之前在进行cocos2d ...

  5. [原] Android自动打包之命令行打包

    Android自动打包流程详细图: 总结为以下几个步骤: 1. 生成R文件 2. Java代码编译成class文件 3. class文件生成dex文件 4. 打包资源 5. 生成apk 6. 创建密匙 ...

  6. Unity命令行打包

    http://www.66acg.com/?post=137 补充 unity编辑器端获取打包命令行自定义参数,这个可以获取到所有打包时的参数 string[] runArgs = System.En ...

  7. 使用命令行打包 nuget 包

    对于那些不打算涉及这么复杂而又想制作自己的 nuget 包的园友们,我是推荐使用 Nuget Package Explorer 来制作的.关于这个图形化的 nuget 包管理软件的使用,博客园内有相关 ...

  8. 【Android测试】【第五节】LogCat——命令行

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4684123.html 前言 上一篇将的是如果在eclips ...

  9. IOS使用命令行打包

    1.安装证书 develop:调试证书,包含调试信息 安装时需要证书已加入设备UDID或是越狱设备才能安装. distribution:正式证书,发布到appstore所用,屏蔽了调试信息,要想测试安 ...

随机推荐

  1. hibernate配置三步走

    1.导入有hibernate的required和jpa的jar包,数据库驱动jar包,日志jar包 2.创建实体类,必须有一个属性有唯一的值 package com.hui.hibernate; pu ...

  2. robot framework环境搭建

    来源:http://www.cnblogs.com/puresoul/p/3854963.html[转] 一. robot framework环境搭建: 官网:http://robotframewor ...

  3. Git添加远程报错:remote origin already exists.

    在本地创建了一个Git仓库,如何在Github创建一个Git仓库,并且让这两个仓库进行远程同步,这样Github上的仓库既可以作为备份仓库,还可以通过该仓库进行多人协作. 1.登录github,建立一 ...

  4. java知识点整理

    1 java 和Tomcat总结 脑图地址  (其中web 容器部分还需要继续完善,但是没找到相关文档) 跟着java Se 文档梳理了一下学习路线图(方便全面掌握要点,及时对自己查漏补缺),以及一些 ...

  5. Vulkan Tutorial 19 Vertex input description

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 在接下来几个章节中,我们将会使用内存顶点缓冲区来替换之前硬 ...

  6. python 解析docx文档的方法,以及利用Python从docx文档提取插入的文本对象和图片

    首先安装docx模块,通过pip install docx或者在docx官方链接上下载安装都可以 下面来看下如何解析docx文档:文档格式如下 有3个部分组成 1 正文:text文档 2 一个表格. ...

  7. javascript 闭包 转载

    http://www.jb51.net/article/24101.htm var name = "the window"; var object = { name:"m ...

  8. css3实现可以计算的自适应布局——calc()

    开始我们需要先了解什么是calc() ,calc()是一个CSS函数,你可以使用calc()给元素的margin.pading.width等属性设置 而且你还可以在一个calc()内部嵌套另一个cal ...

  9. Swift大写和小写字符串

    您可以通过字符串的 uppercaseString 和 lowercaseString 属性来访问一个字符串的大写/小写版本. 复制纯文本新窗口 let normal = "Could yo ...

  10. Python Click 学习笔记(转)

    原文链接:Python Click 学习笔记 Click 是 Flask 的团队 pallets 开发的优秀开源项目,它为命令行工具的开发封装了大量方法,使开发者只需要专注于功能实现.恰好我最近在开发 ...