Android JNI MAC OS環境配置

Android JNI MAC OS環境配置

http://whbzju.github.io/blog/2013/06/01/android-jni-config/ html

JUN 1ST, 2013 | COMMENTS java

前言—JNI技術簡介

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

兩種編譯環境

  • 源碼編譯環境:Android平臺提供基於Make的編譯環境,爲App正確的編寫Android.mk便可使用該編譯環境,該環境須要經過git從Android的官方的源碼平臺獲取源碼並編譯,獲得環境。具體見:http://source.android.com/index.html
  • 基於Android NDK的編譯環境:NDK的全稱叫作Native Development Kit。是google提供給咱們用於本地編譯JNI的工具。事實上,NDK和源碼編譯環境同樣,都是使用Android的編譯系統,經過Android.mk來控制編譯。本文重點介紹這種方式。

NDK編譯環境

在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 

運行Hello-jni

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/

相關文章
相關標籤/搜索