【Gradle 学习】(七)Android 产品风格 productFlavors 变种版本
productFlavors 产品风格
Android Gradle 提供了productFlavors,让我们可以对生成的 APK 包进行定制。这个 DSL 最常用于多渠道打包。
它支持与 defaultConfig 相同的属性,这是因为,defaultConfig 实际上属于 ProductFlavor。
创建 prodectFlavor
自定义一个 productFlavor 也是和 buildType 一样:名称{}
android {
productFlavors {
dev{
}
google{
}
baidu{
}
}
}
这样当我们运行 assembleRelease 的时候就会生成 3 个 release 包,分别是 dev、google 以及 baidu。目前看这三个包除了文件名没有什么不一样,此时还没有定制,使用的都是 defaultConfig 配置。这里的 flavor 和 defaultConfig 是一样的,可以自定义其 applicationId、versionCode 以及 versionName等信息,比如区分不同包名:
android {
defaultConfig{
……
// Specifies a flavor dimension.
flavorDimensions "channel"
}
productFlavors {
dev{
applicationId "cn.tina.demo.dev"
}
google{
applicationId "cn.tina.demo.google"
}
}
}
同 buildTypes,productFlavors 也有自己代码和资源文件夹,路径为 src/<flavorName buildTypeName>/
注意:flavor 的命名不能与已存在的 Build Type 或者与 androidTest、test sourceSet 有冲突。
flavorDimensions
flavorDimensions(风格维度),所有风格都必须指定一个风格维度,即一个产品风格组。必须将所有风格分配给某个维度;否则,您将收到如下所示的构建错误。如果给定的模块仅指定一个变种维度,则 Android Gradle 插件会自动将该模块的所有变种分配给该维度。
Error:All flavors must now belong to a named flavor dimension.
The flavor 'flavor_name' is not assigned to a flavor dimension.
变种版本
每一个 Build Type 都会生成新的 APK。Product Flavors 同样也会做这些事情:项目的输出将会组合所有的 Build Types 和 Product Flavors(如果有定义 Flavor)。
每一种组合(包含 Build Type 和 Product Flavor)就是一个 Build Variant(构建变种版本)。
例如,在之前的 Flavor 声明例子中与默认的 debug 和 release 两个 Build Types 将会生成 4 个 Build Variants:{dev, google}{debug, release}
- dev - debug
- dev - release
- google - debug
- google - release
项目中如果没有定义 flavor 同样也会有 Build Variants,只是使用的是 default 的 flavor/config,因为是无名称的,所以生成的 build variant 列表看起来就跟 Build Type 列表一样。
多定制的变种版本
扩展:flavorDimesions 可以设置多个,如
android {
defaultConfig{
……
// Specifies a flavor dimension.
flavorDimensions "channel","production"
}
productFlavors {
dev{
dimension "channel"
applicationId "cn.tina.demo.dev"
}
google{
dimension "channel"
applicationId "cn.tina.demo.google"
}
productA{
dimension "production"
}
productB{
dimension "production"
}
}
}
那么可以组合出4种(2*2)种产品,分别有 debug 和 release,一共是8个变种版本
构建和任务
我们前面提到每一个 Build Type 会创建自己的 assemble<name> task
,但是 Build Variants 是 Build Type 和 Product Flavor 的组合。 当使用 Product Flavor 的时候,将会创建更多的 assemble-type task。分别是:
assemble<Variant Name>
允许直接构建一个 variant 版本,例如assembleDevDebug
。assemble<Build Type Name>
允许构建指定 Build Type 的所有 APK,例如assembleDebug
将会构建DevDebug
和GoogleDebug
两个 variant 版本。assemble<Product Flavor Name>
允许构建指定 flavor 的所有 APK,例如assembleDev
将会构建DevDebug
和DevRelease
两个 variant 版本。 另外 assemble task 会构建所有的 variant 版本。
代码及资源集合优先级
不论是构建类型还是产品风格都可以创建对应的代合和资源文件。这里有个优先级问题,可以看出 通过 flavor BuildType 存在很多组合,不同源集包统一文件的不同版本,Gradle 将按一下顺序决定使用哪一个文件
构建版本(Debug/Release)> 产品风格(google/dev)> 产品变种(googleDebug等)> 主源集(main)
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanejig
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
excel打印预览压线压字怎么办
PHP中文网 06-22