JNI的开发步骤
使用C函数实现Java本地方法:
1. 在java代码里面声明一个native的方法
public native String helloFromC();
2. 在工程目录下面创建一个jni的文件夹
3. 在jni文件夹里面编写c代码,实现java的本地方法
//JNIEnv* envJNI本地接口这个结构体的二级指针
//该结构体中封装了很多函数指针方便程序员开发jni代码
//jobject obj MainActivity的对象,调用者对象
jstring Java_包名_类名_方法名(JNIEnv* env,jobject obj){}
编译运行C函数,生成so可执行文件:
4. 在jni文件夹下创建Android.mk文件,c代码编译的脚本文件
# $表示调用ndk中定义好的方法或者变量
# 加载本地的jni目录,当在dos窗口中执行ndk-build命令时,会找工程目录下中的jni目录;
LOCAL_PATH := $(call my-dir)
# 下次重新生成动态库时,清理掉上次生成的变量
include $(CLEAR_VARS)
# 指定生成的动态库的名称,生成动态库文件后,文件名为libhello.so
LOCAL_MODULE := hello
# 指定了本地的c文件
LOCAL_SRC_FILES := Hello.c
# 指定了生成库的类型:BUILD_SHARED_LIBRARY表示动态库.so,BUILD_STATIC_LIBRARY表示静态库.a
# 动态库.so文件小,静态库.a文件大。
include $(BUILD_SHARED_LIBRARY)
5. 调用ndk-build指令编译c代码
注意配置环境变量生成一个.so的文件 ( c代码编译出来的二进制可执行文件)
6. 在java代码里面写静态代码块,加载so文件
static{
System.loadLibrary("hello");
}
7. 像使用一般java方法一样调用native的方法.