jni 编程要点

Android JNI(一)——NDK与JNI基础

JNI开发流程的步骤

第1步:在Java中先声明一个native方法
第2步:编译Java源文件javac得到.class文件
第3步:通过javah -jni命令导出JNI的.h头文件
第4步:使用Java需要交互的本地代码,实现在Java中声明的Native方法(如果Java需要与C++交互,那么就用C++实现Java的Native方法。)
第5步:将本地代码编译成动态库(Windows系统下是.dll文件,如果是Linux系统下是.so文件,如果是Mac系统下是.jnilib)
第6步:通过Java命令执行Java程序,最终实现Java调用本地代码。

作用域

JNI接口指针仅在当前线程中起作用

JNIEnv是什么?

JNIEnv是一个线程相关的结构体,该结构体代表了Java在本线程的执行环境

JNIEnv和JavaVM的区别:
  • JavaVM:JavaVM是Java虚拟机在JNI层的代表,JNI全局仅仅有一个
  • JNIEnv:JavaVM 在线程中的代码,每个线程都有一个,JNI可能有非常多个JNIEnv;
JNIEnv的作用:
  • 调用Java 函数:JNIEnv代表了Java执行环境,能够使用JNIEnv调用Java中的代码
  • 操作Java代码:Java对象传入JNI层就是jobject对象,需要使用JNIEnv来操作这个Java对象
native 方法的注册
  • 静态注册:本地方法名为java的方法名+包名路径

  • 动态注册:可以自定义关联
    JNI_OnLoad

JNI规范中定义了三种引用
refrence

JNI开发之方法签名与Java通信(二)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容