升级Android Studio后生成Signed APK提示0 build variants无输出文件
问题原因
- Android Studio 2021.1.1 Canary 12属于预览版,存在和AGP 7.0.2的兼容缺陷:签名打包向导的变体识别逻辑有bug,当项目配置了productFlavors、flavorDimension或子模块依赖配置较复杂时,会出现选中的变体匹配失败的问题,直接跳过打包流程。
- AGP 7.0+升级了签名配置校验逻辑:如果选中的build variant对应的buildType+productFlavor组合未显式配置有效的signingConfig,或signingConfig的storeFile路径、密钥参数存在动态赋值、路径解析失效的情况,AGP会静默跳过该变体的打包,不会抛出显式错误,仅返回0变体匹配的提示。
- 旧构建缓存失效:升级AS和AGP后未清理旧的构建缓存,打包流程读取了缓存中失效的变体配置,误判断目标变体不需要执行构建,直接结束流程。
选择指定build variant生成Signed APK的正确逻辑
- 打包前先打开AS侧边栏的
Build Variants面板,确认目标模块对应的build variant已提前选中,不要完全依赖签名打包向导内的选择项,AGP 7.0+会优先读取该面板的变体锁定配置。 - 进入
Generate Signed Bundle / APK向导后,先填写正确完整的签名配置信息,进入变体选择页后,除了勾选目标build variant,还要确认Signature Versions项至少勾选了V2签名,AGP 7.0+默认不支持仅V1签名的release打包配置,未勾选V2会被判定为无效配置跳过打包。 - 确保项目build.gradle中目标variant对应的配置已显式关联signingConfig,不要使用动态赋值、if判断延迟赋值的逻辑配置签名信息,参考合法配置:
android { // 先定义签名配置 signingConfigs { release { storeFile file("./your-release-key.keystore") storePassword "你的存储密码" keyAlias "你的密钥别名" keyPassword "你的密钥密码" } } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 显式关联签名配置,不要放在if判断等动态逻辑块内 signingConfig signingConfigs.release } } }
- 首次触发0变体提示后,先执行
Build -> Clean Project清理构建缓存,再执行File -> Invalidate Caches... -> Invalidate and Restart清理AS的无效缓存配置,重启后再重新走打包流程即可。
内容的提问来源于stack exchange,提问作者Anael
相关产品推荐
相关产品推荐

