1、jni:java native interface
作用:用于java代码和C++、c代码的交互(代码混编);
分类使用:Jni静态注册、jni动态注册
2、静态注册
1).绑定java方法和C/C++方法的方式之一;
2).java层操作和c层操作以及整体编译
1-定义被native修饰的方法
2-根据java代码生成.h头文件(javah -jni 类的包名路径)
3-编写C/C++代码,导入.h头文件,实现我们.h头文件中方法
4-编写(配置)两个mk文件:application.mk/android.mk
5.通过ndk-build生成so文件;
6.java代码中加载so文件(system.loadlibrary)
7.补充:获取so库的名称
1-libs文件下去头去尾(头:lib;尾:.so);
2.在android.mk直接复制模块名称;
3.动态注册
1)作用:.绑定java方法和C/C++方法的方式之一
2)流程
1-java中定义native的方法
2-创建C++代码代码,导入头文件;
2.1-编写(配置)两个mk文件:application.mk/android.mk
3-JNInativeMethod:绑定java方法和C/C++的方法
4-registerNatives(4个参数):注册java层相应的类以及方法
5-使用jni.h中JNI_onload进行判断:注册是否成功(JIN_onload:系统调用,相当于java中的psvm:public static void main)
6-ndk-build生成so,
7-java代码中加载so文件(system.loadlibrary)
总结:静态注册和动态注册比较
静态注册:1.编写不方便,jni方法名必须遵守规则且名字很长;
2.过程较多,效率低
3.不安全,
动态注册:1.流程清晰可控
2.效率更高,安全
3.JIN_onload
NDK开发总结
关于头文件:
1.静态注册:
创建了4个文件:.c、.h、.mk、.mk
JNIstudy.c:#inude < .h>
各种代码的实现:实现java层被native修饰的方法
JNIstudy .h:#include
mk:配置文件;
捋一捋这句话:在.c文件里面导入包含jni.h头文件的 JNIstudy.h头文件
2.动态注册
创建了3个文件:.c、.mk、.mk
.c:#include
各种代码的实现:实现java层被native修饰的方法
mk:配置文件;
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE := JNIstudy #ģ������
- LOCAL_SRC_FILES := JNIstudy.c #Դ�ļ� .c����.cpp
- LOCAL_ARM_MODE := arm #������ָ� ARMָ��
- LOCAL_LDLIBS += -llog #������
- include $(BUILD_SHARED_LIBRARY) #ָ�������ļ�������
APP_ABI := armeabi-v7a