###多渠道打包概念
>* 发布到不同渠道上的apk,标记不同的渠道,目的是为了统计该渠道的下载量,留存率等等数据
>* 了解下载量
>* 针对性的打广告
###渠道统计的核心
1 为apk打标记(渠道的标识)
2 运行apk的时候取出标记
3 上传标记给服务器统计
###友盟渠道统计的实现
1. 打标记:在清单文件中的meta-data结点下配置渠道
2. 运行apk的时候,友盟的api,会取出meta-data的渠道信息
3. 上传渠道标记到友盟自己的服务器,用户就可以通过友盟的后台查看具体的渠道统计了
###多渠道打包的方式
0. 一个一个分别导出
1. ant:要求比较高,需要懂得如何编写ant脚本,但是编写好之后,执行一个命令就可以
2. 友盟的打包工具
3. Gradle 多渠道打包 ,比较新,使用比较简单
4. 快速打包
###如何选择
1. 如果只是修改`渠道名`可以考虑用`umeng打包工具`或者`gradle多渠道打包`,其实绝大数公司情况属于此种情况;
2. 打包过程需要`定制化的配置`,可以考虑用ant或者gradle定制打包,可以参考`http://tech.meituan.com/mt-apk-adaptation.html`,说明的情况.
1.自定义包名
2.自定义签名
###umeng打包工具
####下载地址
`https://github.com/umeng/umeng-muti-channel-build-tool`
####步骤
看具体视频
###gradle多渠道打包
####1. 在AndroidManifest.xml中定义占位符
####2. 在module的gradle脚本中替换占位符
productFlavors {
wangdoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wangdoujia"]
}
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
anzhi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "anzhi"]
}
}
productFlavors {
Wandoujia {}
_360 {}
baidu {}
xiaomi {}
tencent {}
taobao {}
...........
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders= [UMENG_CHANNEL_VALUE:name]
}
###快速打包(1分钟打900个渠道包,不是梦)
####参考网址:
http://www.open-open.com/lib/view/open1418262988402.html
http://m.blog.csdn.net/blog/u013651247/42426227
####准备
下载python: https://www.python.org
下载别人写好的脚本: https://github.com/GavinCT/AndroidMultiChannelBuildTool
####步骤
1. 安装Python
2. `..PythonTool\info\channel.txt`,里面去添加自己想要的渠道
3. 放置apk到`MultiChannelBuildTool.py`所在目录
4. 双击`MultiChannelBuildTool.py`执行脚本,完成多渠道打包;
5. 拷贝`ChannelUtil.java`到项目中
6. 代码设置渠道`AnalyticsConfig.setChannel(ChannelUtil.getChannel(this));`
###新一代Android渠道打包工具:1000个渠道包只需要5秒
>* 参考:http://www.open-open.com/lib/view/open1453684213136.html(新一代Android渠道打包工具:1000个渠道包只需要5秒)
####步骤
1.修改项目根目录的 build.gradle
buildscript {
......
dependencies{
// add packer-ng
classpath 'com.mcxiaoke.gradle:packer-ng:1.0.4'
}
}
2.修改Android模块的 build.gradle
apply plugin: 'packer'
dependencies {
// add packer-helper
compile 'com.mcxiaoke.gradle:packer-helper:1.0.4'
}
3.Java代码中获取当前渠道(在应用程序启动的时候),在Application子类中的onCreate()方法中
public class MyApplication extends Application {
@Override
public void onCreate() {//程序的入口方法
....
// 如果没有使用PackerNg打包添加渠道,默认返回的是""
// com.mcxiaoke.packer.helper.PackerNg
final String market = PackerNg.getMarket(this);
// 或者使用 PackerNg.getMarket(Context,defaultValue)
// 之后就可以使用了,比如友盟可以这样设置
AnalyticsConfig.setChannel(market);
....
}
}
4.添加打包的签名,可以通过图形界面添加
signingConfigs {
//add
releaseConfig {
keyAlias 'itheima'
keyPassword 'itheima'
storeFile file('C:/itheima.jks')
storePassword 'itheima'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//add
signingConfig signingConfigs.releaseConfig
}
}
5.创建markets.txt放到根目录,#号后面是注释,可有可无
Google_Play#play store market
Gradle_Test#test
SomeMarket#some market
HelloWorld
6. 通过命令进行打包
gradle -Pmarket=markets.txt clean apkRelease
7.效果
![](img/tu3.png)