由於筆者一直從事c++的開發,因此轉移到android平台時不免需要使用jni的模式進行開發。
本人使用的ndk版本為r5b,該目錄下面內建了一個hello-jni的sample程式,在匯入該project到eclipse的時候破費周折,
按照網上教程均無法奏效,後來查閱官方文檔,才順利完成匯入,編譯。
(eclipse + ndk + cygwin平台的搭建請參閱該文檔:windows系統整合cygwin與Eclipse與使用Android NDK r5(支援OpenglES),整合(轉)
)
官方文檔:
In Eclipse:
- Click File > New Android Project...
- Select the Create project from existing source
radio button.
- Select any API level above Android 1.5.
- In the Location
field, click Browse...
and select
the <ndk-root>/samples/hello-jni
directory.
- Click Finish
.
之後就可以編譯了。
如果想自己建一個jni工程也很簡單,建立一個新的android工程,然後在工程目錄下面手動建立一個"jni"目錄(與src目錄平級),然後在該目錄下面建立一個Android.mk(android的makefile)和你的c檔案或者cpp檔案,在函式宣告和調用方面可以參照sample程式hello-jni,特別注意的是函數名字需要遵循"Java_packetname_projectname_functionname"的規則,否則運行期間會報連結錯誤。
編寫c或者c++程式時的一個小的注意事項:
1.c代碼,如執行個體中那樣使用env參數,(*env)->NewStringUTF(env, "Hello from JNI!");
2.c++代碼,需要這樣調用 env->NewStringUTF("Hello from JNI!");
原因在於jni.h中對JNIEnv的聲明針對c和c++是不同的,如下:
#if defined(__cplusplus)
typedef _JNIEnv JNIEnv;
#else
typedef const struct JNINativeInterface* JNIEnv;
#endif