android - 如何使用 gradlew 列出所有构建变体?
问题描述
是否可以使用gradlew
或其他命令行工具列出所有构建变体?
例如以下build.gradle
:
buildTypes {
debug {}
release {}
}
productFlavors {
dev {}
prod {}
}
该命令将返回如下内容:
devDebug
devRelease
prodDebug
prodRelease
一种选择是在 my 中创建一个 gradle 任务,build.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 plugin(AGP) api 感到满意。
推荐阅读
- java - LocalTime 军用时间解析 00:00
- php - 如何仅隐藏 wordpress 空子类别?
- asp.net-core - 在 Application Insights for .Net Core 中拦截方法调用
- php - WordPress 预定事件实际上并未安排
- javascript - Vue 和 Prismic 富文本:向 span 节点添加事件监听器
- python - 如何在 KIVY 中删除小部件(标签、按钮等)
- python - 如何创建具有多个签名的 TensorFlow 2 SavedModel?
- java - MDC 没有从 Hystrix 线程转移到 tomcat 线程
- python - skimage 转换为灰度导致黑色图像
- vb.net - 来自已经正常运行的原始代码的重复代码的语法错误