c++ 、java 融为一体,c++ 实例化虚拟机直接运行java

本文介绍了如何在C++中通过实例化Java虚拟机直接运行Java代码,展示了C++与Java无缝衔接的编程示例,以及使用JNI和Android库的相关注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在计算机世界里,几乎所有设备都能支持直接 运行c++ 、c 编译出来的可执行文件,因为他们编译出后的文件里面包含的实际是执行机器能直接识别的指令集命令,如裸机程序,或者操作系统程序。

执行这个可执行文件的进程称为 native 进程,一般称为本地natvie进程。

而使用 java 编译的出来的程序文件 如jar 包,却是不能直接运行在目标机器上的。他们需要运行在特定的java虚拟机里,虚拟机从本质上将,实际上也是一个 使用 c\c++ 实现的一个 本地程序......

废话不多说,下面直接举例说明如何在c++ 里 直接通过实例化虚拟机来直接运行java代码,使c++ ,java 达到融为一体的效果。

涉及到的所有文件如下:

1、主要的java 文件:

2,主要的c++ 文件

3,编译后运行的日志

4,简要说明

如运行日志显示,一个进程号(3597)里 有c++ 代码的打印(app2, ppp)、也有java代码的打印(java)

在一个进程里,无缝衔接的实现了 从执行 c++ 代码-----> 直接过度到 ----> 执行 java 代码 程序流程。

其中,java 代码里能使用了Android 封装的android.util.Log 类,是因为实例的c++ 代码里特地注册了这个java类对应的native 方法,如果没有注册,则会像日志里显示的异常信息一样报错:No implementation found for boolean android.os.SystemProperties.native_get_boolean。

因此这个地方也可以直接使用Android 封装好的 libandroid_runtime.so 库,但是里面封装死了jni的操作,仅透露了几个有限的接口,这是直接使用别人的库的缺点,

但是它却加载了完整Android java程序运行需要依赖的类对应的native方法。看运用场景吧,没有优劣之分。

另外,实例代码里也使用了 Android封装好的 libnative_helper 库,这个库的目的是为了帮助开发者更容易、方便的实例化 虚拟机、使用虚拟机实现自己要的功能。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值