这是我模仿视频教程而写的一个简单的NDKdemo,麻雀虽小五脏俱全,里面也有不少注意事项,在此记下详细步骤。
因为最早是看的《Android应用开发解密》和土豆网上的一个视频,前者ndk版本太老,一些诸如class文件生成、jni文件夹的新建、Android.mk、Application.mk的生成等操作需要我们手工进行,而我用的NDK r9则方便得多,除了Application.mk根本不需要生成之外,class文件、jni文件夹、Android.mk都是系统自动生成,连so文件也可以通过软件生成,不用借助Cygwin;后者缺少so的生成的步骤说明。下面开始整个流程,目的是在MainActivity的一个Button上显示C代码返回的String,如下图。环境:Eclipse 3.8,NDK r9。
流程严格分为四步:
一.JNI接口设计;二.在C/C++中实现本地方法;三.生成动态链接库so;四.在工程中调用so。
一.JNI接口设计
1. 新建一个Android工程,名为SecondNDK,在布局xml里定义一个Button,id为result。
2.在工程文件夹上 右键--Android Tools--Add Native Support,核查一下各参数,标配如下图,点击‘完成’。
注:如果你的NDK位置处是空白的话,可以到 菜单栏的‘Windows--Preference’窗口左侧的‘ Android--NDK’中设置你NDK的路径,设置好后这里就会有所显示。
点击‘完成’后,发现工程的根目录下自动多了一个‘jni文件夹’(这在NDK r1里是要我们手动新建的),里面自动生成Android.mk和一个.cpp文件,甚好,如下图。
3.在同一个package里新建一个.java文件,里面是一些由java文件定义、在c/c++文件里实现的一些函数,注意这些函数要加关键字“native”。
接下来要为饱含接口函数的java文件生成C的头文件,这步需要在cmd中进行。命令如下图:
说明:参考BetweenFunc.class的位置为:E:\工作空间1\工作空间2\SecondNDK\bin\classes\com\example\secondndk,或许就能猜到这个格式的路径的含义,其中的
javah -d ../../jni是为了指定生成的c