在Android上使用java本地接口时,我犯了两个愚蠢的错误,这会花费我很多时间。方法签名和实际调用之间的错配
有了这个方法ID:
jmethodID myMethod_methodID = env->GetMethodID(hello_Cls, "myMethod", "(ILjava/lang/String;Ljava/lang/String;I)Z");
我的第一个错误是使用
env->CallVoidMethod
调用它,我的第二个错误是在调用它像这样
jboolean rv = jenv->CallBooleanMethod(hello_obj, myMethod_methodID, myfirst_jstring, mysecond_jstring, 1);
这是明显缺失myMethod_methodID
和之间的参数。
我花了很长时间来跟踪这些错误,因为logcat中没有相关的输出,唯一的行为没有做任何事情(它甚至没有崩溃)。
因此,问题是:如何为这类错误获得更有意义的错误?
感谢您的信息! :)只是为了完成提供的信息:**这不适用于设备**,除非它们是根植的。 (我花了一些时间试图在设备上这样做,直到我明白了)。 – 2011-05-03 12:04:39
更正:根植设备让您启用标志,但检查并没有在模拟器中完成(即使您可以读取'D/AndroidRuntime(3455):D/AndroidRuntime(3455):>>>>>>>>> >>>>> AndroidRuntime START <<<<<<<<<<<<<< D/AndroidRuntime(3455):日志中的CheckJNI为ON') – 2011-05-03 16:08:46
@João您以前看过这两个链接吗?这篇文章:http://vilimpoc.org/blog/2010/09/23/hello-gdbserver-a-debuggable-jni-example-for-android/和sequoyah pligin:http://www.eclipse.org/ sequoyah/documentation/native_debug.php – Aleadam 2011-05-05 20:11:28