Android - 如何启用CheckJni进行NDK开发?

vam*_*ibm 5 debugging java-native-interface native-methods android-ndk

有人可以告诉我,如果我在这里遗失了什么吗?我在shell中尝试以下命令.

$ ./adb shell stop $ ./adb shell setprop dalvik.vm.checkjni true $ ./adb shell start

但是当我将apk安装到设备上时,Logcat总是会显示"CheckJNI is OFF".在eclipse中我还需要做些什么来启用XCheck:Jni标志吗?

感谢BD的任何帮助

Pla*_*ity 7

有四种不同的情况,一种用于root设备,一种用于仿真器,一种用于常规设备,一种用于root或常规设备.


在root设备上我能够让它工作如下:

在adb中:

adb shell
Run Code Online (Sandbox Code Playgroud)

在这个shell之后推出:

su
stop
setprop dalvik.vm.checkjni true
start
Run Code Online (Sandbox Code Playgroud)

重新启动此设备并在启动后,我看到日志消息:

CheckJNI is ON
Run Code Online (Sandbox Code Playgroud)



对于其他案例,请参阅官方文档中的一些理论:

有几种方法可以启用CheckJNI.

如果您正在使用模拟器,则默认情况下CheckJNI处于启用状态.

如果您有root设备,则可以使用以下命令序列在启用CheckJNI的情况下重新启动运行时:

adb shell stop
adb shell setprop dalvik.vm.checkjni true
adb shell start
Run Code Online (Sandbox Code Playgroud)

在其中任何一种情况下,当运行时启动时,您将在logcat输出中看到类似的内容:

D AndroidRuntime: CheckJNI is ON
Run Code Online (Sandbox Code Playgroud)

如果您有常规设备,则可以使用以下命令:

adb shell setprop debug.checkjni 1
Run Code Online (Sandbox Code Playgroud)

这不会影响已经运行的应用程序,但从那时起启动的任何应用程序都将启用CheckJNI.(将属性更改为任何其他值或只是重新启动将再次禁用CheckJNI.)在这种情况下,您将在下次应用程序启动时在logcat输出中看到类似的内容:

D Late-enabling CheckJNI
Run Code Online (Sandbox Code Playgroud)

您还可以在应用程序的清单中设置android:debuggable属性,以便为您的应用启用CheckJNI.请注意,Android构建工具将自动为某些构建类型执行此操作.