更便捷的Android多渠道打包方式
本文先回顾了以往流行的多渠道打包方式,随后引入的mcxiaoke的packer-ng-plugin项目,介绍该项目在实际应用(配合友盟统计)中如何解决更方便的Android多渠道打包问题
- 多渠道打包方案解析
- 实际应用集成
多渠道打包方案解析
android应用市场多种多样,应用宝、小米市场、豌豆荚...为了监督每个市场我们的应用下载和推广情况,对发布在每个市场上的apk打上烙印是必须的一步,这就是多渠道apk的问题,“渠道”就是给apk打上的烙印。
同时友盟统计可以帮我们统计渠道数据(Channel),方便产品经理对数据分析后做下一步产品决策。
目前多渠道打包方式大致有:
- gradle自带的productFlavor方式,见我之前的博客
- apktool重签名重打包
- 在apk文件中的META-INF文件夹中写入以渠道号命名的空文件方式(美团)
第三种是比较快的方式,据说900多个渠道不到一分钟就能打完,参考。但是缺点也是有的,你需要维护一个python脚本,为每一种渠道写入一个以渠道名命名的空文件。
本文将介绍的packer-ng-plugin的思路其实是有点类似的,由于apk就是一个zip文件,zip文件尾部有一个部分可以作为zip文件的注释,正确修改这一部分不会对ZIP文件造成破坏,利用这个字段,我们可以添加一些自定义的数据,PackerNg项目就是在这里添加和读取渠道信息。同时提供了读取渠道信息的接口。
实际应用集成
修改项目gradle,加入
buildscript {
......
dependencies{
// add packer-ng
classpath 'com.mcxiaoke.gradle:packer-ng:1.0.5'
}
}
修改moudle级别gradle,加入
apply plugin: 'packer'
dependencies {
// add packer-helper
compile 'com.mcxiaoke.gradle:packer-helper:1.0.5'
}
注意:packer-ng 和 packer-helper 的版本号需要保持一致
在你的项目根目录中加入渠道列表文件,比如文件名是market.txt,内容是
YingYongBao
XiaoMi
WanDouJia
Baidu
Qihoo
GooglePlay
...
就是每一行即一个渠道号
再在你的项目根目录加入一个bat脚本(windows),比如叫做build.bat,内容写上(即一个命令)
gradle -Pmarket=markets.txt clean apkRelease
大功告成,以后每次打渠道包,只要进入你的根目录,双击这bat脚本,packer-ng-plugin就开始自动帮你根据market.txt构建每一个渠道包;或者直接在android studio的Terminal中执行build.bat亦可。
观察控制台的输出,packer-ng最终是为每一个渠道包的打制形成了一个个的gradle task:
...
:app:apkRelease processed apk for XiaoMi (4)
:app:apkRelease processed apk for WanDouJia (5)
:app:apkRelease processed apk for Baidu (6)
:app:apkRelease processed apk for Qihoo (7)
:app:apkRelease processed apk for GooglePlay (8)
:app:apkRelease all 8 apks saved to D:\workspace\shine\build\archives
:app:apkRelease PackerNg: Market Packaging Successful!
BUILD SUCCESSFUL
Total time: 1 mins 23.269 secs
根据这个输出,他一共生成了8个渠道包,所有的apk输出在了项目根目录的build/archives文件夹中
packer-ng-plugin也提供了一些自定义配置,比如输入的apk的命名方式,具体参考插件配置说明,同时提供了java和python的命令行脚本,供集成到持续集成环境中,具体参考命令行打包脚本。
最后需要提的一点就是如何让友盟统计知道目前的apk是哪个渠道。首先你需要删除之前的productFlavor或者manifest的占位符的方式的代码,删除AndroidManifest中友盟的渠道Channel的META-Data的配置。
然后在app入口(Application)的onCreate中加入下列代码:
final String market = PackerNg.getMarket(this,"defaul_channel);
AnalyticsConfig.setChannel(market); //AnalyticsConfig是友盟的代码方式设置渠道类
更便捷的Android多渠道打包方式的更多相关文章
- android 多渠道打包
android 多渠道打包 原理 在manifest文件中,application标签内部设置不同的metadata标签即可,可以通过java api获取这个matedata内的值 友盟提供的多渠道打 ...
- 【Android】Android多渠道打包--Gradle打包
Android多渠道打包--Gradle打包 前言 由于App一般都会在多个应用市场上架,为了分析App在每个不同渠道的具体的数据,一般都会对不同渠道打包不同的App.多渠道打包有多种方式,这里只介绍 ...
- Android 多渠道打包原理和使用
每次中午吃饭总会和技术同学聊天.当做 iOS 开发的做安卓开发的人员在一起的时候,他们中间又多了一个话题:iOS 开发难还是安卓开发难. 这个时候做安卓开发的同学最激动说安卓开发要自己画界面.机型复杂 ...
- Android多渠道打包工具
http://www.cnblogs.com/huangtianhui/archive/2012/07/14/2591382.html 鉴于Android市场众多,基于各种利益考虑,以及未来app能够 ...
- android多渠道打包牛B工具
http://www.orchidshell.com/ 兰贝壳儿:一个Eclipse插件,为Android开发提供了多渠道打包功能和一些工具类.
- Android多渠道打包且根据不同产品打包不同的assets资源目录
因为项目中存在多种环境,既要区分bebug与release版本,release又要区分测试环境与生产上线环境,每次打包都得浪费不少的等待时间:并且哪个版本有问题还得去切换环境一个个打包,关键是还得牢记 ...
- Android多渠道打包
项目需要,简单2步实现(由于简单,所以对大量渠道打包不是最优的),比如1000个渠道同时打包的话可能花费的时间会过长.不过目前该方法能满足绝大需求了...根据截图一步一步走: 第一步 设置配置清单文件 ...
- Android 多渠道打包,上百渠道,秒打签名
具体工具参见:https://github.com/hpu-spring87/MultiSignTools
- 【腾讯Bugly干货分享】Android 新一代多渠道打包神器
关于作者: 李涛,腾讯Android工程师,14年加入腾讯SNG增值产品部,期间主要负责手Q动漫.企鹅电竞等项目的功能开发和技术优化.业务时间喜欢折腾新技术,写一些技术文章,个人技术博客:www.lt ...
随机推荐
- Sql Server之旅——第六站 使用winHex利器加深理解数据页
这篇我来介绍一个winhex利器,这个工具网上有介绍,用途大着呢,可以用来玩数据修复,恢复删除文件等等....它能够将一个file解析成 hex形式,这样你就可以对hex进行修改,然后你就可以看到修复 ...
- web会话管理
http协议是无状态的协议,也就是说服务器不知道这个http连接是那个浏览器发过来的. 要标识会话的唯一,有两种方法:1 Cookie 2 会话级cookie(开关浏览器算一次会话) 和 持久化的c ...
- W3School-CSS 字体(font)实例
CSS 字体(font)实例 CSS 实例 CSS 背景实例 CSS 文本实例 CSS 字体(font)实例 CSS 边框(border)实例 CSS 外边距 (margin) 实例 CSS 内边距 ...
- 自定义SeekBar的使用
一.seekbar是进度条,可以使用系统的,也可以自己定义,下面我们将自己定义一个seekbar. 1.自定义滑条,包括对背景,第一进度,第二进度的设置,通过一个xml来实现,在drawable下创建 ...
- php模拟飞鸽传输协议,代码实现向飞鸽发送消息
飞鸽传书协议:1:23149:riverlet:127.0.0.1:\x20:balabalabalabala版本号:包编号:发送者姓名:发送者主机名:命令字:附加信息(消息内容) <?php ...
- 第14章 位图和位块传输_14.4 GDI位图对象(2)
14.4.7 在位图上绘图 (1)在内存设备环境中绘图(与真实DC不同的是,内存DC的显示表面是个位图) (2)GetTextExtentPoint32函数:用于确定文本字符串的像素大小.(此大小就是 ...
- AC日记——合法C标识符 openjudge 1.7 06
06:合法 C 标识符 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个不包含空白符的字符串,请判断是否是C语言合法的标识符号(注:题目保证这些字符串一定不是C语言的保留字 ...
- ORCHARD 是什么?
官网 http://orchard.codeplex.com 教程 http://www.cnblogs.com/sunjunlin/p/3876693.html [翻译]从头开始编写一个Orchar ...
- lgy -oracle
PL/SQL Developer 和 instantclient客户端安装配置(图文) 一: PL/SQL Developer 安装 下载安装文件安装,我这里的版本号是PLSQL7.1.4.1391, ...
- 有关数据库行、锁 的几个问题(rowlock)
行锁的基本说明: SELECT au_lname FROM authors WITH (NOLOCK) 锁定提示 描述 HOLDLOC ...