Flutter构建AAB签名失败 jarsigner提示无manifest如何解决
问题修复方案
核心配置错误修正
你贴的签名配置存在两个显性问题,也是这类报错最常见的诱因:
- 你将
v1SigningEnabled、v2SigningEnabled两个签名开关写在了key.properties文件读取的with闭包内部,这两个参数属于signingConfigs的根级配置项,嵌套在文件读取闭包中时,部分Gradle版本会因为作用域问题无法识别配置,直接跳过签名流程。 - 你只定义了
signingConfigs块,没有在buildTypes.release中显式绑定这个签名配置——Gradle不会自动给release构建套用自定义签名规则,这是90%同类报错的根本原因。
修正后的android/app/build.gradle签名相关配置参考如下,你项目里其他原有配置(比如compileSdk、namespace、混淆规则等)保留不动即可:
android { // 原有其他配置保留 signingConfigs { release { storeFile file("../keystore.jks") // 签名开关必须放在配置根层级,不要嵌套在properties读取逻辑里 v1SigningEnabled true v2SigningEnabled true def propFile = file("../key.properties") if (propFile.canRead()) { def properties = new Properties() properties.load(new FileInputStream(propFile)) storePassword = properties['storePassword'] keyAlias = properties['keyAlias'] keyPassword = properties['keyPassword'] } else { storePassword = System.getenv("STORE_PASSWORD") keyAlias = System.getenv("KEY_ALIAS") keyPassword = System.getenv("KEY_PASSWORD") } } } buildTypes { release { // 最容易遗漏的配置:显式绑定release签名,不写这行签名不会生效 signingConfig signingConfigs.release // 原有其他release配置比如minifyEnabled、shrinkResources等保留 } } }
其他排查项
- 构建前先执行
flutter clean清空历史构建缓存,使用正式release命令构建AAB:flutter build appbundle --release,不要使用debug模式构建上传。 - 不要被
jarsigner的校验结果误导:jarsigner是为传统JAR/APK格式设计的校验工具,对AAB格式兼容性很差,返回no manifest属于典型的工具误报,不代表AAB真的缺失签名。正确的AAB校验方式是用官方bundletool工具,进入构建产物目录build/app/outputs/bundle/release/后执行bundletool validate --bundle app-release.aab,只要输出结果没有签名相关错误,就说明AAB签名状态正常。 - 如果你使用的Gradle版本在7.0及以上,检查项目根目录
gradle.properties中是否存在android.enableV1Signing=false、android.enableV2Signing=false这类全局签名开关配置,有的话直接删除,这类配置会覆盖build.gradle里的签名设置。 - 你当前的keystore是PKCS12格式,如果修正配置后仍然签名失败,可以将其转换为JKS格式规避版本兼容问题,转换命令如下,转换后把配置里的
storeFile路径指向新生成的JKS文件即可:keytool -importkeystore -srckeystore ./keystore.jks -srcstoretype PKCS12 -destkeystore ./keystore_converted.jks -deststoretype JKS
修正配置重新构建后,上传Play Console就不会再出现The Android App Bundle was not signed报错。
内容的提问来源于stack exchange,提问作者Gaddo
相关产品推荐
相关产品推荐

