build.gradle
android{
...
flavorDimensions 'region', 'market'
productFlavors {
googleplay {
dimension 'region'
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "googleplayMarket"]
ndk {
//谷歌渠道只需要提供armeabi-v7a和arm64-v8a
abiFilters = ['armeabi-v7a', 'arm64-v8a']
}
}
mainland {
dimension 'region'
ndk {
//国内渠道只需要提供armeabi-v7a(节省包的大小)
abiFilters = ['armeabi-v7a']
}
}
market {
dimension 'market'
resValue "string", "APPSFLYER_TRACKING_STORE_CHANNEL", "Tesing"
}
xiaomi {
dimension 'market'
resValue "string", "APPSFLYER_TRACKING_STORE_CHANNEL", "Xiaomi"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
xiaomiPreinstall{
dimension 'market'
resValue "string", "APPSFLYER_TRACKING_STORE_CHANNEL", "Xiaomi_Preinstall"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi_preinstall"]
}
huaweipromo {
dimension 'market'
resValue "string", "APPSFLYER_TRACKING_STORE_CHANNEL", "HuaWei-Promo"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "huawei-promo"]
}
huawei {
dimension 'market'
resValue "string", "APPSFLYER_TRACKING_STORE_CHANNEL", "Huawei"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "huawei"]
}
yingyongbao {
dimension 'market'
resValue "string", "APPSFLYER_TRACKING_STORE_CHANNEL", "Myapp"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"]
}
samsung {
dimension 'market'
resValue "string", "APPSFLYER_TRACKING_STORE_CHANNEL", "Samsung"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "samsung"]
}
oppo {
dimension 'market'
resValue "string", "APPSFLYER_TRACKING_STORE_CHANNEL", "Oppo"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "oppo"]
}
vivo {
dimension 'market'
resValue "string", "APPSFLYER_TRACKING_STORE_CHANNEL", "Vivo"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "vivo"]
}
meizu{
dimension 'market'
resValue "string", "APPSFLYER_TRACKING_STORE_CHANNEL", "Meizu"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "meizu"]
}
qihu360{
dimension 'market'
resValue "string", "APPSFLYER_TRACKING_STORE_CHANNEL", "qihu360"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qihu360"]
}
qihu360promotion{
dimension 'market'
resValue "string", "APPSFLYER_TRACKING_STORE_CHANNEL", "qihu360promotion"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qihu360promotion"]
}
baidu{
dimension 'market'
resValue "string", "APPSFLYER_TRACKING_STORE_CHANNEL", "baidu"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}
wandoujia{
dimension 'market'
resValue "string", "APPSFLYER_TRACKING_STORE_CHANNEL", "wandoujia"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
sogou{
dimension 'market'
resValue "string", "APPSFLYER_TRACKING_STORE_CHANNEL", "sogou"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "sogou"]
}
smartisan{
dimension 'market'
resValue "string", "APPSFLYER_TRACKING_STORE_CHANNEL", "smartisan"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "smartisan"]
}
mainlandpromotion {
dimension 'market'
resValue "string", "APPSFLYER_TRACKING_STORE_CHANNEL", "MainlandPromotion"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "mainlandpromotion"]
}
}
}
其中 ndk 指定该渠道包的 ABI 配置,会覆盖默认配置,其他渠道包如果不特殊声明则采用默认配置:
defaultConfig {
...
ndk {
// Specifies the ABI configurations of your native
// libraries Gradle should build and package with your APK.
abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a'
}
}
manifestPlaceholders 可以在打包时替换 androidManifest.xml 中对应的变量,resValue 同理,上面主要是友盟相关配置的信息:
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
<meta-data
android:name="CHANNEL"
android:value="@string/APPSFLYER_TRACKING_STORE_CHANNEL" />
指定生成 apk 的名称格式:
android.applicationVariants.all { variant ->
variant.outputs.all { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 输出文件名: myApk-v1.0-1-api5.2-t2018.01.01-11:12:13release.apk
outputFileName = "myApk" + "-v" + defaultConfig.versionName + "-" + defaultConfig.versionCode + "-api" + "${rootProject.ext.buildConfig.apiVersion}" + "-t" + "${rootProject.ext.buildConfig.buildTime}".replace(" ", "-").replace(":", "-") + "-" + output.baseName + ".apk"
}
}
}