Android---简单的JNI实例

一、JNI概述
JNI 是Java Native Interface的缩写,中文翻译为“Java本地调用”,JNI 是本地编程接口。它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行互操作。就是说,JNI是一种技术,通过这种技术可以做到两点:
1)Java程序中的函数可以调用Native语言写的函数,Native一般指的是C/C++编写的函数。

2)Native程序中的函数可以调用Java层的函数,也就是说C/C++程序可以调用Java函数。


二、JNI应用

1、JNI本地调用:(以例子介绍)

        java:(HelloWorld.java)

class HelloWorld {
	private native void print();
	public static void main(String[] args){
		new HelloWorld().print();
	}

	static {
		System.loadLibrary("HelloWorld");
	}
}

新建一个java文件,可以看出第二行有个native,说明这个函数是java和其他语言(c/c++)协作时用的,并用其他语言实现。在文件中有 System.loadLibrary,它是对本地方法的加载,原则上是在调用native函数前,任何时候,任何地方加载都可以,它的参数是动态库的名字。
然后需要用命令javac HelloWorld.java生成HelloWorld.class文件,
下一步是利用javah -jni -classpath . HelloWorld生成对应C/C++的HelloWorld.h文件,设置classpath的目的在于告诉java环境,在哪些目录下可以找到所要执行的java程序所需要的类或者包,此处不用声明.class文件名,在对应目录下编译器会自动找到。查看.h文件:

*******
/* 
 * Class:     HelloWorld 
 * Method:    print 
 * Signature: ()V 
 */ 
JNIEXPORT void JNICALL Java_HelloWorld_print 
  (JNIEnv *, jobject);
*******

注释部分是对应文件的类、native方法和方法签名。方法的签名是由方法的参数和返回值类型共同构成的,如.h文件中,Signature:()V,其中()中代表的是方法参数,V代表的是方法无返回值。java程序中参数类型和Signature有不同的对应值,可网上查阅,此处不赘述。
此处对应java中方法的jni函数,JNIEXPORT void JNICALL Java_HelloWorld_print (JNIEnv *, jobject);这里的JNIEXPORT和JNICALL都是JNI关键字,表示此函数是要被JNI调用的。
JNIEnv是一个与线程相关的代表JNI环境的结构体&#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值