mic*_*ckp 6 android gradle build.gradle android-gradle-plugin
是否可以使用gradlew其他命令行工具列出所有构建变体?
例如以下内容build.gradle:
buildTypes {
debug {}
release {}
}
productFlavors {
dev {}
prod {}
}
Run Code Online (Sandbox Code Playgroud)
该命令将返回类似以下内容:
devDebug
devRelease
prodDebug
prodRelease
Run Code Online (Sandbox Code Playgroud)
一种选择是在 my 中创建一个 gradle 任务build.gradle,然后我将使用gradlew. 但我正在寻找一种适用于任何项目的通用解决方案,而无需添加任何内容。
小智 7
据我所知,没有一个任务可以输出所有变体。创建这样的任务并不是非常困难,但我认为这里可能有更好的解决方案适合您的用例。
所以你在这里有几个选择。首先,gradle 任务的设置方式使得您的示例将具有以下任务:
assemble
assembleDev
assembleProd
assembleDebug
assembleRelease
assembleDevDebug
assembleDevRelease
assembleProdDebug
assembleProdRelease
Run Code Online (Sandbox Code Playgroud)
如果您的目标是构建所有变体,那么您可以简单地运行:app:assemble,并且将构建所有 ProductFlavor 和 buildType 变体。如果您只想发布版本,但是每种风格,那么您可以:app:assembleRelease这样做,并且会自动运行
assembleDevRelease
assembleProdRelease
Run Code Online (Sandbox Code Playgroud)
许多其他任务也遵循相同的模式。但不一定是全部。正如 Stephan 在/sf/answers/4847834211/中提到的那样,跑步:app:tasks可以是查看您有哪些任务可用的良好开始。
如果您确实需要一个输出每个变体名称的任务(或者您想在代码中访问这些名称),那么您可以执行以下操作:
task("printVariants") {
doFirst {
println project.getExtensions().getByType(com.android.build.gradle.AppExtension.class).applicationVariants*.name
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您想对每个变体执行某些操作,则可以执行以下操作:
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", ...)
}
Run Code Online (Sandbox Code Playgroud)
记住 build.gradle 只是代码会有所帮助。你可以在这里编写任何代码 - 只要你熟悉 Groovy 和 gradle + android gradle 插件 (AGP) api。
| 归档时间: |
|
| 查看次数: |
2344 次 |
| 最近记录: |