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