You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Android Gradle Plugin至3.6后生成的APK未签名问题求助

AGP 3.6 升级后发布版APK未签名问题的排查与解决

我之前也碰到过一模一样的情况——把Android Gradle Plugin从3.4.2升级到3.6版本后,不管是用Android Studio的「Generate signed APK」还是CI环境构建,出来的发布版APK都是未签名状态。用jarsigner --verify --certs D:\app-release.apk验证时,结果显示jar is unsigned,而且用7-zip打开APK后,META-INF文件夹里确实缺了CERT.RSA和CERT.SF这两个关键文件。后来折腾了一番,总结出几个可行的排查方向和解决办法,你可以逐一试试:

1. 确认签名配置已正确绑定到release构建类型

AGP升级后,有时候buildTypes里的release配置会意外丢失签名引用,哪怕你已经在signingConfigs里定义好了完整的签名信息。一定要检查Module级build.gradle的buildTypes部分:

buildTypes {
    release {
        signingConfig signingConfigs.release // 这一行必须存在且未被注释
        // 其他配置:minifyEnabled、proguardFiles等
    }
}

如果这行被遗漏或注释,AGP 3.6不会自动关联签名配置,直接生成未签名APK。

2. 排查代码混淆与签名的执行顺序冲突

AGP 3.6对R8/ProGuard混淆和签名的执行逻辑做了调整,如果你的release构建开启了minifyEnabled true,可能出现混淆后未触发签名的情况:

  • 临时关闭minifyEnabled,重新构建APK验证是否能正常签名。如果可以,说明是混淆配置和签名流程的冲突,建议升级R8到与AGP 3.6匹配的版本(AGP 3.6默认集成R8,无需额外配置,但要确保Gradle版本和AGP版本兼容)。
  • 检查proguard-rules.pro里是否有影响签名文件生成的规则,比如误删了META-INF相关的保留配置。

3. 清理Gradle缓存并重新构建

AGP升级后,旧的缓存文件可能干扰新的签名流程,导致异常:

  • 在Android Studio里点击File -> Invalidate Caches... -> Invalidate and Restart,彻底清理IDE缓存。
  • 手动删除项目根目录的.gradle文件夹、Module目录下的build文件夹,然后重新执行构建。
  • CI环境下,在构建命令前添加./gradlew clean步骤,确保没有残留的旧构建文件。

4. 检查密钥库的访问权限与路径

虽然你确认密钥库路径和密码都正确,但AGP 3.6对文件权限的检查更严格:

  • 确保密钥库文件(.jks/.keystore)的路径没有特殊字符或空格,避免解析异常。
  • CI环境下,确认运行构建的用户账号有读取密钥库文件的权限,避免因权限不足导致签名失败。

5. 临时用手动签名作为替代方案

如果以上方法都无效,可以先通过手动签名生成有效APK应急:

  1. 用AGP 3.6生成未签名的release APK:执行./gradlew assembleRelease,在Module的build/outputs/apk/release目录下找到未签名的APK文件。
  2. 使用apksigner工具手动签名:
apksigner sign --ks your_keystore.jks --ks-key-alias your_key_alias unsigned.apk
  1. 验证签名有效性:
apksigner verify signed.apk

我当时是因为buildTypes里的release配置漏了signingConfig引用,加上缓存问题导致的,补全配置并清理缓存后就正常了。你可以先从检查buildTypes的签名绑定开始排查。

内容的提问来源于stack exchange,提问作者gorodeckii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 07:27:30