JNI之路径初探---2

上一篇博客写的是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)->就是一个虚拟机的函数表指针。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python绿色通道

使用Python开发你的第一个服务器程序

声明:本文是用Py3.6版本,而且从此以后我的系列文章优先使用Py3.6版本,为什么说优先使用Py3.6版本呢?因为有的时候Py3.6版本确实有些问题,那我只能...

2.1K2
来自专栏JMCui

基于Nginx和Zookeeper实现Dubbo的分布式服务

2584
来自专栏JetpropelledSnake

SNMP学习笔记之Python的netsnmp和pysnmp的性能对比

用python获取snmp信息有多个现成的库可以使用,其中比较常用的是netsnmp和pysnmp两个库。网上有较多的关于两个库的例子。

3522
来自专栏用户2442861的专栏

Linux下动态库(.so)和静态库(.a) 的区别

动态库(共享库)的代码在可执行程序运行时才载入内存,在编译过程中仅简单的引用,因此代码体积比较小。

2.6K1
来自专栏mySoul

cookie

除了名(name)和值(value),cokie持续有效时间很短,只能持续在web浏览器的会话期间。一旦用户关闭浏览器,用户保存的数据就全部丢失。cookie需...

1942
来自专栏Laoqi's Linux运维专列

python3–文件操作

50510
来自专栏程序员互动联盟

vim带你装逼带你飞(二)

上篇我贴上了我使用的vim配置及插件配置,有这些东西只能是一个脚本堆积,无从谈高效的代码阅读开发。 下面我们就来写经常使用的命令,就从配置F系列快捷键开始吧。 ...

2956
来自专栏腾讯NEXT学位

深入理解 ES6 模块机制

3136
来自专栏技术小站

Python 多线程与多进程

原文地址:http://www.cnblogs.com/whatisfantasy/p/6440585.html

1262
来自专栏乐百川的学习频道

Flask 快速入门

Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。本文参考自Flask官方文档,大部分代码引用自官方...

33110

扫码关注云+社区

领取腾讯云代金券