我正在开发一个以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'
}
android{compileSdk 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
}
}
依赖项{
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"
}
错误
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)
正在进行的问题
还有其他谷歌地图平台用户也有这个问题,所以谷歌问题跟踪器中有一个正在进行的条目。
您可以在此处查看并标记该问题:https://issuetracker.google.com/228091313
请注意,上面的问题跟踪条目是有关上述问题的公共信息的权威来源,所有与公共相关的更新都将发布在那里。
关于该错误,该问题似乎只能在Google Maps SDK for Android的LEGACY
渲染器上重现,而不能在LATEST
渲染器上再现。
虽然我可以看到您正在请求LATEST
渲染器,但可能您的应用程序仍然使用LEGACY
渲染器加载。下面是你能做的。
使用Maps SDK的最新渲染器
我只想在这里引用谷歌员工在这个问题上所说的话:https://issuetracker.google.com/issues/228091313#comment44
- 从我们目前的调查来看,我们认为这个问题只发生在Maps SDK的
LEGACY
渲染器上,而不会发生在LATEST
渲染器上- 您可以通过调用
MapsInitializer.initialize()
来请求LATEST
渲染器。请按照上的指南操作https://developers.google.com/maps/documentation/android-sdk/renderer.- 请使用
OnMapsSdkInitializedCallback
来确定实际返回的渲染器版本。
- 默认情况下,
LATEST
渲染器不包含在设备中的Google Play服务中。因此,即使您的应用程序请求LATEST
渲染器,回调可能显示您的应用程序仍然获得Legacy。
- 当首次请求
LATEST
渲染器时,Google Play服务将请求从我们的服务器。LATEST
渲染器可能需要一些时间下载并安装在设备上,即可使用。是的通常在几分钟内完成,但可能需要几个小时- 此外,最新渲染器需要Android 5.0(API 21级(或更高版本上的设备,具有2 GB或更大的数据存储空间,并安装Google Play服务
21.39.14
或更高的版本
但总的来说,根据谷歌团队的调查,这只是一条无害但令人讨厌的警告信息。它不会导致或显示地图SDK功能上的任何问题。所以我不认为这是导致你的标记不显示的原因。
该bug中还提到,已经有一个内部问题需要从Android日志中删除java.lang.SecurityException
警告消息。目前还没有这方面的目标发布日期。因此,关注这一问题进行更新将是一件好事。
希望这能有所帮助!