本文先回顾了以往流行的多渠道打包方式,随后引入的mcxiaoke的packer-ng-plugin项目,介绍该项目在实际应用(配合友盟统计)中如何解决更方便的Android多渠道打包问题

  • 多渠道打包方案解析
  • 实际应用集成

多渠道打包方案解析

android应用市场多种多样,应用宝、小米市场、豌豆荚...为了监督每个市场我们的应用下载和推广情况,对发布在每个市场上的apk打上烙印是必须的一步,这就是多渠道apk的问题,“渠道”就是给apk打上的烙印。

同时友盟统计可以帮我们统计渠道数据(Channel),方便产品经理对数据分析后做下一步产品决策。

目前多渠道打包方式大致有:

  1. gradle自带的productFlavor方式,见我之前的博客
  2. apktool重签名重打包
  3. 在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多渠道打包方式的更多相关文章

  1. android 多渠道打包

    android 多渠道打包 原理 在manifest文件中,application标签内部设置不同的metadata标签即可,可以通过java api获取这个matedata内的值 友盟提供的多渠道打 ...

  2. 【Android】Android多渠道打包--Gradle打包

    Android多渠道打包--Gradle打包 前言 由于App一般都会在多个应用市场上架,为了分析App在每个不同渠道的具体的数据,一般都会对不同渠道打包不同的App.多渠道打包有多种方式,这里只介绍 ...

  3. Android 多渠道打包原理和使用

    每次中午吃饭总会和技术同学聊天.当做 iOS 开发的做安卓开发的人员在一起的时候,他们中间又多了一个话题:iOS 开发难还是安卓开发难. 这个时候做安卓开发的同学最激动说安卓开发要自己画界面.机型复杂 ...

  4. Android多渠道打包工具

    http://www.cnblogs.com/huangtianhui/archive/2012/07/14/2591382.html 鉴于Android市场众多,基于各种利益考虑,以及未来app能够 ...

  5. android多渠道打包牛B工具

    http://www.orchidshell.com/ 兰贝壳儿:一个Eclipse插件,为Android开发提供了多渠道打包功能和一些工具类.

  6. Android多渠道打包且根据不同产品打包不同的assets资源目录

    因为项目中存在多种环境,既要区分bebug与release版本,release又要区分测试环境与生产上线环境,每次打包都得浪费不少的等待时间:并且哪个版本有问题还得去切换环境一个个打包,关键是还得牢记 ...

  7. Android多渠道打包

    项目需要,简单2步实现(由于简单,所以对大量渠道打包不是最优的),比如1000个渠道同时打包的话可能花费的时间会过长.不过目前该方法能满足绝大需求了...根据截图一步一步走: 第一步 设置配置清单文件 ...

  8. Android 多渠道打包,上百渠道,秒打签名

    具体工具参见:https://github.com/hpu-spring87/MultiSignTools

  9. 【腾讯Bugly干货分享】Android 新一代多渠道打包神器

    关于作者: 李涛,腾讯Android工程师,14年加入腾讯SNG增值产品部,期间主要负责手Q动漫.企鹅电竞等项目的功能开发和技术优化.业务时间喜欢折腾新技术,写一些技术文章,个人技术博客:www.lt ...

随机推荐

  1. apache配置文件参数优化

    1.CentOS5.8 x86_64位 采用最小化安装,系统经过了基本优化篇2.apache版本:httpd-2.2.293.源码包存放位置:/home/oldboy/tools4.源码包编译安装位置 ...

  2. java web 开发 购物车功能的实现

    为了方便自己以后复习,所以写的比较仔细,记录下自己的成长..... 既然是做购物车,那么前提条件是首先需要一系列商品,也就是要建一个实体,这里建了一个商品表. 通过查询在浏览器上显示 基本显示已经做好 ...

  3. Boost配置

    =================================版权声明================================= 版权声明:本文为博主原创文章 未经许可不得转载  请通过右 ...

  4. Javascript Function()中的降龙十八掌

    原文地址:http://tutorialzine.com/2014/08/what-does-this-function-do/ 下面列出十八个JS function,看你知道这些函数是干嘛用的,你能 ...

  5. 腾讯开放平台 IOS应用URL schema、Boundle ID填写 (含微博、微信)

    解释如下: qq比较麻烦点,需要两个 URL schemes 1.QQ+appID(appid原本是10进制的,需要转换16进制,网址:http://tool.oschina.net/hexconve ...

  6. 无穷滚动(Infinite scroll)的实现原理

    1 无穷滚动(无限加载)与分页的比较 现在越来越多的网站或者博客的列表页开始抛弃传统的分页技术,大致的原因在于,分页明显地增加了用户的操作行为以及页面加载等待的时间,而网页浏览者往往没什么耐心. 而无 ...

  7. App_Data 目录中的数据库位置指定了一个本地 SQL Server

    <configuration> <system.web> <compilation debug="true" targetFramework=&quo ...

  8. 树莓派mjpg-stream摄像头监控

    Q:463431476 第一步: 1.安装依赖 sudo apt-get install libv4l-dev libjpeg8-dev imagemagick   第二步: 下载SVN   sudo ...

  9. sql查询一天内的where写法,sql写法

    sql查询一天内的写法: 1. where createtime BETWEEN (select date_format(now(),'%Y-%m-%d 00:00:00')) and (select ...

  10. RAM,SRAM,DRAM,SDRAM,DDR RAM,ROM,PROM,EPROM,EEPROM,NAND FLASH,NOR FLASH的区别

    RAM:由字面意思就可以理解,SDRAM SRAM DRAM(下面蓝色字体的这几种)都可以统称RAM,random access memory(随机存取存储器)的缩写,下面是51hei.com为大家整 ...