JNI之路径初探---2

简介: 上一篇博客写的是Java调用C、C++的例子,本篇就演示一下C、C++怎么调用Java的属性和方法。Java代码中提供一个静态方法给C、C++调用C、C++代码一些具体的操作细节在第一篇博客就写的比较详细了,这里就不再重复了,值得一提的是我们这里在Java层加载的动态库(动态链接库)static{System.

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

相关文章
|
Java Maven
启动jar文件,报”no main manifest attribute“异常
在云服务器上部署打包好的的MQTT消息服的jar包,使用命令`nohup java -jar xxx.jar &` 启动,出现的问题
3935 0
启动jar文件,报”no main manifest attribute“异常
|
4月前
修改工程名称编译时报ld: library not found for -lPods-lXXX解决办法
修改工程名称编译时报ld: library not found for -lPods-lXXX解决办法
31 0
|
C++ Windows
C++ --- Dll文件的生成与调用(二)之动态库注入技术
C++ --- Dll文件的生成与调用(二)之动态库注入技术
134 0
|
C++ Windows
C++ --- Dll文件的生成与调用(一)
C++ --- Dll文件的生成与调用(一)
339 0
|
Java Linux
JNI:需要显式指定使用jar的全路径
JNI:需要显式指定使用jar的全路径
76 0
|
Java Android开发 Linux
在 Android 系统中直接调用 SO文件(包含System.loadLibrary加载so的路径解释)
Android虚拟机不能直接调用底层设备,如果要对底层设备进行调用,就需要用到so使用 C语言或C++编写完成,利用NDK进行编译,直接运行在Linux内核中,按jni调用 so时,基本类型可以直接交互。
8175 0
|
Java
classPath 【项目编译之后的输出路径】字节码的路径,默认是生成在bin目录下
classPath 【项目编译之后的输出路径】字节码的路径,默认是生成在bin目录下
173 0
classPath 【项目编译之后的输出路径】字节码的路径,默认是生成在bin目录下
|
Java Android开发 C++
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )(一)
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )(一)
193 0
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )(一)
|
编译器 API C++
C++ 静态调用C的DLL库(调用lib文件)
C++ 静态调用C的DLL库(调用lib文件)
358 0
C++ 静态调用C的DLL库(调用lib文件)
|
Android开发
【Android 逆向】ART 脱壳 ( DexClassLoader 脱壳 | exec_utils.cc 中执行 Dex 编译为 Oat 文件的 Exec 和 ExecAndReturnC函数 )
【Android 逆向】ART 脱壳 ( DexClassLoader 脱壳 | exec_utils.cc 中执行 Dex 编译为 Oat 文件的 Exec 和 ExecAndReturnC函数 )
142 0