android 7.0 多渠道打包 - 美团开源工具Walle 命令行打包
在Android 7.0(Nougat)推出了新的应用签名方案APK Signature Scheme v2后,之前快速生成渠道包的方式(美团Android自动化之旅—生成渠道包)已经行不通了,对此美团输出了新的开发渠道打包工具Walle,此篇博文针对使用Walle进行命令行打包的方式进行讲解。
Walle 工具原理
- 对新的应用签名方案生成的APK包中的ID-value进行扩展,提供自定义ID-value(渠道信息),并保存在APK中
- 而APK在安装过程中进行的签名校验,是忽略我们添加的这个ID-value的,这样就能正常安装了
- 在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 命令行打包的更多相关文章
- mac下使用命令行打包出现bash gradle command not found的解决方案
命令行打包的时候出现 bash gradle command not found这个问题,主要是因为gradle环境丢失.需要重新配置gradle的环境变量. 1. gradle路径的查找 然后gra ...
- Android SQLite3工具常用命令行总结
Android SDK的tools目录下提供了一个sqlite3.exe工具,这是一个简单的sqlite数据库管理工具.开发者可以方便的使用其对sqlite数据库进行命令行的操作. 程序运行生成的*. ...
- Android 命令行打包和签名
使用命令行方式进行签名需要JDK中的两个命令行工具:keytool.exe和jarsigner.exe.可按如下两步对apk文件进行签名: 1. # keytool -genkey -v -keyst ...
- 两分钟学会Android平台NDK编程(无须Eclipse和cygwin,可使用命令行打包多个so)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wangbin_jxust/article/details/37389383 之前在进行cocos2d ...
- [原] Android自动打包之命令行打包
Android自动打包流程详细图: 总结为以下几个步骤: 1. 生成R文件 2. Java代码编译成class文件 3. class文件生成dex文件 4. 打包资源 5. 生成apk 6. 创建密匙 ...
- Unity命令行打包
http://www.66acg.com/?post=137 补充 unity编辑器端获取打包命令行自定义参数,这个可以获取到所有打包时的参数 string[] runArgs = System.En ...
- 使用命令行打包 nuget 包
对于那些不打算涉及这么复杂而又想制作自己的 nuget 包的园友们,我是推荐使用 Nuget Package Explorer 来制作的.关于这个图形化的 nuget 包管理软件的使用,博客园内有相关 ...
- 【Android测试】【第五节】LogCat——命令行
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4684123.html 前言 上一篇将的是如果在eclips ...
- IOS使用命令行打包
1.安装证书 develop:调试证书,包含调试信息 安装时需要证书已加入设备UDID或是越狱设备才能安装. distribution:正式证书,发布到appstore所用,屏蔽了调试信息,要想测试安 ...
随机推荐
- hibernate配置三步走
1.导入有hibernate的required和jpa的jar包,数据库驱动jar包,日志jar包 2.创建实体类,必须有一个属性有唯一的值 package com.hui.hibernate; pu ...
- robot framework环境搭建
来源:http://www.cnblogs.com/puresoul/p/3854963.html[转] 一. robot framework环境搭建: 官网:http://robotframewor ...
- Git添加远程报错:remote origin already exists.
在本地创建了一个Git仓库,如何在Github创建一个Git仓库,并且让这两个仓库进行远程同步,这样Github上的仓库既可以作为备份仓库,还可以通过该仓库进行多人协作. 1.登录github,建立一 ...
- java知识点整理
1 java 和Tomcat总结 脑图地址 (其中web 容器部分还需要继续完善,但是没找到相关文档) 跟着java Se 文档梳理了一下学习路线图(方便全面掌握要点,及时对自己查漏补缺),以及一些 ...
- Vulkan Tutorial 19 Vertex input description
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 在接下来几个章节中,我们将会使用内存顶点缓冲区来替换之前硬 ...
- python 解析docx文档的方法,以及利用Python从docx文档提取插入的文本对象和图片
首先安装docx模块,通过pip install docx或者在docx官方链接上下载安装都可以 下面来看下如何解析docx文档:文档格式如下 有3个部分组成 1 正文:text文档 2 一个表格. ...
- javascript 闭包 转载
http://www.jb51.net/article/24101.htm var name = "the window"; var object = { name:"m ...
- css3实现可以计算的自适应布局——calc()
开始我们需要先了解什么是calc() ,calc()是一个CSS函数,你可以使用calc()给元素的margin.pading.width等属性设置 而且你还可以在一个calc()内部嵌套另一个cal ...
- Swift大写和小写字符串
您可以通过字符串的 uppercaseString 和 lowercaseString 属性来访问一个字符串的大写/小写版本. 复制纯文本新窗口 let normal = "Could yo ...
- Python Click 学习笔记(转)
原文链接:Python Click 学习笔记 Click 是 Flask 的团队 pallets 开发的优秀开源项目,它为命令行工具的开发封装了大量方法,使开发者只需要专注于功能实现.恰好我最近在开发 ...