android jni vm aborting,Android的CheckJNI:如何关闭/打开它(在模拟器上)? 文档似乎有问题...

我花了一些时间使用我的应用程序的Android模拟器检查checkjni模式。 尽管如此,如果debuggable =“true”&targetSdkVersion,则在http://android-developers.blogspot.com/2011/11/jni-local-reference-changes-in-ics.html中写入CheckJNI。至少是Ice Cream Sandwich(在AndroidManifest.xml文件中) – 即使我使用Gingerbread值并将其安装在Gingerbread模拟器上,CheckJNI的调试输出转储(警告和错误)仍会打印在DDMS中。

我发现的唯一区别是Ice Cream三明治模拟器上的CheckJNI警告(无论我的AndroidManifest.xml文件中的值是什么)都会导致应用程序崩溃并引发受到尊重的警告 – 而它们只会打印在姜饼模拟器(我测试了一个用于本地引用的DeleteGlobalRef以引发此警告)。

根据AndroidManifest.xml打印两个非信息日志 – 但CheckJNI模式的日志不受影响。

这是日志 –

#On 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)

#On姜饼:

安装应用程序后:

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)

所以我的问题是我应该如何打开/关闭它 – 它应该如何以不同的方式影响应用程序(或日志)?

谢谢。

模拟器很特别。 CheckJNI始终在模拟器中打开。

更令您困惑的是,您显示的DeleteGlobalRef警告不是CheckJNI pre-ICS的一部分。 在旧的本地/全局参考实现中,它基本上是一些调试输出。 作为ICS工作的一部分,它被转移到CheckJNI,它可能一直都是。

所以你所看到的所有行为都是字面意义上的“预期”,即使它有点令人惊讶!

如果您查看http://developer.android.com/guide/practices/design/jni.html,您可能可以在模拟器中关闭CheckJNI,但我不确定您为什么要这样做,所以我我不会再鼓励你了! 您真正想要做的是修复您拥有的任何JNI错误,以确保您的应用程序继续在未来的Android版本上运行:-)

(我对我的“JNI警告:非全局0x41339550(types= 1)上的DeleteGlobalRef”诊断的质量感到失望 – 我会看到比“非全局”更具体,并删除“type = 1“,至少应与的枚举中的一个引用types的数值匹配。)

如果你在这个区域闲聊,请参阅http://code.google.com/p/android/issues/detail?id=21674 —全局参考的向后兼容性不起作用; 只有本地参考。 因此,如果将targetSdkVersion设置为低不适合您,可能是因为我们无论如何都要分发间接全局引用(即使本地引用是直接的)。

在模拟器上关闭CheckJNI的步骤(测试并为我工作) –

1)

adb shell停止

adb shell setprop dalvik.vm.checkjni false

adb shell启动

2)让仿真器在屏幕上重启。

3)安装apk。 在DDMS日志中,您应该看到CheckJNI为OFF。

默认情况下,在模拟器中的每个应用程序安装中,它都显示CheckJNI为ON。

此链接提供了更多信息: http : //developer.android.com/training/articles/perf-jni.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值