GoogleMap Compose结合MVVM时出现SecurityException的定位问题
Google Maps Compose定位追踪异常问题排查
我正在开发一款采用MVVM架构的Android应用,使用GoogleMap Compose组件实现定位追踪时,出现以下异常:
2022-10-02 18:43:48.734 31711-31750/com.park.reserved W/MobStoreFlagStore: Unable to update local snapshot for com.google.android.libraries.consentverifier#com.park.reserved, may result in stale flags. java.util.concurrent.ExecutionException: java.lang.SecurityException: GoogleCertificatesRslt: not allowed: pkg=com.park.reserved, sha256=[462925ab37c5ec4ab8550323438372023f34e9897a556848dd8c35d18c4e71c6], atk=false, ver=223616044.true (go/gsrlt) at ahn.s(:com.google.android.gms.dynamite_mapsdynamite@223616044@22.36.16 (190400-0):3) at ahn.get(:com.google.android.gms.dynamite_mapsdynamite@223616044@22.36.16 (190400-0):2) at aix.g(:com.google.android.gms.dynamite_mapsdynamite@223616044@22.36.16 (190400-0):2) at xq.d(:com.google.android.gms.dynamite_mapsdynamite@223616044@22.36.16 (190400-0):1) at xs.run(:com.google.android.gms.dynamite_mapsdynamite@223616044@22.36.16 (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.park.reserved, sha256=[462925ab37c5ec4ab8550323438372023f34e9897a556848dd8c35d18c4e71c6], atk=false, ver=223616044.true (go/gsrlt) at android.os.Parcel.createExceptionOrNull(Parcel.java:2426) at android.os.Parcel.createException(Parcel.java:2410) at android.os.Parcel.readException(Parcel.java:2393) at android.os.Parcel.readException(Parcel.java:2335) at em.c(:com.google.android.gms.dynamite_mapsdynamite@223616044@22.36.16 (190400-0):2) at rc.a(:com.google.android.gms.dynamite_mapsdynamite@223616044@22.36.16 (190400-0):4) at it.e(:com.google.android.gms.dynamite_mapsdynamite@223616044@22.36.16 (190400-0):2) at js.t(:com.google.android.gms.dynamite_mapsdynamite@223616044@22.36.16 (190400-0):2) at js.u(:com.google.android.gms.dynamite_mapsdynamite@223616044@22.36.16 (190400-0):3) at js.e(:com.google.android.gms.dynamite_mapsdynamite@223616044@22.36.16 (190400-0):2) at jw.handleMessage(:com.google.android.gms.dynamite_mapsdynamite@223616044@22.36.16 (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)
应用仍可正常运行,但GoogleMap Compose的定位追踪功能异常:能成功获取手机位置,但在地图上显示该位置时会抛出上述异常。
Gradle依赖配置
implementation "com.google.maps.android:maps-compose:2.7.2" implementation "com.google.android.gms:play-services-maps:18.1.0"
我参考过相关帖子,但遇到的报错信息和现有问题不同。
异常触发场景
以下两种方式会触发上述异常:
- 将ViewModel作为FindParking Composable的默认参数
@Composable fun FindParking(findParkingViewModel: FindParkingViewModel = hiltViewModel()) { . . . }
- 在NavHost的Composable函数内部创建ViewModel
NavHost( navController = navController, startDestination = TopLevelDestination.Parking.route, modifier = modifier ) { composable(route = TopLevelDestination.Parking.route) { // ---> 在这里创建会触发异常 val findParkingViewModel: FindParkingViewModel = hiltViewModel() FindParking(findParkingViewModel) } }
当前临时解决方案
目前仅能通过在NavHost外部创建FindParkingViewModel来让定位功能正常工作,但Logcat仍会抛出该异常。应用相关代码结构包含SharedLocationManager、LocationRepository、FindParkingViewModel、FindParking Composable以及MapAppNavHost。
内容的提问来源于stack exchange,提问作者leo
相关产品推荐
相关产品推荐

