productFlavors ,就是用来分别定义产品不同的特性,使用它可以使用一套代码创建不同的产品。就是用于定义产品的特性,这是每个产品不同的地方,有了它我们就可以用同一套代码创建不同的产品,在module下的build.gradle中加入productFlavors结构
如下:
apply plugin: 'com.android.application'
android {
.....
//多渠道打包
productFlavors {
// 这个就是产品名,点击build Variants可以看productADebug,点击可以进行选取
productA {
//这里定义产品A的特性
}
productB {
//这里定义产品B的特性
}
//更多产品 ...
}
}
可以看到我们在Android节点下建立了一个productFlavors节点,里面包含两个产品。productA和productB就是产品名。
在android studio 左下角的Build Variants菜单中可以看到productADebug
平时,调试的时候可以在这里通过选择一个产品的Debug来进行调试。
通过为产品设置不同的application 就可以编译出不同包名的apk,
productFlavors{
productA{
applicationId "com.gavinandre.product.a"
versionName "version-a-1.0"
}
productB{
applicationId "com.gavinandre.product.b"
versionName "version-b-1.0"
}
}
这里我测试没有效果,不知道为什么?
由于国内应用市场较多,因此需要为不同市场打包相应的包,通常这种包就叫做渠道包,我们可以使用productFlavors配合mainfestPlaceHolder 属性的方法来替换渠道值。
一般用渠道的统计无非是用友盟或者其他的,以有盟为例
productFlavors{
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"] }
c360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "c360"]
}
uc {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "uc"]
}
}
或者
productFlavors {
wandoujia {}
baidu {}
c360 {}
uc {}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
然后在AndroidManifest中使用。如下:
data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" />
上面介绍了productFlavors,下面来介绍如何一次性编译打包多个渠道或者产品
可以在android Studio底部的terminal 里输入命令
./gradlew assembleDebug
assemble是和Build Variants一起结合使用的。而Build Variants= Build Type(Debug/Release)+Product Flavor(如wandoujia)
./gradlew assembleDebug
编译并生成Debug包,包含productFlavors下所有定义的产品或者渠道包
./gradlew assembleRelease
编译并生成Release包,包含productFlavors下所有定义的产品或者渠道包
./gradlew assembleWandoujia
编译并生成Release和Debug包,仅生成productFlavors下定义的wandoujia 渠道
./gradlew assembleWandoujiaRelease
编译并生成Release包,仅生成productFlavors下定义的wandoujia渠道
注:apk生成目录在rootProject/app/build/outputs/apk目录下。
在执行./gradlew assembleRelease
时生成的apk显示未签名,这是应为我们没有为其指定ke store.jks
如果不想使用命令行方式也可以使用另外两种方式来统一打包apk
Generate Signed Apk方式
点击Android Studio上方工具栏build->Generate Signed Apk
然后多选要打包的渠道包,同时可以指定apk生成目录和指定buildType(Release/Debug)
我通常使用的是图形生成,release和debug版本。。
Gradle工具方式
在Android Studio中的右边有个Gradle,点开就是相关的命令
参考:
http://blog.csdn.net/lj402159806/article/details/54947658(相当给力)
http://www.cnblogs.com/0616–ataozhijia/p/4203997.html
http://blog.csdn.net/crazyman2010/article/details/53471162
http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/