http://whbzju.github.io/blog/2013/06/01/android-jni-config/ html
JUN 1ST, 2013 | COMMENTS java
JNI是Java Native Interface的縮寫,即「Java本地調用」,它是Java世界和Native世界的中介橋樑。其中Native世界通常指C/C++的世界。衆所周知,Java是一種跨平臺的語言,即Java編寫的應用與平臺無關。可是,計算機的世界在Java出現以前已經發展了好久,有不少優秀健壯的代碼能夠複用。好比Linux下的好多驅動模塊、文件系統等。Java若去從新實現這些功能,未免費力不討好,落下重複造輪子的名聲。經過JNI技術,使用這些Native的模塊,便成了一個折中的辦法。同時,Java的世界依靠虛擬機構建,而虛擬機是native語言實現,而且虛擬機運行在具體的平臺上,因此虛擬機自己是沒法作到平臺無關。經過JNI技術,可能作到在Java層的平臺無關,即在Java層,底層的細節徹底被屏蔽掉了。綜合來說,JNI技術一直支撐這Java世界,只不過咱們平時接觸的較少。 linux
在Android的世界裏,不容許純C/C++的程序出現,可是它支持JNI,經過JNI來實現java和C/C++的交互。所以,JNI對於須要接觸到Android源碼、底層驅動、圖形圖像等領域的開發者來說異常重要。 android
在Android中,Native語言實現的代碼最終要編譯成*.so動態庫的方式,供java層調用,目前有兩種途徑實現。 git
在Mac下,配置NDK的環境十分簡便,你只須要去官網下載ndk包,前提是你已經安裝好ndk須要的工具,通常你若是安裝過xcode,基本的環境都會有。解壓縮到任意一個目錄下,把該目錄加到你的PATH中便可。好比個人: github
在~/.bash_profile中把路徑加入PATH,若是沒有,能夠建立一個.bash_profile,在最後加入下面語句。 xcode
1 |
export PATH=$PATH:/Users/youpath/android-ndk-r8e |
重啓bash,便可使用ndk-build bash
1 2 |
HaibotekiMacBook-Air:jni haibowu$ source ~/.bash_profile HaibotekiMacBook-Air:jni haibowu$ ndk-build |
ndk包解壓縮以後,自帶一些jni的例子,下面咱們就來編譯運行下hello-jni,感受下jni的世界。該demo的路徑在ndk安裝路徑的sample目錄下。進入該路徑,執行下列命令: app
1 2 3 4 5 6 |
HaibotekiMacBook-Air:jni haibowu$ ndk-build Gdbserver : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver Gdbsetup : libs/armeabi/gdb.setup Compile thumb : hello-jni <= hello-jni.c SharedLibrary : libhello-jni.so Install : libhello-jni.so => libs/armeabi/libhello-jni.so |
當系統提示生成*.so文件時,即表明編譯成功。能夠經過eclipse或者intellij idea導入該工程,運行查看效果。 eclipse
接下來,我會寫一篇介紹Jni的blog,但願能寫的淺顯易懂。
Posted by 阿波 Jun 1st, 2013 JNI
http://whbzju.github.io/blog/2013/06/01/android-jni-config/