使用Stripe作为支付处理器的Google Pay Android应用签名问题求助
Hey there, sorry to hear you're stuck with the same production APK request failure issue mentioned in the Request Failed on production apk post. Let's walk through some targeted checks and fixes based on the steps you've already taken:
确认Google Play App Signing的密钥匹配
既然你已经启用了Google Play App Signing,要重点确认:你上传到Google Play的APK是用上传密钥签名的,而非最终的发布密钥(Google会自动用发布密钥重新签名你的应用)。
你可以在Google Play控制台的「应用签名」页面,核对上传密钥的SHA-1/SHA-256指纹,再和本地生成的上传密钥指纹做对比。本地查看密钥指纹的命令是:keytool -list -v -keystore your-upload-keystore.jks重新检查手动签名流程的正确性
手动签名APK时,务必确保用对了密钥库、密钥别名,且命令参数符合规范。标准的签名命令应该是这样的:jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore your-keystore.jks your-app-unsigned.apk your-key-alias签名完成后,别忘了执行zipalign优化(这一步很容易被忽略):
zipalign -v 4 your-app-signed.apk your-app-aligned.apk如果你是用Android Studio生成签名APK,还要确认构建变体选的是release,且签名配置里指定了正确的密钥库信息。
正确校验CERT.RSA的签名信息
你用jar -xvf META-INF/CERT.RSA提取了证书文件,但还需要进一步解析证书内容来确认签名有效性。提取后执行以下命令查看证书详情:keytool -printcert -file META-INF/CERT.RSA对比输出的指纹信息和Google Play控制台里的上传/发布密钥指纹是否一致。如果不匹配,说明你签名时用错了密钥。
排查应用内的签名校验逻辑
有些应用会在代码中硬编码签名指纹做运行时校验,如果你的代码里还保留着测试环境的指纹,发布时没更新,就会导致请求失败。可以搜索代码中类似getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES)的逻辑,确认使用的是生产环境的正确指纹。测试Google Play签名后的APK
本地签名的APK和Google Play重新签名后的版本可能存在差异,建议把APK上传到Google Play的内部测试轨道,安装测试版本验证是否还会出现请求失败问题。如果内部测试版本正常,那问题大概率出在本地签名流程和Google Play签名的差异上。
内容的提问来源于stack exchange,提问作者Pak Ho Cheung

