urlname
type
Post
password
SyncToConfluence
SyncToConfluence
category
Android
date
Oct 17, 2024
slug
3f763aed-1fb9-4b1a-ab63-939c0488ca54
icon
Button
catalog
学习
summary
tags
Android
Gradle
cover
Status
Done
BusyTime
Status 1
status
Published
简述 Build Variants 的重要性与灵活性,提升开发效率和应用版本管理的灵活性。
📝 什么是Build Variant
在android里,使用Build Variants来定义具体的应用版本,具体的,可以在Android Studio中,找到当前项目的所有的Build Variants列表(相信作为Android开发,一定很熟悉)
每个 Build Variant 都可以拥有自己独立的资源、代码和依赖管理,方便对应用进行多版本管理。
例如,免费版可以显示广告,而付费版则没有广告功能;
debug 版本可以带有调试信息和开发工具,而 release 版本会进行代码混淆和优化。
🤣 Build Variant的组成
Build Variant 的组成主要受三部分控制:
- Build Type
- Product Flavor
- Dimension
Build Type
- 决定应用的构建方式和发布方式。如:debug、release
- 在Android项目创建好之后,默认就提供了两个build type:
- debug(默认支持,可以不用在build.gradle中显示定义)
- release
Product Flavor
- 可以定义为应用于不同市场、客户或功能需求的应用版本。
- 每个 Product Flavor 可以配置不同的包名、版本号、资源等。
- 这里以不同的区域area版本(如
us和eu)和不同的特性版本feature(如free和paid)为例:
- 此时我们的build variants列表如下,可以看到不同的地区、特性,并没有进行组合,而是分别和build type进行组合而已,而我们要的是每个地区都能和对应的特性进行组合。这时候就需要用到Dimension的概念进行分组了。

Dimension
- 可以对 Product Flavors 进行分组,以便实现多维度组合。
- 默认情况下,所有的 Product Flavors 都属于一个隐式维度。
- 每个维度中的 Product Flavor 都可以互相组合,从而形成多个 Build Variant
- 在上面的例子中,定义了区域area(
us和eu)和特性版本feature(free和paid)四个flavor,但是并不能达到我们预期,因为我们希望每个地区,都可以有对应的特性版本(free和paid),而不是将地区和特性版本放在同级,所以,这里可以用Dimension的特性,对其进行分组组合:
- 此时我们的build variants列表如下,可以看到,不同的地区已经和不同的特性进行了组合,此时的build variant可以组成:
area-feature-buildType

注意事项
- 每个 Product Flavor 必须被明确分配到一个维度,否则会导致构建错误。
- 增加维度会增加组合的复杂度,因此在设计维度时需要平衡管理和维护的难度。
- 最终build variants的数量计算方法:
dimensions * flavors * type
😥 高级知识点
过滤build variant
在大型项目中,随着 Product Flavor 和 Build Type 的组合数量增加,可能会生成很多不必要的 Build Variant。为了解决这个问题,Android 构建系统允许开发者通过 过滤变体 来减小构建复杂度。
使用
variantFilter 过滤变体:在 build.gradle.kts 中可以使用 variantFilter 来指定哪些变体应该被忽略。例如,某些测试环境下的付费版本可能不需要构建:通过这种方式,可以显著减少构建的变体数量,从而提升构建速度。
优先级
在 Android 项目中,不同的 Build Variant 会引用不同的源代码和资源文件。系统会根据 Product Flavor 和 Build Type 来确定资源和代码的优先级。合并的优先级规则如下:
- Variant-specific 文件优先:每个 Build Variant 都可以有自己独立的源代码或资源目录。这些目录下的文件优先级最高,会覆盖其他目录中的同名文件。
- Build Type 文件优先:例如
debug版本的资源文件会覆盖公共资源目录中的文件。
- Product Flavor 文件次优先:例如,
free版本的资源会覆盖主资源目录中的文件。
- 主源集:主目录(通常为
main/)中的资源和代码被所有变体共享,优先级最低。
🤗 总结归纳
- Build Variant 是 Android 项目中灵活的机制,帮助开发者管理多版本应用以满足不同业务需求。
- 通过合理配置 Build Type、Product Flavor 和 Flavor Dimensions,可以实现高效的应用版本开发与发布。
- 增加维度会增加组合的复杂度,因此在设计维度时需要平衡管理和维护的难度。
📎 参考文章
- Author:CoderWdd
- URL:https://www.wuinsights.top//article/3f763aed-1fb9-4b1a-ab63-939c0488ca54
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts
