关于Java的JNI

来源:互联网 发布:域名在那里续费 编辑:程序博客网 时间:2024/05/18 02:20

JNI的基本概念


JNI的使用场合



 

Android中的JNI模型


 

JNI使用模型


 

基本数据类型转化


 

引用数据类型转化


 

 

关于JNI函数的注册


 

静态注册:

1.创建一个包含本地方法的类

  package com;

  public class MyJNI{

public native void fun();

  }

 

2.编译包含本地方法的类,生成一个字节码文件

  javac MyJNI.java

 

3.定位到com文件夹外,执行 javah com.MyJNI 生成头文件。

 

4.实现头文件

  创建出.c文件。实现头文件中声明的函数。

 

5.生成动态链接库(.so文件)

  gcc -fPIC -I /home/ubuntu/jdk/include -I /home/ubuntu/jdk/include/linux -shared -o libMy.so MyJNI.c

 

6.创建测试类。调用本地方法。

  import com.MyJNI

  public class Test{

        static{

System.loadLibrary("My");

}  

 

      public static void main(String args[]){

MyJNI myJni = new MyJNI();

myJni.fun();

        }

 

  }

 

7.编辑测试类,生成Test.class文件

  运行文件 java -Djava.library.path=. Test

 

public double get(String s, char c){};

(Ljava/lang/String;C)D

 

 

静态注册之Java调c


 

测试代码1


 

 

测试代码1讲解


 

测试代码1


 

将C代码生成.so库与调用.so库


 

 

关于JNI函数的静态注册


 

 

动态注册之调c


 

关于JNINativeMethod结构体


 

编码签名:


 


 

JNIEnv结构体


 

注:关于JNIEnv结构体在jdk1_6.0_45  目录下去查找一下!

 

测试代码2




 

 

访问java中成员变量的步骤


 

C代码访问Java代码的实例域


C代码访问Java代码的实例域


 

代码讲解


 

访问Java中静态变量的步骤


 

C代码调用Java代码


 

测试代码3





 

全局引用与局部引用


 

局部引用


 

 

局部引用的示例如下:


 

全局引用


 

全局引用的示例如下:


 

0 0
原创粉丝点击