Variant API
源:[使用 Variant API 扩展构建]
(https://developer.android.google.cn/studio/build/extend-agp)
Variant API 允许你在 Android 构建过程的特定阶段(即“变体”创建时)动态地修改配置。
API 演进对比
- 旧 API (onVariants): 在配置阶段运行,无法处理复杂的任务依赖。
- 新 API (androidComponents): 基于
Lazy API,支持完美的任务链自动化。
动态清单属性干预
假设你想在生成变体时,动态根据某些条件修改 manifestPlaceholders。
kotlin
androidComponents {
// 作用于所有变体
onVariants { variant ->
val name = variant.name
// 动态设置不同的 API Key
variant.manifestPlaceholders.put("API_KEY", "key_for_\${name}")
}
}动态源码注入
如果你有一个任务会自动生成 Java/Kotlin 类,你可以让 AGP 自动把它们加入编译路径。
kotlin
androidComponents {
onVariants { variant ->
val myTaskProvider = tasks.register<MyCodeGeneratorTask>("generate\${variant.name}Code")
// 关键:将任务输出关联到变体源码集
variant.sources.java?.addGeneratedSourceDirectory(
myTaskProvider,
MyCodeGeneratorTask::outputDir
)
}
}变体选择器 (Selector)
你可以只针对特定的渠道或类型进行干预。
kotlin
val debugSelector = androidComponents.selector().withBuildType("debug")
androidComponents.onVariants(debugSelector) { variant ->
// 仅对 debug 包生效的逻辑
}