[转]安卓新一代多渠道打包工具Walle 解决渠道包V2签名问题
转自https://www.jianshu.com/p/572b59829a08
为什么要打多个渠道的包?
大家都知道,android应用商店大大小小有几百个,作为一个有志向的app,就需要做到统计各个应用商店的下载量,不同渠道下的app使用时长、安装数量、使用用户数等等信息,这个时候就需要打多个渠道包。渠道包的原理大致就是往apk中写入不同的渠道信息,对这个问题有疑问的同学可以看看gradle官网或者看看这篇文章。
传统多渠道打包
用android studio开发的同学都知道,传统的多渠道打包方法是通过gradle配置productFlavors,在配合grade的manifestPlaceholders插件,就可以实现task打多渠道包了,具体如下。
//app目录下在build.gradle文件中添加如下代码
productFlavors {
yingyongbao {
manifestPlaceholders = [CUSTOM_CHANNEL_VALUE: "yingyongbao"]
}
baidu {
manifestPlaceholders = [CUSTOM_CHANNEL_VALUE: "baidu"]
}
}
//在AndroidManifest.xml中添加如下代码 如果有使用友盟把CUSTOM_CHANNEL换成UMENG_CHANNEL即可
<meta-data
android:name="CUSTOM_CHANNEL"
android:value="${CUSTOM_CHANNEL_VALUE}" />
这个时候就可以用task要打包了,双击即可。或者直接在命令行输入
./gradlew assembleRelease//打包所有渠道
./gradlew assembleWandoujiaRelease//打包单个渠道 Wandoujia

没出现渠道打包task的同学请点击左上角的刷新按钮。
Walle多渠道打包
这种方法是很简单省事,但是并不省时啊!通过这种方式打包,gradle每次都要从资源文件开始到生成apk重新走一遍,所以很耗时,每次打包一次要等十几分钟,如果渠道多的app估计要等上半小时以上。这时候我们就要想想有没有其他的打包方式了,刚好在推酷上看到了美团开源的Android Signature V2 Scheme 签名下的新一代渠道包打包神器Walle,跟gradle打包不一样,walle是在APK Signature Block区块添加自定义的渠道信息,具体如下。

当然了,Walle并不是为了解决打包速度而产生的一个工具,美团研究walle的原因是因为在Android 7.0(Nougat)推出了新的应用签名方案APK Signature Scheme v2后,之前快速生成渠道包的方式(美团Android自动化之旅—生成渠道包)已经行不通了,具体可以看看Walle自己是怎么说的。
Walle简单使用
Gradle 插件使用方式
//配置 build.gradle
//在位于项目的根目录 build.gradle 文件中添加Walle Gradle插件的依赖, 如下:
buildscript {
dependencies {
classpath 'com.meituan.android.walle:plugin:1.0.3'
}
}
//并在当前App的 build.gradle 文件中apply这个插件,并添加上用于读取渠道号的AAR,
apply plugin: 'walle'
//如果不需要通过walle获取渠道号 则不需要加
dependencies {compile 'com.meituan.android.walle:library:1.0.3'}
Walle信息配置
//在当前App的 build.gradle 中添加如下信息
walle {
// 指定渠道包的输出路径
apkOutputFolder = new File("${project.buildDir}/outputs/channels");
// 定制渠道包的APK的文件名称 ${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk
apkFileNameFormat = '${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
// 渠道配置文件
channelFile = new File("${project.getProjectDir()}/channel")
}
配置项具体解释:
apkOutputFolder:指定渠道包的输出路径, 默认值为new File("${project.buildDir}/outputs/apk")
apkFileNameFormat:定制渠道包的APK的文件名称, 默认值为'${appName}-${buildType}-${channel}.apk'
可使用以下变量:
projectName - 项目名字
appName - App模块名字
packageName - applicationId (App包名packageName)
buildType - buildType (release/debug等)
channel - channel名称 (对应渠道打包中的渠道名字)
versionName - versionName (显示用的版本号)
versionCode - versionCode (内部版本号)
buildTime - buildTime (编译构建日期时间)
fileSHA1 - fileSHA1 (最终APK文件的SHA1哈希值)
flavorName - 编译构建 productFlavors 名
channelFile:包含渠道配置信息的文件路径,channel文件放在module的同级目录下。 具体内容格式详见:渠道配置文件示例,支持使用#号添加注释。
获取渠道
在需要获取渠道信息的地方使用如下代码获取渠道信息
String channel = WalleChannelReader.getChannel(this.getApplicationContext());
通过读取<meta-data>来获取渠道号
private void readMetaDataFromApplication() {
try {
ApplicationInfo appInfo = this.getPackageManager()
.getApplicationInfo(getPackageName(),
PackageManager.GET_META_DATA);
String mTag = appInfo.metaData.getString("mTag");
Log.e(TAG, "mTag=" + mTag);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
打包
生成渠道包的方式是和assemble${variantName}Channels指令结合,渠道包的生成目录默认存放在 build/outputs/apk/,也可以通过walle闭包中的apkOutputFolder参数来指定输出目录
用法示例:
- 生成渠道包 ./gradlew clean assembleReleaseChannels
- 支持 productFlavors ./gradlew clean assembleMeituanReleaseChannels
- 生成单个渠道包 ./gradlew clean assembleReleaseChannels -PchannelList=google
- 生成多个渠道包 ./gradlew clean assembleReleaseChannels -PchannelList=google,dianping
更多用法
作者:tse1y 链接:https://www.jianshu.com/p/572b59829a08 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
[转]安卓新一代多渠道打包工具Walle 解决渠道包V2签名问题的更多相关文章
- 多渠道打包工具Walle源码分析
一.背景 首先了解多渠道打包工具Walle之前,我们需要先明确一个概念,什么是渠道包. 我们要知道在国内有无数大大小小的APP Store,每一个APP Store就是一个渠道.当我们把APP上传到A ...
- Android 新一代多渠道打包神器
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:李涛 ApkChannelPackage是一种快速多渠道打包工具,同时支持基于V1签名和V2签名进行多渠 ...
- 【腾讯Bugly干货分享】Android 新一代多渠道打包神器
关于作者: 李涛,腾讯Android工程师,14年加入腾讯SNG增值产品部,期间主要负责手Q动漫.企鹅电竞等项目的功能开发和技术优化.业务时间喜欢折腾新技术,写一些技术文章,个人技术博客:www.lt ...
- Android多渠道打包工具
http://www.cnblogs.com/huangtianhui/archive/2012/07/14/2591382.html 鉴于Android市场众多,基于各种利益考虑,以及未来app能够 ...
- Android 多渠道打包,上百渠道,秒打签名
具体工具参见:https://github.com/hpu-spring87/MultiSignTools
- ”只用 1 分钟“ - 超简极速 Apk 签名 & 多渠道打包神器
众所周知,渠道包作为当下国内 Android 应用市场常见的分发方式,当 APP 和后台交互或进行数据上报时,会带上各自的 channel 渠道信息,以此方便企业 & 开发者统计 APP 在各 ...
- android 7.0 多渠道打包 - 美团开源工具Walle 命令行打包
在Android 7.0(Nougat)推出了新的应用签名方案APK Signature Scheme v2后,之前快速生成渠道包的方式(美团Android自动化之旅-生成渠道包)已经行不通了,对此美 ...
- 借腾讯开源 VasDolly,谈谈 Android 签名和多渠道打包的原理!
一.前言 Hi,大家好,我是承香墨影! 当我们需要发布一款 App 到应用市场的时候,一般需要我们针对不同的市场生产不同的渠道包,它们使用的是同一套代码,只是会包含一些各自的渠道信息,用于我们做数据分 ...
- Android 多渠道打包原理和使用
每次中午吃饭总会和技术同学聊天.当做 iOS 开发的做安卓开发的人员在一起的时候,他们中间又多了一个话题:iOS 开发难还是安卓开发难. 这个时候做安卓开发的同学最激动说安卓开发要自己画界面.机型复杂 ...
随机推荐
- 【Unity与23种设计模式】代理模式(Proxy)
GoF中定义: "提供一个代理者位置给一个对象,好让代理者可以控制存取这个对象." 代理模式多用来优化资源的加载 当资源已经加载过时,使用原来的资源 当资源没有加载过时,开始加载 ...
- canvas 绘制图形
canvas 绘制图形: 注意: canvas 的宽高设置在行内,否则会使画布(canvas)产生扭曲,绘图变形: <!DOCTYPE html> <html lang=" ...
- 基于Jmeter的自动化测试实施方案设计
前言: Jmeter是目前最流行的一种测试工具,基于此工具我们搭建了一整套的自动化方案,包括了脚本添加配置.本地配置和运行.服务器配置等内容,完成了自动化测试闭环,通过这种快捷简便高效的方式,希望可以 ...
- 腾讯云GAME-TECH游戏开发者技术沙龙(深圳)开启报名啦~
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~. 作者:由腾讯游戏云发表在云+社区 腾讯云GAME-TECH沙龙继1月杭州站后,将于3月30日来到深圳站,与游戏厂商和游戏开发者,畅聊游戏安 ...
- 配置CNPM-基础案例
下面给出一个样例配置: JavaScript module.exports = { enableCluster: true, database: { db: "snpm", use ...
- 关于ASP.NET MVC的js和css资源管理
本文来源于博客园-钱智慧,转载请注明出处 通过这篇文章和这个回答,我们总结如下: 浏览器针对一个域名,最多只会开启6个线程来加载文件,比如head中如果有7个引入文件(js文件或者css文件)的标签, ...
- thinkphp3.2-更改控制器名后找不到相应的表?报1146的错
用tp在做着自己的小系统的时候,明明在刚才还是能好好地查到表的,在Service用了'D'方法连自己数据库的表,只是更改了自己的控制器名,却报错了... 我就纳闷了,虽然我的控制器和Service用的 ...
- 笔记:Struts2 的 JSON 插件
安装插件,将其复制到Web应用的WEB-INF/lib 目录下 Struts2-json-plugin-2.3.16.3.jar json-lib-2.3-jdk15.jar commons-bean ...
- Python 中列表生成式和生成器
列表生成式 即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list [1,2,3,4,5,6,7,8,9,10]可以用l ...
- linux --> 为什么寄存器比内存快?
为什么寄存器比内存快 计算机的存储层次(memory hierarchy)之中,寄存器(register)最快,内存其次,最慢的是硬盘. 原因一:距离不同 距离不是主要因素,但是最好懂,所以放在最前面 ...