多渠道打包的概念:

  打包是指使用证书文件对app签名生成一个apk文件。

  多渠道打包指的就是我们的app在开发完成之后需要投放到不同的市场,比如说Google市场、百度市场等,为了统计应用在各个市场的用户下载量、新增用户量等数据,需要把他们打包成不同的包投放到不同的市场,每种包都包含了各自市场的信息。

多渠道打包的实现:

  目前多渠道打包主要有两种实现方式:一种就是gradle变量动态替换,第二种就是第三方公司推出的批量打包方案。

gradle动态变量替换:

  首先,将manifest文件中的meta-data标签的value值用占位符替换。即${channel}

<meta-data android:name="UMENG_CHANNEL" android:value="${channel}" />

  然后,在build.gradle文件中,添加productFlavors节点,配置变量的所有取值集合。

//渠道配置,通过产品微调的功能来配置
productFlavors {
//添加一个产品配置项,名称是WanDouJiaChannel
WanDouJiaChannel {
//表示清单文件中有一个占位符channel,编译的时候会将它的值替换为wandoujia
manifestPlaceholders = [channel:"wandoujia"]
}

//再添加一个小米AppStore渠道
XiaoMiChannel {
manifestPlaceholders = [channel:"xiaomi"]
}

//再添加一个应用宝渠道
YingYongBaoChannel {
manifestPlaceholders = [channel:"yingyongbao"]
}

//...为所有渠道添加配置
}

  最后,通过打包生成全部的apk文件。

美团自动化打包:

  原理:先准备一个签过名的apk文件,然后复制多个apk文件,再向每个apk文件的META-INF目录中写入空文件,而这个文件的名称正好命名为渠道名。这样下来,每个apk文件的META-INF目录下都有一个标识了渠道名称的空文件。然后我们在app代码中,动态读取META-INF目录下的那个空文件,就获取到了渠道名,然后传递给友盟SDK。

  具体做法如下:

  在美团提供的工具中,channel.txt文件是所有的取到信息,如果需要新的,则在下面继续添加。包内有一个MultiChannelBuildTool.py文件这个文件是用python写的脚本程序,作用是读取channel中的渠道信息,然后赋值很多个apk文件,再将读取的取到信息一次写入每个apk文件的META-INF目录下,就是那个空文件。在app代码中,我们使用美团提供的ChannelUtil工具类,读取出META-INF目录下的空文件,得到当前app的渠道信息,因此原来manifest文件中的meta-data的取到标签要去掉了,原来gradle的那些渠道信息配置也都要删除。代码如下:

//获取META-INF目录下的渠道信息
String channel = ChannelUtil.getChannel(this);
//将渠道信息设置给UmengSDK
String appKey = "58b7fe1aae1bf82ad4001a1d";
MobclickAgent.UMAnalyticsConfig config = new MobclickAgent.UMAnalyticsConfig(this,appKey,channel);
MobclickAgent.startWithConfigure(config);

代码编写完成之后,导出一个签名的apk文件,然后放到PythonTool目录下,该apk文件目前没有任何渠道信息,只是功python脚本来复制用的。

最后,双击执行MultiChannelBuildTool.py文件,当然前提是安装python运行环境。此时会复制出所有apk文件,并且每个apk文件的META-INF目录下都会出现新的空文件,文件名就是渠道名。

个人总结:app多渠道打包主要有这么两种方式,一种是gradle替换动态变量的方式,主要实现是首先在清单文件的applcation节点下添加meta-data条目,并且将其value值设置为占位符(${channel}),然后去build.gradle文件中添加productFlovars节点,在该节点下添加各个渠道的信息,最后打包即可。还有一种是通过第三方的工具来实现。用的多的就是美团的自动打包工具。它的实现原理主要是:我们的apk文件一旦被修改就需要重新签名,而当我们在apk文件的META-INF目录下添加一个空文件的时候却不需要重新签名。美团打包工具就是利用了这个特性来实现打包,节省打包时间。主要实现是通过一个python的脚本工具。

首先在app中添加代码,获取META-INF目录下空文件的文件名,这个文件名就是对应的渠道信息。然后将一个没有取到信息的安装包使用脚本工具生成多个安装包。

APP多渠道打包的更多相关文章

  1. Android学习探索之App多渠道打包及动态添加修改资源属性

    前言: 关于Android渠道打包是一个比较老的话题,今天主要记录总结一下多渠道打包以及如果动态配置修改一些资源属性.今天以公司实际需求为例进行演示,由于项目复用很多公共的业务组件,而且业务组件之间的 ...

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

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

  3. 柔弱的APP如何自我保护,浅谈APP防御手段,使用360加固助手加固/签名/多渠道打包/应用市场发布

    柔弱的APP如何自我保护,浅谈APP防御手段,使用360加固助手加固/签名/多渠道打包/应用市场发布 由于JAVA和Android的平台型,所以APP很容易被反编译,这对于我们开发者来说,是一个不想要 ...

  4. Android Studio 多个编译环境配置 多渠道打包 APK输出配置

    看完这篇你学到什么: 熟悉gradle的构建配置 熟悉代码构建环境的目录结构,你知道的不仅仅是只有src/main 开发.生成环境等等环境可以任意切换打包 多渠道打包 APK输出文件配置 需求 一般我 ...

  5. 更便捷的Android多渠道打包方式

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

  6. Android Studio + gradle多渠道打包

    通过工具栏的Build->Build Apk 好像只能打包第一个Module(eclipse里面是Project的概念),怎么多渠道打包呢?目前好像只能一个一个的打 首先在清单文件里设置个变量: ...

  7. Gradle多渠道打包[umeng]

    前言 国内Android应用市场品种太多,血统不纯,每次上线App都打包打到手软,上传上到吐血!好在我们有了Android studio和gradle,一条命令打包各种渠道版本App! 正文 Umen ...

  8. Android 新一代多渠道打包神器

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:李涛 ApkChannelPackage是一种快速多渠道打包工具,同时支持基于V1签名和V2签名进行多渠 ...

  9. android 7.0 多渠道打包 - 美团开源工具Walle 命令行打包

    在Android 7.0(Nougat)推出了新的应用签名方案APK Signature Scheme v2后,之前快速生成渠道包的方式(美团Android自动化之旅-生成渠道包)已经行不通了,对此美 ...

随机推荐

  1. 《Java设计模式》之訪问者模式

    訪问者模式是对象的行为模式.訪问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作须要改动的话,接受这个操作的数据结构则能够保持不变. 分派的概念 变量被声明时的类型叫做变量的静态类 ...

  2. 嵌入式开发之davinci---DM8168 8127 8148 HDVPSS中的一些英文缩写解释

    BLEND:Alpha blends input with the graphics.将输入的视频与图形做Alpha融合. CPROC:Color Processing.颜色处理.如动态对比度增强.饱 ...

  3. 【bzoj3224】Tyvj 1728 普通平衡树

    交了一发pb_ds #include<ext/pb_ds/assoc_container.hpp> #include<algorithm> #include<iostre ...

  4. zTree 基本用法

    [简介] zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件 兼容 IE.FireFox.Chrome 等浏览器 在一个页面内可同时生成多个 Tree 实例 ...

  5. Deep Learning 30: 卷积理解

    一.深度卷积神经网络学习笔记(一): 1. 这篇文章以贾清扬的ppt说明了卷积的实质,更说明了卷积输出图像大小应该为: 假设输入图像尺寸为W,卷积核尺寸为F,步幅(stride)为S(卷积核移动的步幅 ...

  6. ABAP 检查全角半角

    check全角or半角的方法 第一种方法SJIS_DBC_TO_SBC 全角转半角 SJIS_SBC_TO_DBC 半角转换为全角 设定 import all =xtext = 文本全角-〉半角,返回 ...

  7. oracle经典建表语句--scott建表

    create table EMP ( EMPNO ) PRIMARY KEY, ENAME ), JOB ), MGR ), HIREDATE DATE, SAL ,), COMM ,), DEPNO ...

  8. u-boot支持LCD显示(基于TQ2440)【转】

    本文转载自:http://www.cnblogs.com/pengdonglin137/p/4633877.html u-boot支持LCD显示(基于TQ2440)   阅读目录(Content) 平 ...

  9. POJ3189 Steady Cow Assignment —— 二分图多重匹配/最大流 + 二分

    题目链接:https://vjudge.net/problem/POJ-3189 Steady Cow Assignment Time Limit: 1000MS   Memory Limit: 65 ...

  10. 一步一步学Silverlight 2系列(5):实现简单的拖放功能

    述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...