Skip to content

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 包生效的逻辑
}