是否可以使用
gradlew
或其他命令行工具列出所有构建变体?
例如以下
build.gradle
:
buildTypes {
debug {}
release {}
}
productFlavors {
dev {}
prod {}
}
该命令将返回类似以下内容:
devDebug
devRelease
prodDebug
prodRelease
一个选择是在我的
build.gradle
中创建一个 gradle 任务,然后我将使用 gradlew
执行该任务。但我正在寻找一种适用于任何项目的通用解决方案,无需添加任何内容。
据我所知,没有一个任务可以输出所有变体。创建这样的任务并不是很难,但我认为这里可能有更好的解决方案适合您的用例。
所以你有几个选择。首先,gradle 任务的设置方式使得您的示例将具有以下任务:
assemble
assembleDev
assembleProd
assembleDebug
assembleRelease
assembleDevDebug
assembleDevRelease
assembleProdDebug
assembleProdRelease
如果您的目标是构建所有变体,那么您只需运行
:app:assemble
,所有的productFlavor和buildType变体都将被构建。如果您只想发布版本,但是每种风格,那么您可以执行 :app:assembleRelease
,这将自动运行
assembleDevRelease
assembleProdRelease
许多其他任务也遵循相同的模式。但不一定是全部。正如 Stephan 在 https://stackoverflow.com/a/69254774/2923245 中提到的那样,运行
:app:tasks
可以是查看您有哪些可用任务的良好开端。
如果您确实需要一个输出每个变体名称的任务(或者您想在代码中访问这些名称),那么您可以执行以下操作:
task("printVariants") {
doFirst {
println project.getExtensions().getByType(com.android.build.gradle.AppExtension.class).applicationVariants*.name
}
}
或者,如果您想对每个变体执行某些操作,则可以执行以下操作:
AppExtension android = project.getExtensions().getByType(AppExtension.class)
android.applicationVariants.each { appVariant ->
// Variant-specific code goes here.
// Example below: Creating a task for each variant.
project.tasks.create("${appVariant.name}MyVariantSpecificTask", ...)
}
记住 build.gradle 只是代码会有所帮助。你可以在这里编写任何代码 - 只要你熟悉 Groovy 和 gradle + android gradle 插件 (AGP) api。
Gradle 已经为此提供了一个任务,称为
tasks
./gradlew tasks
现在,2024 年,我使用 Android Gradle Plugin 8.3.1 和 AndroidComponentsExtension(在 7.0.0 中添加)来列出所有变体。
我在我的
app/build.gradle.kts
文件中执行此操作:
android {
// android configuration code here
androidComponents {
onVariants {
println("Variant: ${it.name}, buildType: ${it.buildType}, flavor: ${it.flavorName}")
}
}
}
然后,只需运行:
./gradlew :app:help
。并得到下一个输出:
> Configure project :app
Variant: googleDebug, buildType: debug, flavor: google
Variant: huaweiDebug, buildType: debug, flavor: huawei
Variant: googleRelease, buildType: release, flavor: google
Variant: huaweiRelease, buildType: release, flavor: huawei
Variant: googleQa, buildType: qa, flavor: google
Variant: huaweiQa, buildType: qa, flavor: huawei