【发布时间】:2012-02-13 06:27:45
【问题描述】:
我花了一些时间在我的应用中使用 Android 模拟器检查 checkjni 模式。 尽管如此(在http://android-developers.blogspot.com/2011/11/jni-local-reference-changes-in-ics.html 中)如果 debuggable="true" & targetSdkVersion 至少是 Ice Cream Sandwich(在 AndroidManifest.xml 文件中),CheckJNI 默认是打开的 - CheckJNI 的调试输出转储(警告和错误) ) 仍然打印在 DDMS 中,即使我使用 Gingerbread 值并将其安装在 Gingerbread 模拟器上。
我发现的唯一区别是冰淇淋三明治模拟器上的 CheckJNI 警告(无论我的 AndroidManifest.xml 文件中的值是什么)将导致应用程序崩溃并出现相应的警告 - 而它们只会在 Gingerbread 模拟器中打印(我已经测试了用于本地引用的 DeleteGlobalRef 以引发此警告)。
根据AndroidManifest.xml打印了两个非信息日志-但CheckJNI模式的日志不受影响。
这是日志 -
#在 ICS 模拟器上 安装应用后:
01-19 08:43:01.491: D/AndroidRuntime(32): CheckJNI is ON
Loading the app:
01-19 08:32:26.617: D/dalvikvm(590): Not late-enabling CheckJNI (already on)
(The last line is printed only when debuggable="true")
01-19 08:32:27.066: I/dalvikvm(590): Turning on JNI app bug workarounds for target SDK version 10...
(The last line is printed only when targetSdkVersion=10)
关于错误代码(崩溃):
01-19 08:37:56.176: W/dalvikvm(651): JNI WARNING: DeleteGlobalRef on non-global 0x41339550 (type=1)
...
01-19 08:37:56.187: E/dalvikvm(651): VM aborting
01-19 08:37:56.187: A/libc(651): Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1)
#在姜饼上:
安装应用后:
01-19 08:43:01.491: D/AndroidRuntime(32): CheckJNI is ON
Loading the app:
没有重要的日志
关于错误代码(没有崩溃):
01-19 08:45:20.079: W/dalvikvm(304): JNI: DeleteGlobalRef(0x40608718) failed to find entry (valid=1)
所以我的问题是我应该如何打开/关闭它 - 以及它在打开时应该如何以不同的方式影响应用程序(或日志)?
谢谢。
【问题讨论】:
标签: android android-emulator java-native-interface