背景:
對接華為HMS SDK開發(fā)了一款游戲,近期游戲更新,提交審核被駁回:我們發(fā)現(xiàn)您的游戲與在貨架版本簽名不一致,請修改。
這里根據(jù)這次問題定位,寫了個總結(jié),分享給大家。
排查步驟
1.對比應(yīng)用前一版本與現(xiàn)版本的是否一致
查看工程中的指紋證書:
a.打開命令行,輸入keytool-list–v–keystore[簽名文件路徑]
b.輸入秘鑰庫口令
c.查看當(dāng)前簽名指紋證書
APK簽名查看方法:
a.輸入命令:keytool-printcert-jarfile xxx.apk(apk文件路徑)
b.執(zhí)行命令后顯示如下圖:
c.可以看到當(dāng)前應(yīng)用apk的SHA256值,需要對比的兩個應(yīng)用的SHA256值進(jìn)行確認(rèn)兩個應(yīng)用的簽名證書是否一致
再將兩個APK的指紋證書與工程中的指紋證書對比,查看是否一致
2.如果簽名證書不一致,一般有兩種情況,一種是兩個apk版本使用了不同的簽名文件打包。這種情況,首先檢查工程中簽名使用的jks文件或keystore文件是否為同一文件?;蛘邫z查jks或者keystore文件是否與不同環(huán)境或不同渠道混用,導(dǎo)致了簽名的不一致。
例如:
這里有debug和release兩個環(huán)境,兩者使用的jks文件不同,需要確認(rèn)每個環(huán)境配置的jks文件是否一一對應(yīng),不能將debug的jks文件配置到release中,反之亦然。
3.如果jks文件或keystore文件一致,則需要確認(rèn)打包簽名是否使用了自動化流程,檢查自動化流程中是否使用了常規(guī)的DEX文件加殼,從而導(dǎo)致了簽名不一致。
以一個android應(yīng)用加固網(wǎng)站為例,應(yīng)用可以在類似的第三方平臺進(jìn)行二次加固,一般此類平臺加固完成之后可能會丟失簽名,需要二次apk簽名并添加渠道:
上傳應(yīng)用:
應(yīng)用加固:
加固完成后會生成一個新的apk:
可以看到應(yīng)用在加固后簽名已經(jīng)丟失,一般使用平臺流程化加固打包會在加固完成后自動進(jìn)行二次簽名,這樣會導(dǎo)致應(yīng)用簽名與原始工程簽名不一致,此處建議二次簽名自己手動使用命令簽名打包。