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

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

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

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 439
活跃值: (1943)
能力值: ( 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
活跃值: (345)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
270K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6o6j5h3I4W2j5V1k6W2L8Y4c8G2L8W2)9J5c8X3&6S2N6r3W2$3k6g2)9J5k6r3S2S2M7X3&6W2M7%4y4Q4x3X3c8@1j5i4u0Y4k6i4b7`.
2018-12-26 09:49
0
雪    币: 439
活跃值: (1943)
能力值: ( 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
活跃值: (1943)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
mistyes 猫子 cmake没试过,应该就是添加库的问题,你自己可以试试 我用dlsym(librt_dso, "_ZN7android ...
elf文件运行不需要虚拟机
2018-12-26 23:09
0
游客
登录 | 注册 方可回帖
返回