GoogleCertificatesRslt:Kotlin Android 应用程序中不允许

Mac*_*cik 11 android google-maps kotlin

我正在开发一个使用 Kotlin 作为开发语言的 Android 应用程序。该应用程序显示地图并应该加载标记。但是,地图会加载,但标记不会加载。我收到一个安全异常GoogleCertificatesRslt: not allowed,我发现它可能是由版本引起的。我正在使用的包是implementation 'com.google.android.gms:play-services-maps:18.0.2'. 有人知道问题是什么以及可能的解决方案吗?

摇篮文件:

plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
Run Code Online (Sandbox Code Playgroud)

}

android { 编译Sdk 32

defaultConfig {
    applicationId "com.ao.wildfire"
    minSdk 21
    targetSdk 32
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
    jvmTarget = '1.8'
}
buildFeatures {
    viewBinding true
}
Run Code Online (Sandbox Code Playgroud)

}

依赖项{

implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'com.google.android.gms:play-services-maps:18.0.2'

// Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation "com.squareup.okhttp3:okhttp:4.9.0"

// Coroutines
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0'

// Coroutine Lifecycle Scopes
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.4.1"
Run Code Online (Sandbox Code Playgroud)

}

错误

W/MobStoreFlagStore: Unable to update local snapshot for com.google.android.libraries.consentverifier#com.ao.wildfire, may result in stale flags.
java.util.concurrent.ExecutionException: java.lang.SecurityException: GoogleCertificatesRslt: not allowed: pkg=com.ao.wildfire, atk=false, ver=220920031.true (go/gsrlt)
    at agv.s(:com.google.android.gms.dynamite_mapsdynamite@220920068@22.09.20 (100700-0):3)
    at agv.get(:com.google.android.gms.dynamite_mapsdynamite@220920068@22.09.20 (100700-0):2)
    at aif.g(:com.google.android.gms.dynamite_mapsdynamite@220920068@22.09.20 (100700-0):2)
    at wy.c(:com.google.android.gms.dynamite_mapsdynamite@220920068@22.09.20 (100700-0):1)
    at xe.run(:com.google.android.gms.dynamite_mapsdynamite@220920068@22.09.20 (100700-0):0)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at java.lang.Thread.run(Thread.java:919)
 Caused by: java.lang.SecurityException: GoogleCertificatesRslt: not allowed: pkg=com.ao.wildfire, sha256=[bbe56829a1f8ca5eb01bb8f0feefd7a5a88d6a4d9d7069b33b2ba4d3fc76ec7e], atk=false, ver=220920031.true (go/gsrlt)
    at android.os.Parcel.createException(Parcel.java:2071)
    at android.os.Parcel.readException(Parcel.java:2039)
    at android.os.Parcel.readException(Parcel.java:1987)
    at ef.aZ(:com.google.android.gms.dynamite_mapsdynamite@220920068@22.09.20 (100700-0):2)
    at qs.a(:com.google.android.gms.dynamite_mapsdynamite@220920068@22.09.20 (100700-0):4)
    at ij.e(:com.google.android.gms.dynamite_mapsdynamite@220920068@22.09.20 (100700-0):2)
    at ji.t(:com.google.android.gms.dynamite_mapsdynamite@220920068@22.09.20 (100700-0):2)
    at ji.u(:com.google.android.gms.dynamite_mapsdynamite@220920068@22.09.20 (100700-0):3)
    at ji.e(:com.google.android.gms.dynamite_mapsdynamite@220920068@22.09.20 (100700-0):2)
    at jm.handleMessage(:com.google.android.gms.dynamite_mapsdynamite@220920068@22.09.20 (100700-0):69)
    at android.os.Handler.dispatchMessage(Handler.java:103)
    at android.os.Looper.loop(Looper.java:214)
    at android.os.HandlerThread.run(HandlerThread.java:67)
Run Code Online (Sandbox Code Playgroud)

Yrl*_*rll 1

持续的问题

还有其他 Google Maps Platform 用户也遇到了此问题,因此 Google 问题跟踪器中不断有该问题的条目。

您可以在此处查看问题并加注星标:https://issuetracker.google.com/228091313

请注意,上面的问题跟踪条目是有关上述问题的公共信息的权威来源,所有与公开相关的更新都将发布在那里。

关于该错误,看来该问题只能在Google Maps SDK for AndroidLEGACY的渲染器上重现,而不能在渲染器上重现。LATEST

虽然我可以看到您正在请求LATEST渲染器,但您的应用程序可能仍然使用LEGACY渲染器加载。所以这就是你可以做的。

使用Maps SDK的最新渲染器

我将在这里引用 Google 员工就该问题所说的话: https: //issuetracker.google.com/issues/228091313#comment44

  • 根据我们迄今为止的调查,我们认为此问题仅发生在 Maps SDK 的LEGACY渲染器上,而不是LATEST渲染器上。
  • 您可以LATEST通过调用 来请求渲染器MapsInitializer.initialize()。请按照https://developers.google.com/maps/documentation/android-sdk/renderer上的指南进行操作 。
  • 请用于OnMapsSdkInitializedCallback确定实际返回的渲染器版本。
    • 默认情况下,LATEST渲染器不包含在设备的 Google Play 服务中。因此,即使您的应用程序请求渲染 LATEST器,回调也可能显示您的应用程序仍在获取旧版渲染器。
      • 当LATEST第一次请求渲染器时,Google Play 服务将请求从我们的服务器下载渲染器。LATEST渲染器下载并安装到设备上并准备使用可能需要一些时间。它通常在几分钟内完成,但也可能需要几个小时。
    • 此外,最新渲染器要求设备运行Android 5.0(API 级别 21)或更高版本,具有 2 GB 或更多数据存储空间,并安装 Google Play 服务版本21.39.14或更高版本。

但总而言之,根据 Google 团队的调查,这只是一条无害但令人讨厌的警告消息。它不会导致或显示 Maps SDK 功能上的任何问题。所以我不认为这是导致你的标记不显示的原因。

该错误还提到,已经提交了一个内部问题来删除java.lang.SecurityExceptionAndroid 日志中的警告消息。目前尚无目标发布日期。因此,最好关注该问题以获取更新。

希望这可以帮助!