IndirectReferenceTable Android JNI崩溃

时间:2018-04-08 09:41:25

标签: android java-native-interface

我试图解决崩溃问题:

1:

  #00  pc 000000000006a548  /system/lib64/libc.so (tgkill+8)
  #01  pc 0000000000067cd8  /system/lib64/libc.so (pthread_kill+68)
  #02  pc 0000000000024b78  /system/lib64/libc.so (raise+28)
  #03  pc 000000000001f318  /system/lib64/libc.so (abort+60)
  #04  pc 000000000043471c  /system/lib64/libart.so (_ZN3art7Runtime5AbortEv+324)
  #05  pc 0000000000137224  /system/lib64/libart.so (_ZN3art10LogMessageD2Ev+3136)
  #06  pc 0000000000131cc8  /system/lib64/libart.so (_ZN3art7BarrierD2Ev+296)
  #07  pc 0000000000469364  /system/lib64/libart.so (_ZN3art10ThreadList4DumpERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEE+212)
  #08  pc 0000000000434804  /system/lib64/libart.so (_ZN3art7Runtime5AbortEv+556)
  #09  pc 0000000000137224  /system/lib64/libart.so (_ZN3art10LogMessageD2Ev+3136)
  #10  pc 000000000027165c  /system/lib64/libart.so (_ZN3art22IndirectReferenceTable3AddEjPNS_6mirror6ObjectE+372)
  #11  pc 00000000022ef904  /system/framework/arm64/boot.oat

2:

  #00  pc 000000000006a548  /system/lib64/libc.so (tgkill+8)
  #01  pc 0000000000067cd8  /system/lib64/libc.so (pthread_kill+68)
  #02  pc 0000000000024b78  /system/lib64/libc.so (raise+28)
  #03  pc 000000000001f318  /system/lib64/libc.so (abort+60)
  #04  pc 000000000043471c  /system/lib64/libart.so (_ZN3art7Runtime5AbortEv+324)
  #05  pc 0000000000137224  /system/lib64/libart.so (_ZN3art10LogMessageD2Ev+3136)
  #06  pc 0000000000131cc8  /system/lib64/libart.so (_ZN3art7BarrierD2Ev+296)
  #07  pc 0000000000469364  /system/lib64/libart.so (_ZN3art10ThreadList4DumpERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEE+212)
  #08  pc 0000000000434804  /system/lib64/libart.so (_ZN3art7Runtime5AbortEv+556)
  #09  pc 0000000000137224  /system/lib64/libart.so (_ZN3art10LogMessageD2Ev+3136)
  #10  pc 000000000027165c  /system/lib64/libart.so (_ZN3art22IndirectReferenceTable3AddEjPNS_6mirror6ObjectE+372)
  #11  pc 000000000053e224  /system/lib64/libart.so (artQuickProxyInvokeHandler+1044)
  #12  pc 0000000000127b74  /system/lib64/libart.so (art_quick_proxy_invoke_handler+84)
  #13  pc 0000000000fda44c  /data/app/package_name-1/oat/arm64/base.odex

3:

 #00  pc 000000000006a548  /system/lib64/libc.so (tgkill+8)
  #01  pc 0000000000067cd8  /system/lib64/libc.so (pthread_kill+68)
  #02  pc 0000000000024b78  /system/lib64/libc.so (raise+28)
  #03  pc 000000000001f318  /system/lib64/libc.so (abort+60)
  #04  pc 000000000043471c  /system/lib64/libart.so (_ZN3art7Runtime5AbortEv+324)
  #05  pc 0000000000137224  /system/lib64/libart.so (_ZN3art10LogMessageD2Ev+3136)
  #06  pc 0000000000131cc8  /system/lib64/libart.so (_ZN3art7BarrierD2Ev+296)
  #07  pc 0000000000469364  /system/lib64/libart.so (_ZN3art10ThreadList4DumpERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEE+212)
  #08  pc 0000000000434804  /system/lib64/libart.so (_ZN3art7Runtime5AbortEv+556)
  #09  pc 0000000000137224  /system/lib64/libart.so (_ZN3art10LogMessageD2Ev+3136)
  #10  pc 000000000027165c  /system/lib64/libart.so (_ZN3art22IndirectReferenceTable3AddEjPNS_6mirror6ObjectE+372)
  #11  pc 000000000036f1e8  /system/lib64/libart.so (_ZN3art3JNI12NewByteArrayEP7_JNIEnvi+416)

我查看了IndirectReferenceTable的源代码( https://android.googlesource.com/platform/art/+/kitkat-dev/runtime/indirect_reference_table.cc) 而且由于表溢出似乎崩溃了。

据我所知,我正确删除了所有本地引用。

问题是否可能与本地参考无关?任何假设?

1 个答案:

答案 0 :(得分:1)

当我开始使用pop / push本地框架JNI API时,该应用程序停止报告崩溃报告。

所以我认为它以某种方式泄露了本地参考文献,但我还没有理解。

在我的设备上,应用程序没有崩溃,所以这一点可能与JNI的所有实现无关。