編寫和除錯Android下JNI程式流程

王慶發表於2013-09-04

1,切換到Android目錄下bin/classes,使用javah命令生成jni所需的標頭檔案,命令類似於:javah com.xxx.ooo,其中,com.xxx為package名稱,ooo為包含native方法的class名稱,不需要.class字尾。

2,在專案的主目錄下生成名為jni 的資料夾,將生成的.h標頭檔案拷貝到該目錄,如果覺得該檔案的名稱過長,可以進行重新命名,例如可以將com.xxx.ooo.h重新命名為test.h。

3,在jni目錄下新建test.c檔案,包含test.h標頭檔案,在其中將.h檔案的方法宣告拷貝到.c中,然後進行程式碼的編寫。

4,在該目錄新建Android.mk檔案,其格式大致如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES := test.c
include $(BUILD_SHARED_LIBRARY)

5,使用ndk-buiild進行編譯,如果不在Application.mk中進行APP_ABI設定,預設會在obj/local/armeabi目錄下生成libtest.so動態庫。

6,修改專案中AndroidManifest.xml檔案,在application標籤下新增android.debuggable="true"屬性,以便可以使用ndk-gdb對生成的動態庫進行除錯。

7,執行Android示例程式,在呼叫jni方法的地方新增斷點,在專案的主目錄執行ndk-gdb,在ndk-gdb新增除錯斷點,當程式執行至jni呼叫位置時,就可以進行ndk-gdb除錯了。

 

有關JNI中如果進行引數的傳遞和接收,請參看如下文章:

http://www.cnblogs.com/tianshuai11/archive/2012/03/26/2477175.html

http://www.linuxidc.com/Linux/2012-11/74905.htm

http://blog.sina.com.cn/s/blog_5e357d2d01012cu3.html

相關文章