首页
社区
课程
招聘
未解决 [求助]NDK编译的android可执行文件里怎么获取JavaVM变量?
发表于: 2018-12-25 22:39 2695

未解决 [求助]NDK编译的android可执行文件里怎么获取JavaVM变量?

2018-12-25 22:39
2695
android::AndroidRuntime::getJavaVM()
我知道这个类方法可以获取到JavaVM,但是好像要patch ndk才能用
想通过dlsym来调用,但是我搜遍了也没找到 android::AndroidRuntime::getJavaVM() 这个函数的符号,dlsym参数不知道该怎么写
求大神告知怎么获取JavaVM变量?
或者帮忙查一下 getJavaVM()在so库符号表中的函数符号也行
so库文件已经上传到附件了
谢谢

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 439
活跃值: (1243)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
编译选项
LOCAL_LDLIBS := -llog $(LOCAL_PATH)\libdvm.so $(LOCAL_PATH)\\libandroid_runtime.so

c代码
static JavaVM *g_JavaVM;
g_JavaVM = android::AndroidRuntime::mJavaVM;

最后于 2018-12-26 00:02 被猫子编辑 ,原因:
2018-12-26 00:01
0
雪    币: 276
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
猫子 编译选项LOCAL_LDLIBS := -llog $(LOCAL_PATH)\libdvm.so $(LOCAL_PATH)\ ...
CMake编译的话怎么设置呢?
2018-12-26 08:15
0
雪    币: 1787
活跃值: (340)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
https://github.com/CalebFenton/native-harness-target
2018-12-26 09:49
0
雪    币: 439
活跃值: (1243)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
mistyes CMake编译的话怎么设置呢?
cmake没试过,应该就是添加库的问题,你自己可以试试
2018-12-26 20:21
0
雪    币: 276
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
猫子 cmake没试过,应该就是添加库的问题,你自己可以试试
我用dlsym(librt_dso, "_ZN7android14AndroidRuntime7mJavaVME")试了一下,用java调用jni本地方法可以获取到JavaVM对象,但是如果把c代码单独编译成一个可执行文件的话,main函数里获取不到.
按照我的理解,可执行文件也是一个单独的进程,而每个进程都是运行在一个虚拟机里,执行文件运行前系统也应该调用Creat_JavaVM为它分配一个虚拟机,,但是android::AndroidRuntime::mJavaVM却获取不到,不知道为什么?
也许应该在可执行文件里自己调用android::AndroidRuntime::Creat_JavaVM创建虚拟机,只有有空试试才知道了
最后于 2018-12-26 22:46 被mistyes编辑 ,原因:
2018-12-26 22:45
0
雪    币: 439
活跃值: (1243)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
mistyes 猫子 cmake没试过,应该就是添加库的问题,你自己可以试试 我用dlsym(librt_dso, "_ZN7android ...
elf文件运行不需要虚拟机
2018-12-26 23:09
0
游客
登录 | 注册 方可回帖
返回
//