项目中使用了很多多渠道打包,使用原始productFlavors打包编译很慢,有时候还会不够内存,导致打包不完整.后来发现用了瓦力+,美团多渠道打包很好用,打包速度也快.下面分享给大家,希望大家可以少走弯路.
1.在项目的build.gradle的dependencies中添加瓦力插件
dependencies {
//瓦力
classpath 'com.meituan.android.walle:plugin:1.1.6'
}
2.在APP的build.gradle的添加瓦力插件
apply plugin: 'walle'//瓦力
3.创建channel文本、config.json文本、channel_debug文本(channel或者config.json必须写一种)放入到app目录下
3.1创建一个文本channel填写你需要统计的应用名称
后台
华为
小米
vivo
oppo
金立
魅族
百度手机助手
腾讯应用宝
阿里应用
3.2创建一个文本config.json填写你需要统计的应用名称
{
//extraInfo 不要出现以`channel`为key的情况
/*
不声明extraInfo的channel默认使用的extraInfo
如果没有此项则没有默认extraInfo
*/
"defaultExtraInfo": {
"key2": "20161213",
"key": "20161212"
},
/*
strategy:
1. ifNone (默认适用此策略) : 仅当对应channel没有extraInfo时生效
2. always : 所有channel都生效,channel中extraInfo的key与defaultExtraInfo重复时,覆盖defaultExtraInfo中的内容。
*/
//"defaultExtraInfoStrategy": "always",
"channelInfoList": [
{
"channel": "meituan",
// 此channel将使用自己声明的extraInfo
/*
此alias可以做到写入apk的channel是meituan,而打包时输出的文件名是美团
注意:alias不声明时,walle配置apkFileNameFormat中channel就是channel,否则为alias
*/
"alias": "美团",
"extraInfo": {
"buildtime": "20161212",
"hash": "123"
}
},
{
"channel": "360cn",
// 此channel将使用自己声明的extraInfo
"extraInfo": {
"key": "20161213"
}
},
{
"channel": "googleplay"
// 此channel将使用defaultExtraInfo
},
{
"channel": "xiaomi"
// 此channel将使用defaultExtraInfo
},
{
"channel": "meizu"
// 此channel将使用defaultExtraInfo
},
{
"channel": "wandoujia",
"excludeDefaultExtraInfo": true
//强制声明不使用defaultExtraInfo,默认false
},
{
"channel": "myapp",
"excludeDefaultExtraInfo": true,
//强制声明不使用defaultExtraInfo,默认false
"extraInfo": {
// 尽管exclude default,但也可以继续写入自己的。
"key": "20161212"
}
}
]
}
3.3创建一个文本channel_debug填写你需要debug版本的应用名称
meituan # 美团
samsungapps #三星
4.在APP的build.gradle的设置多渠道打包的目录和输出目录
//多渠道打包
walle {
apkOutputFolder = new File("${project.buildDir}/outputs/channels")
apkFileNameFormat = '${channel}-${buildType}-${versionName}-${versionCode}-${buildTime}.apk'
//configFile与channelFile两者必须存在一个,否则无法生成渠道包。两者都存在时优先执行configFile
channelFile = new File("${project.getProjectDir()}/channel")
//configFile = new File("${project.getProjectDir()}/config.json")
}
// 根据不同的applicationId来配置不同的channelFile/configFile
afterEvaluate {
project.android.applicationVariants.all { BaseVariant variant ->
variant.assemble.doFirst {
if (variant.applicationId.endsWith(".debug")) {
project.walle.channelFile = new File("${project.getProjectDir()}/channel_debug")
}
}
}
}
输出目录:
在AndroidManifest.xml设置百度统计和友盟统计
<!-- ================================百度统计开始========================================== -->
<!-- 您从百度网站获取的APP KEY -->
<meta-data
android:name="BaiduMobAd_STAT_ID"
android:value="自己去百度统计官网注册获取"/>
<!-- 渠道商编号 -->
<meta-data
android:name="BaiduMobAd_CHANNEL"
android:value="itop"/>
<!-- android:value="${BAIDU_CHANNEL_VALUE}"/> -->
<!-- 是否开启错误日志统计,默认为false -->
<meta-data
android:name="BaiduMobAd_EXCEPTION_LOG"
android:value="true"/>
<!-- 日志发送策略,可选值:APP_START、ONCE_A_DAY、SET_TIME_INTERVAL,默认为APP_START -->
<meta-data
android:name="BaiduMobAd_SEND_STRATEGY"
android:value="APP_START"/>
<!-- 日志发送策略 为SET_TIME_INTERVAL时,需设定时间间隔(取消下行注释)。取值为1-24的整数,默认为1 -->
<!-- <meta-data android:name="BaiduMobAd_TIME_INTERVAL" android:value="2" /> -->
<!-- 日志仅在wifi网络下发送,默认为false -->
<meta-data
android:name="BaiduMobAd_ONLY_WIFI"
android:value="false"/>
<!-- 是否获取基站位置信息 ,默认为true -->
<meta-data
android:name="BaiduMobAd_CELL_LOCATION"
android:value="true"/>
<!-- 是否获取GPS位置信息,默认为true -->
<meta-data
android:name="BaiduMobAd_GPS_LOCATION"
android:value="true"/>
<!-- 是否获取WIFI位置信息,默认为true -->
<meta-data
android:name="BaiduMobAd_WIFI_LOCATION"
android:value="true"/>
<!-- ================================百度统计结束========================================== -->
<!-- ================================友盟统计开始========================================== -->
<meta-data
android:name="UMENG_APPKEY"
android:value="自己去友盟官网注册获取"/>
<meta-data
android:name="UMENG_CHANNEL"
android:value="myAPP"/> <!-- 自己默认写一个 -->
<!-- ================================友盟统计结束========================================== -->
权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
在Application中初始化
/**
* 设置walle当前渠道
*/
private void initWalle() {
String channel = WalleChannelReader.getChannel(this);//获取美团walle当前渠道
StatService.setAppChannel(this, channel, true);//设置百度统计当前渠道
UMConfigure.init(this, null, channel, UMConfigure.DEVICE_TYPE_PHONE, null);//设置友盟统计当前渠道
}