发布签名APK后Google Maps无法工作的问题求助
解决Google Maps在签名发布APK中无法工作的问题
你核心的问题是混淆了调试签名密钥和发布签名密钥的SHA1指纹,导致发布APK使用的签名指纹没有在Google Cloud控制台正确配置。下面一步步帮你排查和解决:
1. 理清两个指纹的来源
- 你用
keytool -list -keystore 你的发布jks获取的98:EC:9D...是发布密钥的SHA1,这是生成正式签名APK时使用的密钥指纹。 - 调试日志里出现的
B7:06:CC:...是Android Studio默认调试密钥的SHA1(来自~/.android/debug.keystore),所以你添加这个指纹后,调试模式下的APP能正常调用地图API,但发布APK用的是你自己的签名密钥,自然无法匹配。
2. 确保发布密钥的SHA1正确配置到Google控制台
首先要确认你获取的发布密钥SHA1是完整且正确的,执行以下命令(添加-v参数显示完整信息):
keytool -list -v -keystore "C:\Users...signature.jks" -alias "你的密钥别名"
注意:如果你的密钥库设置了别名密码,需要额外输入;如果没设置别名密码,直接按回车即可。
拿到完整的SHA1后,登录Google Cloud控制台,找到你的Maps SDK for Android对应的API密钥,添加新的授权条目:
- 包名填你的应用包名(比如
mypackage) - SHA1指纹填刚才获取的
98:EC:9D...完整值
同时保留之前添加的调试指纹条目,这样调试和发布模式都能正常工作。
3. 确认发布构建的签名配置正确
打开你的app/build.gradle文件,检查release构建类型是否正确关联了你的发布密钥:
android { signingConfigs { release { storeFile file("C:\\Users...signature.jks") // 注意路径转义或用相对路径 storePassword "你的密钥库密码" keyAlias "你的密钥别名" keyPassword "你的密钥密码" } } buildTypes { release { signingConfig signingConfigs.release minifyEnabled true // 如果开启了混淆,确保Maps相关类没被混淆 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } }
如果你开启了代码混淆,需要在
proguard-rules.pro中添加Maps的混淆规则,避免核心类被混淆:-keep class com.google.android.gms.maps.** { *; } -keep interface com.google.android.gms.maps.** { *; }
4. 清理缓存并重新构建发布APK
有时候Android Studio的缓存会导致签名配置不生效,执行以下步骤:
- 点击菜单栏
Build > Clean Project - 然后点击
Build > Rebuild Project - 重新生成签名APK:
Build > Generate Signed Bundle/APK,选择APK,然后按照向导选择你的发布密钥,确保所有参数正确。
5. 验证发布APK的实际签名指纹
生成APK后,可以用以下命令验证它的签名指纹是否和你配置到控制台的一致:
keytool -printcert -jarfile "你的发布APK路径"
输出的SHA1应该和你添加到Google控制台的发布指纹完全一致,如果不一致,说明你生成APK时用错了密钥,需要检查签名配置。
最后确认API启用状态
再次检查Google Cloud控制台,确保Google Maps Android API v2已经被启用(日志里提到了这个,但还是要确认一遍,避免遗漏)。
内容的提问来源于stack exchange,提问作者Darksymphony
相关产品推荐
相关产品推荐

