此处映射本机崩溃(SIGABRT)



我们正在调查另一个团队开发的一款应用程序,该应用程序在安卓系统上与HereMaps(HERE SDK导航版,navigate-4.10.2.0.7878(相关,具有以下堆栈:

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
pid: 0, tid: 0 >>> com.mydomain.myapp <<<
backtrace:
#00  pc 0000000000051010  /apex/com.android.runtime/lib64/bionic/libc.so (abort+164)
#00  pc 0000000000e0143c  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/base.apk!libheresdk.so
#00  pc 0000000000e0158c  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/base.apk!libheresdk.so
#00  pc 0000000000e014f4  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/base.apk!libheresdk.so
#00  pc 0000000000e01478  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/base.apk!libheresdk.so
#00  pc 0000000000debfe4  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/base.apk!libheresdk.so
#00  pc 000000000144cc84  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/base.apk!libheresdk.so
#00  pc 00000000014035bc  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/base.apk!libheresdk.so
#00  pc 00000000013fa668  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/base.apk!libheresdk.so
#00  pc 000000000155cff0  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/base.apk!libheresdk.so
#00  pc 00000000011273f8  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/base.apk!libheresdk.so (Java_com_here_sdk_navigation_VisualNavigator_disposeNativeHandle+480)
#00  pc 0000000000042020  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/oat/arm64/base.odex (art_jni_trampoline+96)
#00  pc 000000000020988c  /apex/com.android.art/lib64/libart.so (nterp_helper+1948)
#00  pc 0000000000b6999c  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/oat/arm64/base.vdex (com.here.sdk.navigation.VisualNavigator.access$000)
#00  pc 0000000000209124  /apex/com.android.art/lib64/libart.so (nterp_helper+52)
#00  pc 0000000000b69974  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/oat/arm64/base.vdex (com.here.sdk.navigation.VisualNavigator$1.disposeNative)
#00  pc 0000000000073c6c  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/oat/arm64/base.odex (com.here.NativeBase$DisposableReference.dispose+156)
#00  pc 000000000020a0a0  /apex/com.android.art/lib64/libart.so (nterp_helper+4016)
#00  pc 00000000009a3834  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/oat/arm64/base.vdex (com.here.NativeBase.cleanUpQueue+26)
#00  pc 0000000000209124  /apex/com.android.art/lib64/libart.so (nterp_helper+52)
#00  pc 00000000009a380e  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/oat/arm64/base.vdex (com.here.NativeBase.access$100)
#00  pc 0000000000209124  /apex/com.android.art/lib64/libart.so (nterp_helper+52)
#00  pc 00000000009a37be  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/oat/arm64/base.vdex (com.here.NativeBase$DisposableReference.<init>+22)
#00  pc 000000000020a044  /apex/com.android.art/lib64/libart.so (nterp_helper+3924)
#00  pc 00000000009a37ca  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/oat/arm64/base.vdex (com.here.NativeBase$DisposableReference.<init>)
#00  pc 000000000020a748  /apex/com.android.art/lib64/libart.so (nterp_helper+5720)
#00  pc 00000000009a37fc  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/oat/arm64/base.vdex (com.here.NativeBase.<init>+28)
#00  pc 000000000020a044  /apex/com.android.art/lib64/libart.so (nterp_helper+3924)
#00  pc 00000000009ac7f8  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/oat/arm64/base.vdex (com.here.sdk.core.threading.RunnableImpl.<init>+10)
#00  pc 00000000002cdd64  /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548)
#00  pc 00000000003d5660  /apex/com.android.art/lib64/libart.so (art::JNI<false>::CallNonvirtualVoidMethodV(_JNIEnv*, _jobject*, _jclass*, _jmethodID*, std::__va_list)+492)
#00  pc 00000000003d4ab4  /apex/com.android.art/lib64/libart.so (art::JNI<false>::NewObjectV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+736)
#00  pc 0000000000e0e858  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/base.apk!libheresdk.so
#00  pc 0000000000e37fac  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/base.apk!libheresdk.so
#00  pc 0000000000e37a5c  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/base.apk!libheresdk.so
#00  pc 000000000140dad0  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/base.apk!libheresdk.so
#00  pc 000000000144c5e8  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/base.apk!libheresdk.so
#00  pc 000000000144d2bc  /data/app/~~yFKezl3wu05hiNZ1aIFJIQ==/com.mydomain.myapp-sfkAGrmiHUTbEivXLD8EKQ==/base.apk!libheresdk.so
#00  pc 00000000000b2fd0  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+264)
#00  pc 0000000000052834  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)

编辑:

在我们的代码中进行了一些重构和清理操作之后,我们已经达到了一个干净的状态,我们确信没有任何泄漏;我们已经使用LeakCanary来调查并删除所有这些,但原生崩溃仍然存在。

因此,我们试图回到基础,我们从github克隆了HEREMaps Navigate Samples,我们发现在Navigation Sample中没有任何本地崩溃,但也有一个唯一的活动,即在整个应用程序中死亡的HEREMaps实例引用。

为了复制类似的用例,我们在Sample的MainActivity之前添加了一个活动,并尝试启动该活动并返回到第一个活动,以显示库在资源释放方面的行为。

只有从开始的类打开和关闭MainActivity才不会发生任何本机崩溃,这也是因为VisualNavigator(似乎是回溯中发生本机崩溃的类(由其委托(又名Listeners(保留=>setupListeners() in NavigationExample。因此,当MainActivity调用onDestroy时,我们还删除了所有侦听器,通过这种方式,我们总是看到与应用程序中相同的本地崩溃,从MainActivity返回到启动一个。

注意:为了能够始终再现本机崩溃,我们使用LeakCanary,因为当MainActivity被破坏时,库会强制GC;如果我们移除它,GC操作将由系统随机完成。

链接:

  1. 我们版本的HEREMaps导航SDK样本经过修改,可在github上重现原生崩溃
  2. 样品碰撞视频:https://youtube.com/shorts/edY-TRvWh3I

所以这里的大问题是:我们是否实现了错误的HEREMAPSDK集成(和管理实例发布(,或者这个本机崩溃在库中,必须由库所有者修复?

尝试找到一种使VisualNavigator持久化的方法:使用StopRendering((可以,但不要使VisualNavigator为空。

当我太快取消路线时,我不得不经历同样的问题,尽管在最近的更新中情况变得更糟,只是在停止导航时崩溃,这修复了它

HERE SDK开发人员指南中有一章介绍了如何停止导航。建议调用stopRendering()。在您的示例应用程序中,当中间活动被销毁时,您似乎没有调用visualNavigator.stopRendering()。试着称之为

在设备的开发者选项菜单中;不要保持活动"以模拟这样的场景。

最新更新