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/