我的Android应用程序发生了奇怪的崩溃

时间:2011-06-04 15:39:56

标签: android android-ndk

我使用最新Android NDK附带的新native_app_glue代码完全用C编写了一个Android应用程序。除了一件奇怪的事情外,一切正常。当我关闭我的应用程序并再次启动它时,我的.so共享对象崩溃了。我使用addr2line找出崩溃的函数,但它没有任何意义,因为它总是一个导致崩溃的不同函数,当然,它也是第一次正常工作。所以它必须是别的东西。

是否有人知道可能导致此行为的原因?正如我所说,行为是这样的:

1)第一次开始 - >应用总是很好 2)第二次开始 - >应用程序崩溃 3)第三次开始 - >应用程序再次正常工作 4)第四次开始 - >应用程序再次崩溃 5)第五次开始 - >再次正常工作 6)第六次 - >紧急 等等。

我不知道那里有什么问题。也许我的应用程序没有正确关闭?但我正在处理和处理两个术语消息(APP_CMD_TERM_WINDOW和APP_CMD_DESTROY)。我真的不知道那里有什么问题......

感谢您的帮助!

编辑:这是崩溃日志:

I/DEBUG   (   31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
I/DEBUG   (   31): Build fingerprint: 'generic/sdk/generic:2.3.1/GSI11/93351:eng/test-keys'
I/DEBUG   (   31): pid: 1105, tid: 1114  >>> com.example.testapp <<<
I/DEBUG   (   31): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000058
I/DEBUG   (   31):  r0 8382746d  r1 00000000  r2 00000058  r3 00000058
I/DEBUG   (   31):  r4 00000000  r5 8382746d  r6 00242920  r7 00000554
I/DEBUG   (   31):  r8 00245150  r9 001ec8e0  10 839651dc  fp 00000000
I/DEBUG   (   31):  ip 839654e0  sp 435fc2b0  lr 8381c78f  pc 83861858  cpsr 00000030
I/DEBUG   (   31):          #00  pc 00061858  /data/data/com.example.testapp/lib/libtestapp.so
I/DEBUG   (   31):          #01  pc 0001c78a  /data/data/com.example.testapp/lib/libtestapp.so
I/DEBUG   (   31):          #02  pc 0001d7d4  /data/data/com.example.testapp/lib/libtestapp.so
I/DEBUG   (   31):          #03  pc 000ab1fa  /data/data/com.example.testapp/lib/libtestapp.so
I/DEBUG   (   31):          #04  pc 000fc9e2  /data/data/com.example.testapp/lib/libtestapp.so
I/DEBUG   (   31):          #05  pc 00011a7c  /system/lib/libc.so
I/DEBUG   (   31):          #06  pc 00011640  /system/lib/libc.so

2 个答案:

答案 0 :(得分:1)

当您尝试重新启动应用时,您的库可能仍然已加载。我知道两次加载相同的lib会导致崩溃。

我使用的解决方案与您加载lib的活动相同,使用第二个相同的loadlibrary覆盖OnDestroy。当活动结束时,这将使本机方崩溃(可能最好在启动器活动上加载您的库)。这样,当你重新启动应用程序时,你会有一个干净的名单。

答案 1 :(得分:0)

从您的转储中,似乎问题不在于任何native_app_glue调用中,而是在源代码中。

最初,如果它正在崩溃调用第三方函数,很可能,你的后面跟踪中至少会有一个libc.so引用,而是第一个引用是你自己的库。请你发布堆栈信息吗?没有看到源代码,我会打赌某种NULL指针引用。