赞
踩
author:Tzy
productFlavors
中的flavor
和defaultConfig
是同种类型,defaultConfig
相当于一个默认的flavor
.所有flavor
都会继承defaultConfig
中的配置,而flavor
中的配置会覆盖它的任何值.
android { ... signingConfigs { release { ... } flavor3 { ... } } defaultConfig { applicationId "com.example.default" minSdkVersion 8 targetSdkVersion 8 versionCode 1 versionName "1.0" } //渠道规格,必须配置 flavorDimensions "dimension1","dimension2" //产品渠道信息配置 productFlavors { //同defaultConfig flavor1 { dimension "dimension1" } //不同包名 flavor2 { dimension "dimension2" applicationId "com.example.flavor2" } //不同签名 flavor3 { dimension "dimension2" signingConfig signingConfigs.flavor3 } } buildTypes { release { ... //不同签名也可以在此配置 productFlavors.flavor3.signingConfig signingConfigs.flavor3 } }
产品渠道可以通过配置不同的资源集来替换默认资源文件,Gradle在构建应用时,会优先使用flavor所属sourceSet中的同名资源,此特性可实现不同应用名称和图标等需求.
在src
目录下创建以渠道名称命名的文件夹,然后创建资源文件(路径要与main
中的一致)然后打包的时候 gradle 就会自己替换或者合并资源.
默认的字符串资源文件路径为src/main/res/values/strings.xml
:
<resources>
<string name="app_name">defaultName</string>
</resources>
则flavor1
渠道字符串资源文件路径为src/flavor1/res/values/strings.xml
:
<resources>
<string name="app_name">flavor1Name</string>
</resources>
对应的渠道包的应用名称就会被替换,替换图标/颜色等同理.
<meta-data android:name="InstallChannel" android:value="${InstallChannel}" />
android{
...
productFlavors {
flavor1 {
manifestPlaceholders = [InstallChannel: "flavor1"]
}
flavor2 {
manifestPlaceholders = [InstallChannel: "flavor2"]
}
flavor3 {
manifestPlaceholders = [InstallChannel: "flavor3"]
}
}
}
android{
...
productFlavors {
flavor1 {}
flavor2 {}
flavor3 {}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [InstallChannel: name]
}
}
private String getChannel(Context context) {
try {
PackageManager pm = context.getPackageManager();
ApplicationInfo appInfo = pm.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
return appInfo.metaData.getString("InstallChannel");
} catch (PackageManager.NameNotFoundException ignored) {
}
return "";
}
参考渠道资源配置
使用Android Gradle Build Tasks构建渠道包
参考Android 多渠道打包方式详解和Android多渠道打包
所有框架都是针对于单一flavor配置快速打出多个channel包,故不能实现不同包名,不同资源等需求.
多渠道打包工具对比 | VasDolly | packer-ng-plugin | Walle |
---|---|---|---|
V1签名方案 | 支持 | 支持 | 不支持 |
V2签名方案 | 支持 | 支持 | 支持 |
已有注释块的APK | 支持 | 不支持 | 不支持 |
根据已有APK生成渠道包 | 支持 | 不支持 | 不支持 |
命令行工具 | 支持 | 支持 | 支持 |
强校验 | 支持 | 不支持 | 支持 |
多线程加速打包 | 支持 | 不支持 | 不支持 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。