signingReport是Android Studio中获取真实签名信息的首选方式,它自动适配debug/release分支、多flavor及v2/v3签名配置,避免因手动指定路径错误导致查到假签名;需确保AGP版本兼容并正确配置signingConfigs,JDK 17+默认不输出MD5需降级或改用keytool提取。

Gradle 本身不直接“查看”签名信息,但可以通过内置的 signingReport 任务导出构建时实际使用的签名配置和证书摘要——这是 Android Studio 环境下最可靠、最贴近真实打包行为的方式。
为什么 signingReport 比 keytool 更值得优先用
它读取的是 Gradle 构建流程中真正生效的 signingConfig,自动适配 debug/release 分支、多 flavor、v2/v3 签名开关等配置,不会因手动指定错误 keystore 路径或忽略 buildType 导致查到“假签名”。尤其当你改过 build.gradle 里的 storeFile 路径却忘了同步更新本地命令行参数时,keytool 输出的就完全是另一个东西。
常见错误现象:signingReport 输出空白或报错 Task 'signingReport' not found,本质是 Gradle 插件版本升级后默认隐藏了该任务(Android Gradle Plugin 8.0+)。
- 新版 Android Studio(如 Giraffe、Iguana)不再在 Gradle 工具窗口自动展开任务列表,需手动触发
- 确保项目已正确配置
signingConfigs,否则即使任务存在也无输出 - debug 和 release 的签名信息会分别列出,注意看输出里标着
debug还是release的那一块
signingReport 任务怎么手动运行
不依赖图形界面,终端或 IDE 内置 Terminal 都能执行:
- 进入项目根目录,运行:
./gradlew signingReport(macOS/Linux)或gradlew signingReport(Windows) - 输出中找以
Variant: debug或Variant: release开头的区块 - 每个 variant 下会列出
MD5、SHA1、SHA-256和CN=(证书所有者)等字段,格式为标准十六进制字符串,可直接复制填入高德、微信、华为等平台
注意:如果配置了 flavor(如 freeRelease、paidDebug),任务会为每个组合生成一行,别只扫一眼就以为只有一组。
debug 签名和 release 签名为什么总搞混
Android Studio 默认为 debug 构建自动生成 ~/.android/debug.keystore,而 release 必须显式配置 signingConfigs。很多开发者填第三方平台时误把 debug 的 SHA1 当 release 提交,结果地图 SDK 白屏、推送收不到——因为平台校验的是你最终上架 APK 实际使用的签名。
- debug 签名每次重装 Android Studio 可能重置,且不同机器的 debug.keystore 不同,绝不能用于生产环境
- release 签名必须复用同一个 keystore 文件,一旦丢失无法找回,也无法覆盖安装旧版
-
signingReport会同时打印两者,务必确认你复制的是对应构建变体的那一段,别被排版误导
输出里没看到 MD5?那是 JDK 版本问题
从 JDK 17 开始,keytool(Gradle 底层调用它)默认不再输出 MD5 指纹,只显示 SHA1/SHA-256。但国内多数平台(如百度地图、极光)仍强制要求 MD5,这时 signingReport 就会缺失该字段。
解决办法只有两个:
- 降级到 JDK 11 或 JDK 17 以下版本再跑
./gradlew signingReport - 改用命令行直读 keystore:
keytool -list -v -keystore your.keystore -alias your_alias,然后手动从输出里提取MD5:行(注意不是SHA1:)
这个细节没人提醒,但几乎每个对接过老平台的 Android 开发都踩过——JDK 升级后突然发现“明明签名没变,平台却说不匹配”,根源就在指纹算法被静默裁剪了。


















