什么是变体?

变体是构建类型(Build Type)和产品风味(Product Flavor)的组合结果,它代表了一个特定配置的 APK 或 AAR 构建版本,也是 Android Gradle Plugin(AGP)的核心概念之一。

构建类型(Build Type)

  • debug:调试版本,包含调试信息
  • release:发布版本,进行代码优化
  • 可自定义其他类型

产品风味(Product Flavor)

  • 基于不同配置(如:免费版/付费版、不同API级别等)
  • 例如:freepaiddemo

变体的生成规则

变体 = 构建类型 × 产品风味

例如:

android {
    buildTypes {
        debug {}
        release {}
    }
    
    flavorDimensions "version"
    productFlavors {
        free {}
        paid {}
    }
}

将生成 4 个变体:freeDebugfreeReleasepaidDebugpaidRelease

大多数简单项目都没有定义 Product Flavor,此时:

android {
    buildTypes {
        debug { }
        release { }
    }
    // 没有定义 productFlavors
}

只生成 2 个变体:debugrelease

android.libraryVariants.all

.all { } 是什么意思?

android.libraryVariants.all { variant ->
    // 这个闭包会对每个变体执行一次
}

假设你有 debug 和 release 两个变体:

android.libraryVariants.all { variant -> 
    println("处理变体: ${variant.name}")                        
 }

会针对两个变体分别执行一次,执行结果如下:

第1次执行:variant = debug
输出:处理变体: debug
第2次执行:variant = release
输出:处理变体: release

all vs each vs configureEach

// 方式1:all(最常用,推荐)
android.libraryVariants.all { variant ->
    // 对已存在和未来添加的变体都生效
    // 立即执行
}
 
// 方式2:each(不推荐)
android.libraryVariants.each { variant ->
    // 只对当前已存在的变体执行
    // 如果变体还没创建完,可能遗漏
}
 
// 方式3:configureEach(Gradle 4.9+,性能更好)
android.libraryVariants.configureEach { variant ->
    // 懒执行:只在真正需要该变体时才配置
    // 大型项目推荐使用
}

为什么推荐 all

因为 Gradle 配置阶段,变体可能还在陆续创建中。all 能确保”后来者”也被处理。

4.4 variant 对象有哪些属性?

android.libraryVariants.all { variant ->
    // === 基本信息 ===
    println "变体名称: ${variant.name}"           // 如 "debug", "release"
    println "构建类型: ${variant.buildType.name}" // 如 "debug"
    println "产品风味: ${variant.productFlavors}" // 列表,可能为空
    
    // === 目录和路径 ===
    println "输出目录: ${variant.dirName}"        // 如 "debug"
    
    // === 任务相关 ===
    println "Java编译任务: ${variant.javaCompileProvider.name}"
    
    // === 方法调用 ===
    variant.buildConfigField "String", "VARIANT_NAME", "\"${variant.name}\""
}

延伸阅读

更新: 2026-02-12 15:39:24
原文: https://www.yuque.com/dongpozhouzi-mshe3/zhm85g/mq1gn0nyu9g7ezs8


相关笔记