对于安卓程序猿朋友来说,每当发布新版本的APP,均会分发到各大应用市场,比如腾讯应用宝,豌豆荚和360手机助手等。为了让程序猿同志们更好的区分不同的应用市场,掌握各市场APP发展状况,为了更多体现世界对程序猿的关爱,我们的多渠道包诞生啦。

一、Android多渠道打包机制

Android多渠道打包机制的原理为:向分发到不同市场的APP中打入对应的市场标识,APP运行时获取到该标识信息,并将信息发送到指定的统计服务器,用于跟踪记录各个市场中APP的发展情况。

通过制作多渠道包,程序猿朋友们可以掌握第一手应用市场动态,随时向老板汇报,制定相应的需求策略,出任总经理,担任CEO,赢取白富美,从此走上人生巅峰。

二.多渠道包的DIY方式

Android中添加渠道信息,比较常用的有三种,分别为:AndroidManifest.xml中添加渠道信息

META-INF目录下添加渠道信息

APK文件的注释字段中添加渠道信息

例如,对于渠道Goapk_Market,三种渠道信息的添加方式如下:

1.  AndroidManifest.xml中添加渠道信息。

渠道信息将被添加到application结点下的子结点meta-data中,如下:

android:icon="@7F03000A"

android:label="@7F060014"

android:theme="@7F090083">

android:name="Goapk_Market"

android:value="Goapk">

该种方式是目前应用最广的一种,比如友盟统计sdk,腾讯统计sdk等。其中name和value可以自由定义,比较灵活。APP可以利用系统API,方便的获取渠道信息,示例代码如下:

ApplicationInfo appInfo = this.getPackageManager().getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);

String channel = appInfo.metaData.getString("Goapk_Market");

2.  META-INF目录下添加渠道信息。

渠道信息将被添加到APP的META-INF目录下,如下:

该种方式也是较常用的方式之一,利用了META-INF目录的优势,可以在APP签名后,再添加渠道信息。相对第一种方式,如何获取渠道信息相对麻烦些,示例代码如下:

public static String getChannel(Context context) {

ApplicationInfo appinfo = context.getApplicationInfo();

String sourceDir = appinfo.sourceDir;

System.out.println("channel="+ sourceDir);

String ret = "";

ZipFile zipfile = null;

try {

zipfile = new ZipFile(sourceDir);

Enumeration> entries = zipfile.entries();

while (entries.hasMoreElements()) {

ZipEntry entry = ((ZipEntry) entries.nextElement());

String entryName = entry.getName();

if (entryName.startsWith("META-INF") && entryName.contains("渠道名称_")) {

ret = entryName;

break;

}

}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (zipfile != null) {

try {

zipfile.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

String[] split = ret.split("_");

if (split != null && split.length >= 2) {

returnsplit[split.length-1];

} else {

return "";

}

}

3.  APP文件的注释字段中添加渠道信息。

该种方式利用了APK本身是一种zip包的特点,在zip的注释字段中添加渠道信息,并提供了gradle插件。其中数据格式定义如下:

而添加的渠道信息如下所示:

该种方式较前两种方式实现相对麻烦些,特别是渠道信息的获取需要读取整个APK,解析注解,获取渠道信息,另外就是兼容性不是很好。

三、快速批量多渠道打包工具的实现

目前,前两种渠道包制作方式应用较广。我们的程序猿大兄弟考虑群众需求,为大家介绍基于前两种打包方式的快速批量多渠道打包工具实现

1、利用Gradle Flavor实现快速批量打包

该方案充分利用了gradle的特性,具体为根据需求在build.gradle文件中配置productFlavor,并添加必要的代码和资源文件,实现快速多渠道打包,比较灵活,但是有一定的局限性,完全依赖于gradle,不太适合自动化的构建过程。

该方案的具体过程为:

a、在AndroidManifest.xml里设置动态渠道变量。

android:name="UMENG_CHANNEL"

android:value="${UMENG_CHANNEL_VALUE}">

b、在build.gradle设置productFlavors。

android {

productFlavors {

qh360 {}

baidu {}

wandoujia {}

}

productFlavors.all {

flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]

}

}

通过上面的配置,可以达到一次编译就能产生多个具有自己特性配置的版本。

2、利用python脚本实现快速批量打包

该方案主要应用在第二种渠道包制作方式中,通过向签名后APP的META-INF目录下写入渠道文件,实现打渠道包。该方案利用了脚本的灵活性,适合批量打包,非常方便,但是经过测试,偶尔会出现生成的渠道包损坏的情况。典型代表就是美团客户端的高效多渠道打包,万能的互联网向我们展示了此种方法的详细过程,当然也欢迎感兴趣的大妹子在后台与我深夜互动。

3、快速批量多渠道打包工具

为了便于自动化的集成,网易云捕精英大队开发了多渠道打包工具,该工具主要基于前两种渠道包制作方式,实现快速批量多渠道包的生成。

命令行下,运行:java -jar makechannels.jar 查看版本号与使用方法:

NetEase makechannel 1.0Usage:java -jar makechannels.jar -apk input.apk -config channel.txt [-flag manifest|meta] [-out outdir][-encoding utf-8|utf-8bom|gbk|unicode|ansi|utf-16be]

参数说明

-apk必填,后跟需要多渠道打包的APK全路径。-config必填,后跟渠道配置文件,请参考渠道配置文件channel.txt说明。-flag可选,后跟渠道方式,共有两种方式,分别为:

1、manifest,表示在AndroidManifest.xml中添加渠道信息。

2、meta,表示在app的META-INF目录下,添加渠道信息。

不填,则默认使用方式一。-out可选,输出目录。不填,则默认为输入APK同级目录下的channels。-encoding可选,配置文件编码格式,该模式仅支持参数中列出的编码格式。不填,则根据配置文件自动判断编码格式。

注:多渠道打包后,需要重新签名。可以从下载极速签名工具进行批量快速签名。网易云加密默认集成了该工具,用户可以将工具拷贝出来,单独使用。

android 渠道包测试,Android快速批量多渠道包的“蛋生”相关推荐

  1. android服务器压力测试,Android压力测试Monkey工具

    最近在Android程序测试过程中接触到了自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey.Monkeyrunner其它test t ...

  2. android 渠道打包工具,Android渠道打包技术小结

    导读 本文对比了渠道4种渠道打包方式: 与iOS的单一渠道(AppStore)不同,Android平台在国内的渠道多入牛毛.以我们的App为例,就有27个普通渠道(应用宝,百度,360这种)和更多的推 ...

  3. android app 渗透测试,android app渗透测试方法大全.pdf

    Android APP 渗透测试方法大全 by backlion 一.Android APP 渗透测试方法 1.测试环境 SDK : J a JDK , Android SDK. 工具: 7zip, ...

  4. android 通知灯 测试,Android灯光系统通知灯【转】

    标签: 一.通知灯应用程序的编写 1.首先实现一个按钮功能 xmlns:tools="http://schemas.android.com/tools" android:layou ...

  5. java导入包大全_eclipse快速导入jar包的相关操作步骤

    eclipse怎样快速导入jar包呢?熟悉这款软件是非常简单的,今天小编就分享了关于eclipse快速导入jar包,有需要的朋友一起来看看吧! eclipse快速导入jar包的相关操作步骤 方法1·最 ...

  6. java中怎么快速导入一个包_Eclipse中快速导入jar包的方法

    如何在Eclipse中快速导入jar包呢?下面就一起来学习Eclipse中快速导入jar包的方法吧,熟悉一下它的基本操作, 相信对各位小伙伴们一定会有所帮助的哦. Eclipse中快速导入jar包的方 ...

  7. android power键测试,Android Framework层Power键关机流程(一,Power长按键操作处理)...

    一:Android处理Power按键长按操作 在Framework层中,Android4.x对Power键(KeyEvent.KEYCODE_POWER)的操作,我们从PhoneWindowManag ...

  8. android应用 暴力测试,Android 关于Monkey暴力测试

    现在的好多应用市场上架之前都有经过Monkey的暴力测试,我们作为android的开发人员最后上线前再给测试人员测试的时候最好也要进行一下Monkey压力测试.废话不多说,今天就讲一下如何进行测试: ...

  9. Android浏览器速度测试,Android平台浏览器网页加载速度对比评测

    参与测试的浏览器 手机上网已经渐渐成为人们的一种习惯,无论在等公交时.乘地铁时.吃饭等餐时,很多朋友都习惯掏出手机简单浏览一下微博.人人.新闻网站等页面.移动网络的确为我们带来了莫大的便利,但网速和稳 ...

最新文章

  1. 人脸识别迁移学习的应用
  2. 【案例讨论】从案例引发的对缓存设计的思考,干货讨论,绝对不玩虚的
  3. string input must not be null解决办法
  4. python与人工智能的关系_广东江门的北大青鸟学校了解到人工智能与Python关系
  5. 32位单片机应用场合_全球首款基于 RISC-V 的 32 位通用单片机出现
  6. 3.从Paxos到Zookeeper分布式一致性原理与实践---Paxos 工程实践
  7. java源文件基本布局结构_请调试课本 “第117页”5.4.1节 菜单资源 的代码, 并将程序运行的屏幕截图 和 核心源代码的截图(布局文件,菜单资源文件,Java文件,程序结构图等)提交。...
  8. 319@365 RStudio中rgl包安装后调用出错解决方法初探。
  9. 华为牛人的十年工作感悟
  10. 10个3d立体字ps金属字图层样式下载
  11. html mui模板使用,mui + vue 模板
  12. happens-before的法则
  13. 各类文件头及其十六进制标识
  14. python画樱花(一)
  15. [翻译] YLGIFImage 高效读取GIF图片
  16. 腾讯 爱奇艺服务器(网址)无法访问(打不开,没有网络)
  17. linux端口抓包工具下载,linux下的抓包工具tcpdump
  18. Mac关闭SIP方法
  19. Android动画之图片循环动画
  20. 举例理解transformer中的位置编码

热门文章

  1. Count prime
  2. APM-EKF3解析(4)--EKF3数据源选择
  3. LeapMotion在unity中保姆级使用教程
  4. 腾讯云学生服务器官网地址
  5. 怎么去去除“使用右键PPTV网络电视播放”
  6. 攻防大牛在身边,这群白帽极客的故事太精彩!
  7. 设置title提示框的样式
  8. MB,GB,KB,bytes单位换算 及 fdisk -l 参数详解
  9. Android 首选项框架及PreferenceScreen,PreferenceActivity,PreferenceFragment的用法与分析
  10. Unity项目使用静态图片做背景