在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