Android Studio Java项目地图模块证书类异常修复求助
Google地图功能异常修复方案
遇到的异常
- 无法打开
/data/user_de/0/com.google.android.gms/app_chimera/m/00000222/GoogleCertificates.dm:No such file or directory - 找不到
com.google.android.gms.googlecertificates的本地模块描述类 - 无法更新
com.google.android.libraries.consentverifier#com.steadyoil的本地快照,可能导致标记失效,报错堆栈如下:
java.util.concurrent.ExecutionException: java.lang.SecurityException: GoogleCertificatesRslt: not allowed: pkg=com.steadyoil, sha256=[98a6a68b3f9130328da89ac260298ca698eed37c4f821fab07f77c4221db96ec], atk=false, ver=231819044.true (go/gsrlt) at ajs.s(:com.google.android.gms.dynamite_mapsdynamite@231819044@23.18.19 (190400-0):3) at ajs.get(:com.google.android.gms.dynamite_mapsdynamite@231819044@23.18.19 (190400-0):2) at alc.g(:com.google.android.gms.dynamite_mapsdynamite@231819044@23.18.19 (190400-0):2) at yz.c(:com.google.android.gms.dynamite_mapsdynamite@231819044@23.18.19 (190400-0):1) at zb.run(:com.google.android.gms.dynamite_mapsdynamite@231819044@23.18.19 (190400-0):0) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:463) at java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:307) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) at java.lang.Thread.run(Thread.java:1012) Caused by: java.lang.SecurityException: GoogleCertificatesRslt: not allowed: pkg=com.steadyoil, sha256=[98a6a68b3f9130328da89ac260298ca698eed37c4f821fab07f77c4221db96ec], atk=false, ver=231819044.true (go/gsrlt) at android.os.Parcel.createExceptionOrNull(Parcel.java:3011) at android.os.Parcel.createException(Parcel.java:2995) at android.os.Parcel.readException(Parcel.java:2978) at android.os.Parcel.readException(Parcel.java:2920) at fe.c(:com.google.android.gms.dynamite_mapsdynamite@231819044@23.18.19 (190400-0):2) at rx.a(:com.google.android.gms.dynamite_mapsdynamite@231819044@23.18.19 (190400-0):4) at jl.e(:com.google.android.gms.dynamite_mapsdynamite@231819044@23.18.19 (190400-0):2) at kj.t(:com.google.android.gms.dynamite_mapsdynamite@231819044@23.18.19 (190400-0):2) at kj.u(:com.google.android.gms.dynamite_mapsdynamite@231819044@23.18.19 (190400-0):3) at kj.e(:com.google.android.gms.dynamite_mapsdynamite@231819044@23.18.19 (190400-0):2) at kn.handleMessage(:com.google.android.gms.dynamite_mapsdynamite@231819044@23.18.19 (190400-0):78) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.os.HandlerThread.run(HandlerThread.java:67)
修复步骤
1. 核对API密钥的应用限制
- 登录Google Cloud控制台,找到你的Maps API密钥,确认已将包名
com.steadyoil和报错中的SHA-256指纹98a6a68b3f9130328da89ac260298ca698eed37c4f821fab07f77c4221db96ec添加到应用限制列表中。 - 确保该API密钥已启用Maps SDK for Android服务。
2. 验证签名配置一致性
- 检查项目的签名配置:如果是debug版本,确认使用的Android Studio默认debug证书的SHA-256与控制台一致;如果是release版本,确认签名文件的SHA-256完全匹配。
- 可通过以下命令获取签名文件的SHA-256:
keytool -list -v -keystore 你的签名文件路径.jks -alias 签名别名
3. 清理重建项目
- 在Android Studio中执行
Build > Clean Project,然后Build > Rebuild Project,清除旧构建缓存。 - 卸载设备上的旧应用,重新安装最新构建版本。
4. 更新Google Play服务依赖
- 在模块级
build.gradle文件中,确保play-services-maps依赖使用最新稳定版本,例如:implementation 'com.google.android.gms:play-services-maps:18.2.0'
5. 更新设备端Google Play服务
- 打开测试设备的Google Play商店,搜索并更新Google Play服务到最新版本,旧版本可能存在证书验证兼容性问题。
6. 检查Manifest配置
- 确保
AndroidManifest.xml中已正确声明Maps API密钥和必要权限:<!-- API密钥配置 --> <meta-data android:name="com.google.android.gms.maps.API_KEY" android:value="你的有效API密钥"/> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/> <!-- 必要权限 --> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
内容的提问来源于stack exchange,提问作者Akshay A
相关产品推荐
相关产品推荐

