鑒于有些同學(xué)想要學(xué)習(xí)NDK,但在網(wǎng)上很難找到一個(gè)講解比較清楚、按照步驟操作可以比較順利學(xué)會NDK的文章,所以寫了此篇教程。
一.準(zhǔn)備
需要Android NDK和windows下c、c++代碼的編譯器cygwin
NDK下載地址:
http://developer.android.com
cygwin下載地址:
http://www.cygwin.com/
二.配置
1. 安裝cygwin,并配置cygwin的環(huán)境變量。
例如:我安裝在D盤根目錄,那么在環(huán)境變量的path中添加:”C:\cytwin\bin;”
如下圖所示。
2
. 修改新生成文件夾中的“.bash_profile ”文件,用UE或editplus等文本編輯器打開,在最后增加:
NDK=/cygdrive/d/android-ndk-r9c
export NDK
然后保存關(guān)閉。
d/android-ndk-r9c表示ndk在d盤,如果你的ndk放到了其他盤符或路徑,例如放到e:\sdk目錄中,那么就改為e/sdk/android-ndk-r9c。
3、安裝eclipse插件
需要在Eclipse中安裝CDT插件,讓Eclipse可以編輯和編譯C/C++程序。安裝方法如下: 打開Eclipse(本教程所用的Eclipse版本為Helios),然后,在菜單中選擇“Help”?“Install New Software”,然后輸入需要安裝的CDT插件的路徑,如下圖所示:
三
.開始使用
1.在命令行窗口中進(jìn)入cygwin目錄,執(zhí)行cygwin.bat
2.進(jìn)入android-ndk中的samples文件夾里的某個(gè)項(xiàng)目文件夾,這里以hello-jni為例
進(jìn)入文件夾的方式與MS-DOS類似,用cd + 空格 + 盤符+ 路徑即可,例子見下圖
3.執(zhí)行$NDK/ndk-build編譯
file:///C:/Users/veaenPC/AppData/Local/YNote/Data/cleverboy@126.com/308a08bf3aa24d66a1519afac1d626a7/clipboard.png4.例子編譯成功后導(dǎo)入Eclipse中,編譯并部署測試如圖:
四
.如何在自己的工程中使用NDK
Android-ndk中的例子大家會編譯了,那么在自己現(xiàn)有的工程想要調(diào)用本地方法應(yīng)該怎么做呢?
1.在JAVA代碼中聲明native方法,
file:///C:/Users/veaenPC/AppData/Local/YNote/Data/cleverboy@126.com/faaba0c0a274401aab8776f89fc3fd75/clipboard.png
2.生成頭文件
然后需要生成C或C++的源碼,供JAVA調(diào)用。
可以按照J(rèn)NI的命名規(guī)則,也可以使用JDK的javah命令來生成,這里推薦使用javah,避免手動編寫出現(xiàn)錯(cuò)誤不好排查。
javah命令的使用方法見javah命令的幫助
file:///C:/Users/veaenPC/AppData/Local/YNote/Data/cleverboy@126.com/6d96701fe24b44cf97461a506957b75c/clipboard.png這里以我的測試工程為例,編寫好native方法后,編譯工程,eclipse會在bin目錄生成.class文件,在命令行中進(jìn)入bin目錄,執(zhí)行javah + 包名 + 類名,會在bin目錄下生成一個(gè)頭文件。
file:///C:/Users/veaenPC/AppData/Local/YNote/Data/cleverboy@126.com/5d430e0fc0dc46338350ca7225829978/clipboard.pngfile:///C:/Users/veaenPC/AppData/Local/YNote/Data/cleverboy@126.com/fc0e806a2acd4b869d565de93ba187d2/clipboard.png
這個(gè)文件就是JAVA與本地代碼交互的接口了,做C或C++的開發(fā)人員針對這個(gè)頭文件開發(fā)。
3. 編寫本地方法
在你的工程根目錄下創(chuàng)建jni文件夾,并從android-ndk\samples里的hello-jni文件夾中拷貝出一個(gè)Android.mk文件,粘貼到j(luò)ni文件夾中,同時(shí)剛才用javah生成的.h頭文件拷貝到j(luò)ni文件夾中。
首先創(chuàng)建一個(gè).c文件,實(shí)現(xiàn)頭文件中的方法,
file:///C:/Users/veaenPC/AppData/Local/YNote/Data/cleverboy@126.com/3ced7760f824484a846b9056c8229c68/clipboard.png然后編輯Android.mk文件,修改如下兩行,第一行修改為你的工程名,第二行修改為你的.c或.cpp文件名
LOCAL_MODULE := EX25_JNI
LOCAL_SRC_FILES := org_yuchen_demo_MainActivity.c
4.在java代碼中加載so文件
在java代碼中用靜態(tài)塊加載so文件,注意把so文件的“l(fā)ib”和“.so”擴(kuò)展名去掉。
file:///C:/Users/veaenPC/AppData/Local/YNote/Data/cleverboy@126.com/16a3cc5946fc4b65b72890d8d83d31e0/clipboard.png5.使用本地方法
接下來在java中可以調(diào)用本地方法進(jìn)行測試了。按照前面講解的方法編譯,打包部署測試,截圖如下:file:///C:/Users/veaenPC/AppData/Local/YNote/Data/cleverboy@126.com/cd3dfb8947e145caa0d027050cd4397b/clipboard.png
最后附上一個(gè)Demo:
這個(gè)demo很簡單,只會顯示用c語言寫的返回的字符串
|
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
