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