Android多渠道打包
多渠道打包概念
- 发布到不同渠道上的apk,标记不同的渠道,目的是为了统计该渠道的下载量、留存率等等数据,可以有针对性的分析数据.
渠道统计的核心
为apk打标记,也就是各种渠道的标识;
运行apk的时候取出标记;
上传标记给自己的服务器进行统计数据.
友盟渠道统计的实现
打标记:在清单文件中的meta-data结点下配置渠道;
<meta-data
android:name="UMENG_CHANNEL"
android:value="官网" />运行apk的时候,友盟的api,会取出meta-data的渠道信息;
上传渠道标记到友盟自己的服务器,用户就可以通过友盟的后台查看具体的渠道统计了.
多渠道打包的方式
- 一个一个分别导出;
- ant:要求比较高,需要懂得如何编写ant脚本,但是编写好之后,执行一个命令就可以;
- 友盟的打包工具;
- Gradle 多渠道打包;
- 美团技术团队的多渠道打包,使用比较简单;
- 新一代Android渠道打包工具.
如何选择
- 如果只是修改
渠道名
可以考虑用umeng打包工具
或者gradle多渠道打包
,其实绝大数公司情况属于此种情况; 打包过程需要
定制化的配置
,可以考虑用ant或者gradle定制打包,可以参考http://tech.meituan.com/mt-apk-adaptation.html
,说明的情况.a.自定义包名
b.自定义签名
第一种:umeng打包工具下载地址
https://github.com/umeng/umeng-muti-channel-build-tool
第二种:gradle多渠道打包
1. 在AndroidManifest.xml中定义占位符
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}"/>
2. 在module的gradle脚本中替换占位符
productFlavors {
wangdoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wangdoujia"]
}
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
anzhi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "anzhi"]
}
}
第三种:快速打包(1分钟打900个渠道包,不是梦)
参考网址:
http://www.open-open.com/lib/view/open1418262988402.html
http://tech.meituan.com/mt-apk-packaging.html 美团自动化之旅
准备
下载python: https://www.python.org
下载别人写好的脚本: https://github.com/GavinCT/AndroidMultiChannelBuildTool
步骤
- 安装Python
..PythonTool\info\channel.txt
,里面去添加自己想要的渠道- 放置apk到
MultiChannelBuildTool.py
所在目录 - 双击
MultiChannelBuildTool.py
执行脚本,完成多渠道打包; - 拷贝
ChannelUtil.java
到项目中 - 代码设置渠道
AnalyticsConfig.setChannel(ChannelUtil.getChannel(this));
第四种:新一代Android渠道打包工具:1000个渠道包只需要5秒
步骤
1.修改项目【根目录】的 build.gradle
buildscript {
......
dependencies{
// add packer-ng
classpath 'com.mcxiaoke.gradle:packer-ng:1.0.4'
}
}
2.修改【app下】的 build.gradle,有以下两行代码需要添加
apply plugin: 'packer'
dependencies {
// add packer-helper
compile 'com.mcxiaoke.gradle:packer-helper:1.0.4'
}
注意: packer-ng 和 packer-helper 的版本号需要保持一致
3.Java代码中获取当前渠道,建议是在应用程序启动的时候,在自定义的Application类中的onCreate()方法中去获取当前渠道,例如下面
public class XiaoKeApplication 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
config {
keyAlias 'xiaoke'
keyPassword 'xiaoke'
storeFile file('C:/xiaoke.jks')
storePassword 'xiaoke'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//add
signingConfig signingConfigs.config
}
}
5.创建markets.txt放到【根目录】
Google_Play#play store market
Gradle_Test#test
SomeMarket#some market
HelloWorld
6.通过命令进行打包
gradle -Pmarket=markets.txt clean apkRelease
7.致辞,完成多渠道打包的概念。打包完成后你可以在 ${项目根目录}/build/archives/ 目录找到最终的渠道包。