Skip to content

Variant API (动态干预构建)

源:使用 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 包生效的逻辑
}