鑑於有些同窗想要學習NDK,但在網上很難找到一個講解比較清楚、按照步驟操做能夠比較順利學會NDK的文章,因此寫了此篇教程。java
一.學習本篇教程須要具有的條件:android
1. 瞭解JAVA中JNI的概念、好處以及使用方法,網上不少介紹,這裏就不重複了。c++
2. 你的電腦配置好了Android應用開發環境,即:JAVA、Eclipse、ADT和Android SDK。windows
二.準備bash
須要Android NDK和windows下c、c++代碼的編譯器cygwineclipse
android-ndk-r6-windows.zip下載地址:http://u.115.com/file/clvyxr0b編輯器
cygwin下載地址:http://u.115.com/file/clvy46eb學習
三.配置測試
1. 解壓縮NDK和cygwin,並配置cygwin的環境變量。ui
例如:我解壓縮到D盤根目錄,那麼在環境變量的path中添加:」D:\cytwin\bin;」,
以下圖所示。
2. 在命令行中進入cygwin目錄,並執行cygwin.bat,若是你不是用Administrator帳號登陸的系統,那麼會在cygwin\home\文件夾中生成一個以你的登陸名命名的新的文件夾。
3. 修改新生成文件夾中的「.bash_profile 」文件,用UE或editplus等文本編輯器打開,在最後增長:
NDK=/cygdrive/d/android-ndk-r6
export NDK
而後保存關閉。
d/android-ndk-r6表示ndk在d盤,若是你的ndk放到了其餘盤符或路徑,例如放到e:\sdk目錄中,那麼就改成e/sdk/android-ndk-r6。
(若是是Administrator帳號登陸,直接修改Administrator文件夾中的文件。)
四.開始使用
1.在命令行窗口中進入cygwin目錄,執行cygwin.bat
2.進入android-ndk中的samples文件夾裏的某個項目文件夾,這裏以hello-jni爲例
進入文件夾的方式與MS-DOS相似,用cd + 空格 + 盤符+ 路徑便可,例子見下圖
3.執行$NDK/ndk-build編譯
4.例子編譯成功後導入Eclipse中,編譯並部署測試如圖:
五.如何在本身的工程中使用NDK
Android-ndk中的例子你們會編譯了,那麼在本身現有的工程想要調用本地方法應該怎麼作呢?
1.在JAVA代碼中聲明native方法,
2.生成頭文件
而後須要生成C或C++的源碼,供JAVA調用。
能夠按照JNI的命名規則,也可使用JDK的javah命令來生成,這裏推薦使用javah,避免手動編寫出現錯誤很差排查。
javah命令的使用方法見javah命令的幫助
這裏以個人測試工程爲例,編寫好native方法後,編譯工程,eclipse會在bin目錄生成.class文件,在命令行中進入bin目錄,執行javah + 包名 + 類名,會在bin目錄下生成一個頭文件。
這個文件就是JAVA與本地代碼交互的接口了,作C或C++的開發人員針對這個頭文件開發。
3. 編寫本地方法
在你的工程根目錄下建立jni文件夾,並從android-ndk\samples裏的hello-jni文件夾中拷貝出一個Android.mk文件,粘貼到jni文件夾中,同時剛纔用javah生成的.h頭文件拷貝到jni文件夾中。
首先建立一個.c文件,實現頭文件中的方法,
而後編輯Android.mk文件,修改以下兩行,第一行修改成你的工程名,第二行修改成你的.c或.cpp文件名
LOCAL_MODULE := EX25_JNI
LOCAL_SRC_FILES := org_yuchen_demo_MainActivity.c
4.在java代碼中加載so文件
在java代碼中用靜態塊加載so文件,注意把so文件的「lib」和「.so」擴展名去掉。
5.使用本地方法
接下來在java中能夠調用本地方法進行測試了。按照前面講解的方法編譯,打包部署測試,截圖以下: