Android NDK初探 你也可以做移动开发 |
本文标签:Android Android NDK 51CTO曾介绍Android开发WebView组件的使用详解,本文将为各位详细介绍Android NDK的安装、使用和实战 。我下载的是Android Native Developer Kit (NDK) R4版本,当前的最新版 。
下载地址如下: http://dl.google.com/android/ndk/android-ndk-r4b-linux-x86.zip 我下面讲的都是以linux环境为准,因为我的系统是linux的 。windows下可以弄个Cygwin,模拟linux环境 。 首先进入NDK目录,有个README文件,里面提到了API的文档在docs/STABLE-APIS.TXT里面,如何安装NDK,参考docs/INSTALL.TXT,还有如何使用NDK,参考docs/HOWTO.TXT 。建议这些文档都看一遍,有个大概了解 。 安装: INSTALL.TXT里面讲的是如何安装,安装NDK,就需要一个可以make环境,linux自带了,所以不用关心 。还有一点,以前的版本都需要运行build/host-setup.sh来进行初始化,这个版本把它删除了,这样更方便 。 然后就是配置环境变量 。 在'/.bashrc文件里面,添加Shell代码 NDK_ROOT='/android-ndk-r4b #后面的路径是NDK所在的目录,根据自己的目录修改 export NDK_ROOT 然后保存,重新打开bash 。 使用: 先拿sample试刀吧,刚开始什么都不知道,只有运行出一个例子,才能增加信心 。 编译的两种方法: 1.进入要目标工程目录,比如$NDK_ROOT/samples/hello-jni,然后执行$NDK_ROOT/ndk-build 2.在任何地方,执行$NDK_ROOT/ndk-build -C $NDK_ROOT/samples/hello-jni. 如果成功的话,会生成obj和libs两个目录 。 选择一种方法,编译这个例子 。然后打开eclipse,把hello-jni这个工程导入,运行,ok,就能看到效果了 。 进阶: docs下的STABLE-APIS.TXT里面讲了系统API的用法 。我以1.5为例 。进入$NDK_ROOT/build/platforms/android-3/arch-arm/usr/include,里面有很多.h文件,这些都是可以在NDK里面调用的,除了linux和asm目录下的 。 一般来说,主要用到的是jni.h,里面提供了很多对类和对象的操作 。 另外,1.5提供了log的API,在android/log.h里面,使用的时候,在c文件中#include ,然后在Android.mk里面加上LOCAL_LDLIBS := -llog,就可以了 。 1.6到2.01提供了openGL ES 1.x的API,2.1提供了openGL ES 2.0的API,2.2提供了graphics的处理接口 。使用方法同log 。 实例: 给出两个点的坐标,求它们的距离 。 首先,创建一个Point对象, Java代码
然后在c文件中定义一个函数 C代码
返回值是float,在jni中定义的是jfloat 。 函数名规则: Java开头,接着是包名的每一段,然后是类名,最后是Java中调用的方法名,中间都用下划线隔开 。第一个参数JNIEnv* env和第二个参数jobject thiz都是必须的,后面的才是Java中传递进来的参数 。这里是两个Point对象 。 首先确定要做的步骤: ◆找到这个Point类 ◆找到类中的域x和y的域id ◆根据ID取出x和y的值 ◆计算结果并返回 那么代码如下: Java代码
然后在Java里面调用: Java代码
运行,得到结果distance(a,b):2.828427 源码参见附件 。 |