背景:
对接华为HMS SDK开发了一款游戏,近期游戏更新,提交审核被驳回:我们发现您的游戏与在货架版本签名不一致,请修改。
这里根据这次问题定位,写了个总结,分享给大家。
排查步骤
1. 对比应用前一版本与现版本的是否一致
查看工程中的指纹证书:
a. 打开命令行,输入keytool -list –v –keystore [签名文件路径]
b. 输入秘钥库口令
c. 查看当前签名指纹证书
APK签名查看方法:
a. 输入命令:keytool -printcert -jarfile xxx.apk(apk文件路径)
b. 执行命令后显示如下图:
c. 可以看到当前应用apk的SHA256值,需要对比的两个应用的SHA256值进行确认两个应用的签名证书是否一致
再将两个APK的指纹证书与工程中的指纹证书对比,查看是否一致
2. 如果签名证书不一致,一般有两种情况,一种是两个apk版本使用了不同的签名文件打包。 这种情况,首先检查工程中签名使用的jks文件或keystore文件是否为同一文件。或者检查jks或者keystore文件是否与不同环境或不同渠道混用,导致了签名的不一致。
例如:
这里有debug和release两个环境,两者使用的jks文件不同,需要确认每个环境配置的jks文件是否一一对应,不能将debug的jks文件配置到release中,反之亦然。
3. 如果jks文件或keystore文件一致,则需要确认打包签名是否使用了自动化流程,检查自动化流程中是否使用了常规的DEX文件加壳,从而导致了签名不一致。
以一个android应用加固网站为例,应用可以在类似的第三方平台进行二次加固,一般此类平台加固完成之后可能会丢失签名,需要二次apk签名并添加渠道:
上传应用:
应用加固:
加固完成后会生成一个新的apk:
可以看到应用在加固后签名已经丢失,一般使用平台流程化加固打包会在加固完成后自动进行二次签名,这样会导致应用签名与原始工程签名不一致,此处建议二次签名自己手动使用命令签名打包。
原作者:AppGallery Connect