JAVA開發中,我們經常要用到JNI機制,去調用一些已經實現了的庫,以便代碼複用,不必重新實現。
NDK(Native Development Kit)。Android 常見開發方式是Java 封裝的庫,而這些庫的底層是由C 或 C++ 實現的。NDK 是Google 公司推出的幫助Android 開發者通過C/C++ 本地語言編寫應用的開發包,其包含C / C++ 頭文件,庫文件,示例代碼。目前NDK提供的庫函數功能有限,僅僅用於處理那些算法敏感的問題,比如圖像處理,大數據量計算等。當然,一些底層本身已經用本地代碼實現,我們也可以採用NDK技術運用到Android 開發中來。
網上有很多討論NDK 和 JNI 的區別的文檔,大家可以去看看。但是我認爲二者最大的區別在於 NDK 相較 JNI 多了一個 將 .so 文件打包到APK的工具。而JNI 並沒有提供打包功能,其只是將 .so 文件放到文件特定位置。而且NDK開發環境提供交叉編譯的功能,爲確保我們開發的應用能夠正確安裝在手機上,必須採用對應ARM架構來編譯,因此,在PC端開發必須採用交叉編譯工具。NDK 集成了交叉編譯器,並提供了相應的mk 文件隔離CPU、平臺、ABI 等差異,開發人員只需要簡單修改mk 文件(指出“哪些文件需要編譯”、“編譯特性要求”等),就可以創建出so。NDK 可以自動地將so 和Java 應用一起打包,極大地減輕了開發人員的打包工作。比較簡單的說,NDK是一套交叉編譯工具,它可以幫你把你用C或C++書寫的代碼,編譯爲.so(類似與win下的.dll)格式的文件,使你可以在你的Android程序當中用Java語言(JNI)調用這些代碼。
工慾善其事必先利其器,下面介紹下 NDK Cygwin CDT 集成開發環境的搭建。
一、Cygwin 安裝
1、官網下載Cygwin,安裝。
注意: 安裝過程中選擇鏡像站點。選擇要下載的站點,我用的是http://mirrors.kernel.org/,速度感覺還挺快,選擇後點下一步。
選擇要下載的包的名稱。爲了避免全部下載,這裏列出了後面開發NDK用得着的包:autoconf2.1、automake1.10、binutils、gcc-core、gcc-g++、gcc4-core、gcc4-g++、gdb、pcre、pcre-devel、gawk、make共12個包。
2、安裝好後。運行cygwin,在彈出的命令行窗口輸入:cygcheck -c cygwin命令,會打印出當前cygwin的版本和運行狀態,如果status是ok的話,則cygwin運行正常。 然後依次輸入gcc –version,g++ --version,make –version,gdb –version進行測試,如果都打印出版本信息和一些描述信息,非常高興的告訴你,你的cygwin安裝完成了!
二、配置NDK環境變量
下載 android-ndk-r8b-windows.zip 解壓放到 e 盤根目錄下,具體配置過程如下:
1、首先找到cygwin的安裝目錄,找到一個home\<你的用戶名>\.bash_profile文件,我的是:E:\cygwin\home\Administrator\.bash_profile。
有時候會碰到home文件夾下沒有子文件的情況。這時,直接 cp /cygwin/etc/skel/.bashrc ~ 即可。查看下 ~ 對應目錄。
2、打開bash_profile文件,添加NDK=/cygdrive/<你的盤符>/<android ndk 目錄> 例如:
NDK=/cygdrive/e/android-ndk-r8
export NDK
(NDK 這個名字是隨便取的,爲了方面以後使用方便,選個簡短的名字,然後保存)
3、打開cygwin,輸入cd $NDK,如果輸出上面配置的/cygdrive/e/android-ndk-r8信息,則表明環境變量設置成功了。
三、用NDK來編譯應用程序
1、 現在我們用安裝好的NDK來編譯一個簡單的程序吧,我們選擇ndk自帶的例子hello-jni,我的位於E:\android-ndk-r8\samples\hello-jni(根據你具體的安裝位置而定),
2、 運行cygwin,輸入命令cd /cygdrive/e/android-ndk-r8/samples/hello-jni,進入到E:\android-ndk-r8\samples\hello-jni目錄。
3、 輸入$NDK/ndk-build,執行成功後,它會自動生成一個libs目錄,把編譯生成的.so文件放在裏面。($NDK是調用我們之前配置好的環境變量,ndk-build是調用ndk的編譯程序)
4、 此時去hello-jni的libs目錄下看有沒有生成的.so文件,如果有,你的ndk就運行正常啦!
生成之後,這時候可以再用ndk的samples裏邊的例子生成eclipse工程了.
四、Eclipse 安裝CDT 插件
去Eclipse 官網查看CDT 插件,發現其提供兩種安裝方式。
1、直接下載安裝包
2、在線安裝
我們選擇在線安裝方式,在Eclipse ——》Help ——》 Install 選項中,添加地址http://download.eclipse.org/tools/cdt/releases/juno ,安裝完畢,OK!
五、配置Eclipse 中工程可直接編譯C/C++代碼成庫文件並構建整個android 工程
這個需要在Properties ——》 Builders 中進行設置,這樣每一個工程都得設置,個人感覺過程還是比較麻煩,還不如就直接開發好C代碼,編譯成SO庫文件後,然後再倒入JAVA工程中。大家有興趣的話,去網上GOOGLE下,照着做就OK了,這裏不再贅述。
參考方法地址:http://www.cnblogs.com/luxiaofeng54/archive/2012/03/13/2136982.html