起因
新出的安卓包需要覆盖老包测试,覆盖bili/oppo渠道后发现无法覆盖线上包,adb 看到日志,说签名不匹配。
1 | Package com.xxx.yyy.bili signatures do not match the previously installed version; ignoring! |
使用 apksigner 比较证书
优先使用 Android SDK Build Tools 自带的 apksigner,不必手工解压 META-INF:
1 | apksigner verify --verbose --print-certs old.apk |
分别记录两份输出中的证书 DN、SHA-1 和 SHA-256 指纹。证书指纹相同才表示两包可作为同一签名来源比较。

旧工具链也可解压 APK 后用 keytool -printcert -file META-INF/xxx.RSA 查看证书,但文件名和签名格式可能不同,不能只凭是否存在 .RSA 文件判断。
结果
示例中的渠道包确实重新签名,因此不能覆盖线上包。除此之外,还应检查应用 ID/包名、安装用户、是否使用 v1/v2/v3 签名方案,以及设备上是否仍安装了另一把签名密钥的历史包。