[TOC]
多渠道是指在不同的渠道、商店发布 App 版本,每个版本可以有相同或者不同的配置(如不同的 icon 或者应用名),但是渠道号也就是 Channel 不同
在 app 的 build.gradle
中配置 13 个主流渠道:
android {
flavorDimensions "default"
productFlavors {
//这里其实是可以用中文名的
XiaoMi {}
BaiduZhuShou {}
AnZhi {}
MeiZu {}
Smartisan {}
WanDouJia {}
YingYongBao {}
"360" {}
HuaWei {}
CoolApk {}
GooglePlay {}
VIVO {}
OPPO {}
}
//所有渠道的 CHANNEL_VALUE 设为渠道名
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
}
}
productFlavors
表示不同的渠道,每个渠道的括号内可以分别设置不同的属性,例如不同的包名:
XiaoMi {
//最低只支持19的版本
minSdkVersion 19
//默认包名后面加上 .xiaomi 后缀
applicationIdSuffix ".xiaomi"
}
defaultConfig {
applicationId "nutstore.android.cad"
buildConfigField("int", "CODE", "123")
buildConfigField("Boolean", "IS_DEFAULT", "true")
buildConfigField("String", "URL", "\"https://www.jianguoyun.com/\"")
}
注意当该属性为 String 时,值需要加上 " 转义。配置完最好去该包名下的 BuildConfig 文件中确认。配置好就可以在代码中调用BuildConfig.XXX
(就像 VERSION_NAME 一样)以使用。defaultConfig
中是默认配置,如果需要针对不同渠道进行不同的参数配置,可以这样:
XiaoMi {
buildConfigField("Boolean", "IS_DEFAULT", "false")
}
BuildConfig.FLAVOR
是 productFlavor 也就是渠道的值。
build.gradle 中的manifestPlaceholders
为在 Manifest 文件中使用的占位符。以友盟统计为例,需要在 Manifest 加上:
<meta-data android:name="UMENG_APPKEY" android:value="597f00b9717c1929f3xxxxxx"/>
<meta-data android:name="UMENG_CHANNEL" android:value="${CHANNEL_VALUE}"/>
其中,UMENG_CHANNEL 的 value 使用的就是在 build.gradle 中定义的占位符的值${CHANNEL_VALUE}
。也就是说这个值就是当前 apk 的productFlavor
的名字(如 Xiaomi )
AS 中,默认的源文件在main/
下,要针对不同的渠道采用不同的资源文件甚至不同代码,需要创建相应的文件夹。点击 AS 右侧的Gradle
按钮,找到 app 模块,找到Tasks--Android--sourceSets
并双击执行该 Task,AS 便会打印出针对不同渠道你需要创建的文件夹。例如:
XiaoMi
------
Java sources: [app/src/XiaoMi/java]
Manifest file: app/src/XiaoMi/AndroidManifest.xml
Android resources: [app/src/XiaoMi/res]
Assets: [app/src/XiaoMi/assets]
JNI libraries: [app/src/XiaoMi/jniLibs]
AS 中,点击 Build--Generate Signed Apk,选择正确的Keystore
文件并输入密码和别名,点击下一步,选择相应的渠道(使用 Shift 进行多选),生成 APK。
如果集成了统计 SDK,在安装该渠道的 apk 后,后台应该有该渠道的数据。有数据则证明:SDK 集成正确,该 APK 的渠道是正确的。