Java调用C是使用JNI最常见的方式,首先定一个类叫HelloJNI,里面有System.loadLibrary("hello"); 系统会自动去找到library libhello.so,这个类里面定义方法叫sayHello,加了C以后调用它,但这是调不通的,因为并没有提供真正的Native实现。实现要通过一个头文件去告诉这个方法的签名,这里实现Java文件,然后通过jni.h生成头文件,这个是自动生成的。 签名是 Java,然后是Java_HelloJNI_sayHello(JNIEnv *, jobject)规范,类名加上方法名,参数第一个是环境;第二个是jobject,无参数,但是 Java的方法默认是有一个this指针作为第一个参数,最后编写它,实现HelloJNI.c,根据这个声明定义实现,然后里面只是printf了一下,把 HelloJNI.c定义成libhelloHello.so这个程序就可以运行起来了。详情如下图所示:
在Java应用里面,可以调通过JNI调用各种库,调用到native以后,因为任何语言跟native都互相交互,大大丰富了Java使用场景。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。