参考文章: Android Studio系列教程六--Gradle多渠道打包
参考文章: Gradle实现的两种简单的多渠道打包方法
一、以友盟为例,如何在gradle 如何实现多渠道打包?步骤有三,如下:
1、在AndroidManifest.xml 清单配置文件里
- <meta-data
- android:name="UMENG_CHANNEL"
- android:value="${UMENG_CHANNEL_NAME}" />
2、在build.gradle配置
方式一:
android {
productFlavors {
xiaomi {}
_360 {}
baidu {}
wandoujia {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
方式二:
android {
productFlavors {
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
_360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]
}
baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
}
}
步骤三:
进入工程根目录,输入命令行,gradlew assembleRelease
完毕!
二、拓展说明:
1)assemble 这个命令,会结合 Build Type 创建自己的task,如:
-
./gradlew assembleDebug
-
./gradlew assembleRelease
除此之外 assemble 还能和 Product Flavor 结合创建新的任务,其实 assemble 是和 Build Variants 一起结合使用的,而 Build Variants = Build Type + Product Flavor , 举个例子大家就明白了:
如果我们想打包wandoujia渠道的release版本,执行如下命令就好了:
- ./gradlew assembleWandoujiaRelease
如果我们只打wandoujia渠道版本,则:
- ./gradlew assembleWandoujia
此命令会生成wandoujia渠道的Release和Debug版本
同理我想打全部Release版本:
- ./gradlew assembleRelease
这条命令会把Product Flavor下的所有渠道的Release版本都打出来。
总之,assemble 命令创建task有如下用法:
-
**assemble**: 允许直接构建一个Variant版本,例如assembleFlavor1Debug。
-
**assemble**: 允许构建指定Build Type的所有APK,例如assembleDebug将会构建Flavor1Debug和Flavor2Debug两个Variant版本。
-
**assemble**: 允许构建指定flavor的所有APK,例如assembleFlavor1将会构建Flavor1Debug和Flavor1Release两个Variant版本。
2)
使用manifestPlaceholders的这种配置,同样适用于manifest的其他配置。比如你需要在不同渠道发布的apk里面,指定不同的启动Activity。比如在豌豆荚里面发布的,启动的Activity显示的是豌豆荚首发的界面,应用宝里面启动的是应用宝首发的界面,你就可以对你的activity的值使用${activity_name}的方式,然后在productFlavors里面配置这个${activity_name}的值。