JNI调用机制与JNI实现

本文详细探讨了JNI的调用机制,包括Java如何访问C和C如何访问Java。在Java中,通过声明native函数并使用System.loadLibrary加载库来调用C代码。C端的函数命名遵循特定规则,jni.h头文件定义了JNI接口。同时,C调用Java函数需要获取类和方法ID,通过JNIEnv接口进行操作。对于访问Java变量,同样需要获取字段ID并使用Get/Set方法。这两部分的结合使用,构成了JNI的基础应用。
摘要由CSDN通过智能技术生成

JNI调用机制

JNI第一篇
此文是JNI的第二篇博客,我在之前的博客里写过如何实现一个基本的JNI,这篇文章是上一篇的升级版,详细解释了各种参数和实现方式,所以,在阅读此文前,请先看下如何实现一个基本的JNI调用,点击跳转
JNI:Java Native Interface是java本地接口。所谓的native,这里指C/C++写的底层接口。
一般在java层调用C层有这样的需求:
调用驱动,由于操作系统所提供的驱动一般都是C接口,Java语言本身不具备操作这些驱动的能力。
对于某些模块,Java的效率可能远低于C,因为,这些模块需要用C去完成。
对于某些功能模块,C层已经存在封装好的C代码,不想重复造轮子。

总之,基于某些原因,我们需要使用C代码。

Java访问C

Java中可以定义某个函数为native类型,对于native函数,只需要声明即可,因为该函数实现是native的,由相应的c去实现,Java编译器遇到native函数是,不会关心该函数的具体实现,因此,编译上不会出任何差错。
关于native函数的命名规则,看一下下面两个方法:
假设我们是在Framework层中的AssetManager中调用的,
java层方法

private native final void init();

C中对应方法

static void android_content_AssetManager_init(JNIEnv* env, jobject clazz);

这种映射关系就是一种编程规范,C中方法名对应的是Java层的包名+方法名,方法中第一个参数env是一个指向java虚拟机运行环境,

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值