Gradle自动拼接productFlavor与buildType生成assemble任务,如wandoujia+release→assembleWandoujiaRelease,flavor首字母大写、下划线保留,多dimension时任务名更长,需sync且拼写一致才生效。

assembleWandoujiaRelease 这类任务名是怎么生成的
Gradle 会自动把 productFlavor 名和 buildType 名拼起来,生成对应的 assemble 任务。比如你定义了 flavor wandoujia,又保留了默认的 release 和 debug buildType,那就会自动生成 assembleWandoujiaRelease、assembleWandoujiaDebug 两个任务。
注意大小写:flavor 名首字母在任务名中会自动大写(wandoujia → Wandoujia),这是 Gradle 的命名约定,不是你手写的。
- 执行
./gradlew tasks --group=build可以列出所有 assemble 相关任务 - 如果 flavor 名含下划线(如
_360),任务名里也会保留(assemble_360Release) - 没有显式声明
dimension时,多个 flavor 默认归入同一维度,不会冲突;但混用多个 dimension 时,任务名会变长(如assembleWandoujiaStagingRelease)
只打一个渠道 Release 包,该用哪个命令
直接运行 ./gradlew assembleWandoujiaRelease 即可,它只会构建 wandoujia flavor 的 release 变体,不触发其他 flavor 或 debug 构建。
- 不要用
./gradlew assembleRelease—— 它会构建所有 flavor 的 release 包 - 也不要用
./gradlew assembleWandoujia—— 它会同时打出 debug 和 release 两个版本 - 如果你改过
buildTypes名(比如加了staging),那对应任务就是assembleWandoujiaStaging
为什么 build.gradle 里写了 flavor 却找不到对应 assemble 任务
常见原因就三个:flavor 拼写不一致、没 sync、或被 if (project.hasProperty("skipFlavors")) 这类条件逻辑屏蔽了。
- 检查
android { productFlavors { wandoujia { ... } } }中的wandoujia是否和命令里完全一致(包括空格、大小写、下划线) - Android Studio 修改 gradle 后必须点
Sync Now,否则新任务不会注册进 Gradle 面板 - 某些项目用
if (rootProject.file("local.properties").exists())动态加载 flavor,若 local.properties 缺失,flavor 就不会注册
想快速验证某个 flavor 是否生效,怎么查
最直接的办法是看生成的 BuildConfig.java 或运行时读取 BuildConfig.FLAVOR。
- 构建后打开
app/build/generated/source/buildConfig/release/com/example/BuildConfig.java,确认FLAVOR字段值是否为预期 flavor 名 - 在代码里加一句
Log.d("Flavor", BuildConfig.FLAVOR);,安装后看 logcat 输出 - 如果
BuildConfig.FLAVOR是空字符串,说明当前构建根本没走任何 flavor 分支,大概率是任务名写错或 flavor 未注册


















