您多久考虑一次在 Android Studio 中首次打开项目的体验?如果您在一个小团队中,可能不会太频繁。如果您关注大型 Android 工程团队的开发人员体验,您可能会这样做!
构建变体可以帮助您定义应用程序的不同版本,例如针对不同的环境(生产与暂存)、受众(免费与付费)或不同的设备变体。我经常看到的一个常见用例是将捆绑的资源限制为给定的语言和屏幕密度,以加快编译时间。
上述产品风格变体可以创建相当长且复杂的构建变体列表以供在 Android Studio 中选择:
正如您所注意到的,此列表只是按字母升序排序- 因此对于刚开始您的项目的人来说,第一个可能不是最佳配置。如果您想鼓励使用staging
overproduction
或默认情况下的 over,external
请dev
继续阅读。
如何分配不同的默认值?
值得庆幸的是,自 7.1.0 以来,Android Gradle 插件为此提供了一个 DSL,这是他们的gradle-api
工件的一部分:
interface ApplicationProductFlavor : ApplicationBaseFlavor, ProductFlavor {
/** Whether this product flavor should be selected in Studio by default */
var isDefault: Boolean
}
来源:cs.android.com/android-studio/platform/tool..
您所要做的就是分配isDefault = true
给每个维度以告诉 Studio 您的偏好顺序,因为它会创建最终的构建变体。不需要新的依赖!
让我们以下面的示例配置为例:
android {
flavorDimensions.addAll(listOf("audience", "api"))
productFlavors {
create("production") {
dimension = "api"
buildConfigField("string", "ROOT_URL", "https://acme-v02.api.letsencrypt.org")
}
create("staging") {
dimension = "api"
isDefault = true
buildConfigField("string", "ROOT_URL", "https://acme-staging-v02.api.letsencrypt.org")
}
create("dev") {
isDefault = true
dimension = "audience"
applicationIdSuffix = ".internal"
buildConfigField("boolean", "EXTERNAL", "false")
resourceConfigurations.addAll(listOf("en", "xxhdpi"))
}
create("external") {
dimension = "audience"
buildConfigField("boolean", "EXTERNAL", "true")
}
}
}
上述场景将确保 out of the api
dimensionstaging
将优先于production
,而 out of the audience
dimensiondev
将优先于external
。
下次当工程师克隆您的存储库或使应用程序模块的模块文件无效时,将导致devStagingDebug
预先选择以避免任何混淆。
我该如何测试这个?
如果您检查应用程序生成的模块文件(例如.idea/modules/app/project-name.app.iml),您会发现这是 AGP 注入相关信息以告诉 Studio 在 UI 中更喜欢哪个模块文件的地方。
如果您清除正确的部分,您应该准备好让 Studio 再次同步,您将看到结果。
网友评论