android Jni NDK開發環境搭建及其簡單實例的編寫
由於工作需要,需要采用開發想要的JNI,由於之前沒有接觸過安卓的開發,所以更加網上的帖子,學習了下。遇到了些問題,然后總結下學習過程中的問題和開發流程
首先、Jni我的理解,屬於一個中間的東西,如果把只做linux 的話,他就是linux的應用程序,但是如果做安卓的話,它就是中間層了(用於java語言調用C語言的接口)。我們說說
開發JNI的開發環境的搭建吧。
第一:我們用windows平台開發
准備工作:
1、我們安卓開發都需要的elipse ,包括SDK,首先要能夠開發APK軟件。
2、 我們需要一個如同linux 的環境,需要編譯的環境,我們采用Cygwin(注意:1.7版本以上),否則不行。
3 、我們需要NDK工具包,可以通過安卓官網下載
1.1、cygwin的安裝
下載地址:http://www.cygwin.com/
也可以選擇我下載好的地址:http://pan.baidu.com/s/1b1UQE
1.1.1、 可以選擇從網上下載最新的安裝也可以選擇我下載好的安裝
1.1.2、 雙擊cygwin1.7.1/cygwin1.7.1.exe 選擇Install form LocalDirectory
1.1.3、 選擇安裝的路徑
1.1.4、 選擇的下載之后的路徑tmp
1.1.5、 點擊下一步直到安裝完成。
1.1.6、雙擊桌面的圖標,看是否能夠進去。有沒有問題(輸入gcc 等命令)。
1.2、Android的NDK安裝
下載地址:http://developer.android.com/tools/sdk/ndk/index.html
1.2.1、將android-ndk-r9b-windows-x86.zip解壓到任意目錄(記住即可)
如:E:\android\android-ndk-r9b
1.2.2、設置環境變量(有的方法是通過/home/.bashrc設置的也可以),我就直接設置。右鍵點擊我的電腦-屬性(選擇高級選項卡,點擊環境變量設置),然后選擇新建
1.2.3、重新關掉cygwin,然后打開,輸入ehco$ndk 看是否顯示E:\android\android-ndk-r9b目錄,如果可以則設置成功
1.2.4、編譯一個簡單的實例 如下圖,如果生成*.so 就說明沒有問題。
第二:安卓JNI實例說明
1、 用eclips 新建一個android 工程
2、 修改Activity
2.1 加入: static { //注意你生成的庫文件名稱(如libhellojni.so),去掉lib和.so即可。 System.loadLibrary("hellojni");
} 2.2加入: /* * JNI中的方法 * */ public static native int open(int fd); public static native int close(int fd); public static native String read(); 2.3 添加一個按鈕:在onCreate方法中 Button tb=(Button)findViewById(R.id.button1); tb.setOnClickListener(new OnClickListener() { public void onClick(View v) { /*調用Jni */ open(2); close(2); tv.setText(read());//修改文本框中的內容 }});
|
3、 通過javah生成.h文件(用於編譯jni的程序)
3.1 切換到項目目錄 #cd "C:\Documents and Settings\gonglinyuan\workspace\HelloJni" #cd ./bin/class 3.2 執行java –h命令 #javah -jni com.cem.hellojni.HelloActivity |
4、 編寫jni代碼
4.1、在工程目錄中建立jni文件夾 #mkdir jni #cp ./bin/class/com_cem_hellojni_HelloActivity.h ./jni 4.2、刷新eclipse的目錄,新建com_cem_hellojni_HelloActivity.c 文件,實現頭文件中的代碼,如下面代碼
|
5、 編寫Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
TARGET_PLATFORM := android-4 LOCAL_MODULE := hellojni LOCAL_SRC_FILES := com_cem_hellojni_HelloActivity.c LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
|
6、 編寫Application.mk
APP_ABI := armeabi armeabi-v7a x86 |
7、 通過ndk-bulid編譯生成庫文件
# cd "C:\Documents and Settings\gonglinyuan\workspace\HelloJni" #$ndk/ ndk-build Android NDK: WARNING: APP_PLATFORM android-17 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml [armeabi] Compile thumb : hellojni <= com_cem_hellojni_HelloActivity.c [armeabi] SharedLibrary : libhellojni.so [armeabi] Install : libhellojni.so => libs/armeabi/libhellojni.so [armeabi-v7a] Compile thumb : hellojni <= com_cem_hellojni_HelloActivity.c [armeabi-v7a] SharedLibrary : libhellojni.so [armeabi-v7a] Install : libhellojni.so => libs/armeabi-v7a/libhellojni.so [x86] Compile : hellojni <= com_cem_hellojni_HelloActivity.c [x86] SharedLibrary : libhellojni.so [x86] Install : libhellojni.so => libs/x86/libhellojni.so
|
8、 生成APK文件,測試