GoogleCertificatesRslt:not allowed错误及consent verifier库求助
Android集成Google街景时GoogleCertificatesRslt:not allowed错误解决
问题概述
开发Android项目集成Google街景功能时,遇到GoogleCertificatesRslt:not allowed错误,涉及com.google.android.libraries.consentverifier库,无公开文档可查。以下是报错日志、复现代码及解决方案。
报错日志
Unable to open '/data/user_de/0/com.google.android.gms/app_chimera/m/00000012/MapsDynamite.dm': No such file or directory Unable to update local snapshot for com.google.android.libraries.consentverifier#com.example.maybefinalgeoguessr, may result in stale flags. java.util.concurrent.ExecutionException: java.lang.SecurityException: GoogleCertificatesRslt: not allowed: pkg=com.example.maybefinalgeoguessr, sha256=[....], atk=false, ver=230714044.true (go/gsrlt) at ajk.s(:com.google.android.gms.dynamite_mapsdynamite@230714044@23.07.14 (190400-0):3) at ajk.get(:com.google.android.gms.dynamite_mapsdynamite@230714044@23.07.14 (190400-0):2) at aku.g(:com.google.android.gms.dynamite_mapsdynamite@230714044@23.07.14 (190400-0):2) at yn.c(:com.google.android.gms.dynamite_mapsdynamite@230714044@23.07.14 (190400-0):1) at yp.run(:com.google.android.gms.dynamite_mapsdynamite@230714044@23.07.14 (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.example.maybefinalgeoguessr, sha256=[.....], atk=false, ver=230714044.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 fd.c(:com.google.android.gms.dynamite_mapsdynamite@230714044@23.07.14 (190400-0):2) at rs.a(:com.google.android.gms.dynamite_mapsdynamite@230714044@23.07.14 (190400-0):4) at jj.e(:com.google.android.gms.dynamite_mapsdynamite@230714044@23.07.14 (190400-0):2) at ki.t(:com.google.android.gms.dynamite_mapsdynamite@230714044@23.07.14 (190400-0):2) at ki.u(:com.google.android.gms.dynamite_mapsdynamite@230714044@23.07.14 (190400-0):3) at ki.e(:com.google.android.gms.dynamite_mapsdynamite@230714044@23.07.14 (190400-0):2) at km.handleMessage(:com.google.android.gms.dynamite_mapsdynamite@230714044@23.07.14 (190400-0):69) 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)
最小可复现代码
MainActivity
package com.example.maybefinalgeoguessr; import android.os.Bundle; import com.google.android.gms.maps.OnStreetViewPanoramaReadyCallback; import com.google.android.gms.maps.StreetViewPanorama; import com.google.android.gms.maps.SupportStreetViewPanoramaFragment; import com.google.android.gms.maps.model.LatLng; import androidx.appcompat.app.AppCompatActivity; import java.util.Random; public class MainActivity extends AppCompatActivity implements OnStreetViewPanoramaReadyCallback { private StreetViewPanorama streetViewPanorama; private boolean secondlocation = false; private static final double MIN_LATITUDE = -90; private static final double MAX_LATITUDE = 90; private static final double MIN_LONGITUDE = -180; private static final double MAX_LONGITUDE = 180; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SupportStreetViewPanoramaFragment streetViewPanoramaFragment = (SupportStreetViewPanoramaFragment)getSupportFragmentManager().findFragmentById(R.id.googlemapstreetview); streetViewPanoramaFragment.getStreetViewPanoramaAsync(this); } @Override public void onStreetViewPanoramaReady(StreetViewPanorama streetViewPanorama) { Random random = new Random(); double lat = MIN_LATITUDE + (MAX_LATITUDE - MIN_LATITUDE) * random.nextDouble(); double lng = MIN_LONGITUDE + (MAX_LONGITUDE - MIN_LONGITUDE) * random.nextDouble(); //LatLng randomLocation = new LatLng(lat,lng); LatLng debug = new LatLng(40.3356, 75.9269); this.streetViewPanorama = streetViewPanorama; this.streetViewPanorama.setPosition(debug); } }
Manifest XML
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/Theme.Maybefinalgeoguessr" tools:targetApi="33"> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="@string/google_maps_api_key" /> <meta-data android:name= "com.google.android.streetview.API_KEY" android:value="@string/geocoding_api_key" /> <uses-library android:name="org.apache.http.legacy" android:required="false" /> <activity android:name=".MainActivity" android:exported="true" android:label="@string/app_name" android:theme="@style/Theme.Maybefinalgeoguessr"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Layout XML
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <fragment android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerInParent="true" android:id="@+id/googlemapstreetview" android:name="com.google.android.gms.maps.SupportStreetViewPanoramaFragment" /> </RelativeLayout>
Dependencies
dependencies { implementation 'com.google.android.gms:play-services-base:18.2.0' implementation 'com.google.android.gms:play-services-location:21.0.1' implementation 'com.google.maps:google-maps-services:2.1.2' implementation 'com.google.android.gms:play-services-maps:18.1.0' implementation 'com.google.android.gms:play-services-panorama:17.0.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.8.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.navigation:navigation-fragment:2.5.3' implementation 'androidx.navigation:navigation-ui:2.5.3' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' }
Plugins
plugins { id 'com.android.application' version '7.4.1' apply false id 'com.android.library' version '7.4.1' apply false }
解决方案
这个错误本质是Google服务验证不通过,核心是API密钥配置、应用签名信息不匹配,或Google Cloud控制台服务权限未开启。以下是逐一排查修复步骤:
- 统一API密钥:街景服务属于Maps SDK的一部分,无需单独配置
com.google.android.streetview.API_KEY,删除该行,统一使用Maps的API密钥。 - 验证SHA-256指纹绑定:将报错日志中显示的应用SHA-256指纹,添加到Google Cloud控制台对应API密钥的限制列表中,debug和release签名指纹都要配置。
- 开启必要服务:登录Google Cloud控制台,确保
Maps SDK for Android已启用。 - 检查包名限制:确认API密钥的应用限制中已添加你的应用包名
com.example.maybefinalgeoguessr,包名与SHA-256需一一对应。 - 更新Google Play服务依赖:将
play-services-maps等相关依赖更新到最新稳定版,避免版本兼容问题。 - 清理缓存重装:清除设备Google Play服务缓存数据,卸载当前应用后清理Android Studio构建缓存,重新构建安装。
内容的提问来源于stack exchange,提问作者dudewhoislearning
相关产品推荐
相关产品推荐

