前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JNI之路径初探---2

JNI之路径初探---2

作者头像
萬物並作吾以觀復
发布2018-09-13 17:32:58
4360
发布2018-09-13 17:32:58
举报
文章被收录于专栏:指尖下的Android指尖下的Android

上一篇博客写的是Java调用C、C++的例子,本篇就演示一下C、C++怎么调用Java的属性和方法。

Java代码中提供一个静态方法给C、C++调用

C、C++代码

一些具体的操作细节在第一篇博客就写的比较详细了,这里就不再重复了,值得一提的是我们这里在Java层加载的动态库(动态链接库) static{ System.loadLibrary("动态库名称"); } 在window下的动态库是.dll文件格式的,静态库是.a,动态库不会被压缩到.exe文件中,但是我们安卓开发是基于linux内核的,所以我们使用的动态库文件是.so文件格式,细心的读者也许就发现了为什么我们每次Java调用C、C++或者C、C++调用Java的静态和普通的属性、方法都一定要先通过(env)->来得到jclass,而且在JNI中方法都通过(env)->来调用方法,其实也不难猜出,属性和方法被调用和操作一定是暴露了内存地址(指针),我们编写C、C++文件来实现Native方法来生成.so文件供调用,其实也就变相说明了.so文件和.dex(Java代码打包)处于同一进程中,要不然也没有办法来交互,那么当.dex和.so文件被加载到Dailvik VM中时他们就是通过虚拟机的函数表来交互的,其实(*env)->就是一个虚拟机的函数表指针。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.06.15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档