1、如果是在windows环境下开发,首先需要安装cygwin。
2、下载android-ndk,我的当前版本是android-ndk-r9d-windows,然后要在cygwin配置NDK的环境变量:
1)、首先找到cygwin的安装目录,找到一个home\<你的用户名>\.bash_profile文件,我的是:d:\cygwin\home\Administrator\.bash_profile,(注意:我安装的时候我的home文件夹下面神马都没有,
2)、打开.bash_profile文件,添加NDK=/cygdrive/<你的盘符>/<android ndk 目录> 例如:
export NDK
NDK这个名字是随便取的,为了方面以后使用方便,选个简短的名字,然后保存。
3、创建JNI头文件:
public class TestJni {
static {
System.loadLibrary("testSdk");
}
public native int add(int a, int b);
}
然后用命令行 javah -jni com.example.XXX.文件名,就会生成一个JNI的头文件。
4、在根目录下手动创建jni文件夹,将JNI头文件拷入其中,实现接口功能:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH必须位于Android.mk文件的最开始。它是用来定位源文件的位置,$(call my-dir)的作用就是返回当前目录的路径。
include $(CLEAR_VARS)的作用是清除一些变量的值,但是LOCAL_PATH除外。
LOCAL_MODULE是用来指定当前待编译模块的名称,在示例中的模块名称为hello-jni
LOCAL_SRC_FILES是用来指定参与编译的源代码文件。这里只编译hell0-jin.c
include $(BUILD_SHARED_LIBRARY)是用来指示将当前模块编译为共享库,前缀为lib,后缀为.so。
还有另外一个BUILD_STATIC_LIBRARY,是用来指示将当前模块编译为静态库的,前缀为.a,后缀为.a。
这就是一个最简单的Android.mk的结构。可能还有另外一点需要介绍:
LOCAL_C_INCLUDES:=include 这个是用来指定在编译时即将使用的c头文件的位置,以当前目录为起点。
5、创建.mk,用cygwin进行编译:
cd /cygdrive/XXXX(JNI的目录);
$NDK/ndk-build(执行编译命令); 下图表示编译成功.so在lib目录下生成。
6.最后在java程序里直接调用native的接口函数即可。