背景介绍

这几天学习了一下Android NDK开发,在学习的过程中参考了一些资料,但最后总结时却发现没有一份资料能够起到按照步骤一步步来可以完成整个开发过程的,即,从开发环境的搭建到自己建立一个简单的Android NDK项目,倒是Google官方的介绍文档起到了重要的作用。基于此,我就把我在这个过程中遇到的情况写出来。

在我看来,NDK只是一种技术,这种技术提供了在Android应用中使用C/C++进行开发的途径,真正关键的是C/C++。

开发环境搭建

我是在Windows XP下搭建的NDK开发环境,整个开发环境的搭建有两个重要的部分,第一个是Cygwin的安装与配置,第二个是Android NDK的安装。

需要记录的是,在对Cygwin进行配置时,现在的版本只需要在/home/用户名/.bash_profile文件的最后添加

NDKROOT=/cygdrive/你的NDK根目录
export NDKROOT

即可,配置完成保存后,重新打开Cygwin,输入$NDKROOT,当回显所配置的路径时,则说明配置成功。

而现在的ndk中,所提供的实例则放置在samples文件夹下。

导入所提供的实例


当向eclipse中导入所提供的ndk实例时,是无法直接导进去的,我采用的方法是:


首先,建立一个Android Project,然后把除了src、gen、android library的内容全部删除掉,接下来把src下的文件进行替换,把实例中的其他内容全部复制到该project下。


配置构造器


接下来就是配置构造器。在eclipse中选中所导入的项目,右击,选择Properties,然后选择Builders,点击右侧的New,选择Program,点击OK,在Main选项卡中填入类似内容:


android namespace使用场景_bash


Location指向Cygwin的bash.exe文件,Working Directory指向Cygwin的bin目录,而Arguments填入的内容本质上就是向bash.exe传入的参数,形如:


--login -c "cd /cygdrive/d/Java/Experiment/SanAngeles && $NDKROOT/ndk-build"


其中的第一个参数cd /cygdrive/d/Java/Experiment/SanAngeles,指向你的项目根目录即可,即:


cd /cygdrive/项目根目录


第二个参数$NDKROOT/ndk-build中的名称NDKROOT是根据你自己在/home/用户名/.bash_profile文件中的配置而决定的,你使用什么名称相应写为什么名称。


然后选择Refresh选项卡,做如下配置:


android namespace使用场景_构造器_02


选择第一项,然后进入Build Options选项卡,选择后三项,然后Specify Resources为你的Project。


最后,把你所新建的构造器up为第一个,保证.so文件在修改后首先构建完成。


从头建立Android NDK项目

首先,新建Android Project,在src下新建.java源文件,通过native关键字声明本地方法,然后,通过命令行进入项目的bin文件夹下,输入命令:

javah -classpath classes -d jni 包名.class文件名

注意没有.class后缀,即可生成.h头文件。-classpath指定查找class文件的一个临时路径,-d jni意为把生成的.h头文件放入新建的jni文件夹下。

得到.h头文件后,新建.c文件,把.h头文件中的函数拷入.c文件,实现这些函数。

函数实现完成后,新建Android.mk文件,这时要注意该文件内容的格式,格式不对时会出现错误,具体如下:

android namespace使用场景_bash_03

这时拷过来一个格式正确的Android.mk文件,在此文件的基础上做修改即可。

随后就是为你的ndk项目新建一个构造器,然后就可以创建所建立的java类的对象调用通过C语言实现的方法了。

以上就是我在学习android ndk时的一些有必要做总结的情况。

还是那句话,真正关键的是C/C++。