gradle 中构建变体由构建类型与产品风味交叉生成,如 devdebug、prodrelease;需分别配置 buildtypes(控制混淆、调试、签名等)和 productflavors(区分包名、资源、api 地址等),再通过 source sets 和 buildconfig 实现差异化逻辑。

Gradle 中配置不同构建变体(Build Variants),本质是组合 构建类型(Build Types) 和 产品风味(Product Flavors)。两者交叉生成最终可安装的 APK/AAB,比如 debug + dev → devDebug,release + prod → prodRelease。关键不在于直接定义变体,而是分别配置好这两类基础组件。
配置 Build Types(调试、预发、发布等)
Build Types 主要控制构建行为:是否混淆、是否可调试、签名方式、应用 ID 后缀、版本名后缀等。它们定义在 android.buildTypes 块中:
- Android Studio 默认提供
debug和release,无需手动声明;但若需修改(如加后缀),就得显式写出 - 自定义类型(如
staging)推荐用initWith继承已有类型,再覆盖差异项,避免重复配置 -
applicationIdSuffix是实现多版本共存的核心——它让同一 flavor 在不同 build type 下拥有不同应用 ID
示例:
buildTypes {
debug {
applicationIdSuffix ".debug"
versionNameSuffix "-debug"
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
staging {
initWith(buildTypes.debug)
applicationIdSuffix ".staging"
versionNameSuffix "-staging"
buildConfigField "String", "API_BASE_URL", "\"https://staging.example.com\""
}
}
配置 Product Flavors(开发版、测试版、正式版等)
Product Flavors 用于区分业务维度的差异:不同包名、不同资源、不同代码逻辑、不同 manifest 占位符。它们定义在 android.productFlavors 块中:
- 每个 flavor 可设独立的
applicationId(完全替换)或applicationIdSuffix(追加) - 常用方式是统一用基础 ID(如
com.example.app),再靠 suffix 区分环境,便于维护 - 通过
manifestPlaceholders可向AndroidManifest.xml注入动态值,比如不同环境的 host 名
示例:
productFlavors {
dev {
applicationIdSuffix ".dev"
versionNameSuffix "-dev"
manifestPlaceholders["hostName"] = "dev.example.com"
}
prod {
// 保持默认 applicationId,不加后缀
manifestPlaceholders["hostName"] = "api.example.com"
}
}
使用 Source Sets 管理差异化代码和资源
每个 Build Variant 都对应一个自动创建的 source set(如 devDebug、prodRelease)。你可以把专属代码、资源、清单文件放在对应目录下:
- 路径格式为:
src/<flavorname><buildtypename>/</buildtypename></flavorname>(如src/devDebug/java/) - 也可以只按 flavor 或只按 build type 设目录(如
src/dev/java/会被所有 dev flavor 的变体共用) - 同名资源或 Java 类,会按优先级覆盖:
flavorBuildType>flavor>buildType>main
例如,在 src/dev/java/LogUtil.java 中写测试日志,在 src/prod/java/LogUtil.java 中关闭日志输出,编译时自动生效。
在代码中读取构建信息(BuildConfig)
通过 buildConfigField 可在 Java/Kotlin 中访问编译期常量:
- 在
buildTypes或productFlavors块中添加字段,如buildConfigField "boolean", "IS_DEV", "true" - 生成的值位于
BuildConfig.IS_DEV,运行时可直接判断环境 - 字符串需注意转义:
"\"https://dev.example.com\""
配合 BuildConfig.DEBUG(由 build type 自动注入),能精准区分调试/发布、开发/生产等多重状态。











