gpt4 book ai didi

java - NDK如何获取dvm点?

转载 作者:行者123 更新时间:2023-12-01 13:43:09 31 4
gpt4 key购买 nike

现在我有一个使用“JNI_GetCreatedJavaVMs”的问题。

但我无法使用 JNI_OnLoad 方法,因为我的 native 代码不提供 java 。

void *pHandle = dlopen("/system/lib/libart.so", RTLD_NOW | RTLD_GLOBAL);
JavaVM* m_pJvm = NULL;
void * pFunAddr =dlsym(pHandle, "JNI_GetCreatedJavaVMs");
LOGD("pJNI_GetCreatedJavaVMs = %08X", pFunAddr);
pJNIGetCreatedJavaVMs = (int)pFunAddr - 1;
LOGD("call !!!!!!!");
pJNIGetCreatedJavaVMs(&m_pJvm, 0, &vm_count);
LOGD("pJNIGetCreatedJavaVMs result is %d", result);

当我调用 JNI_GetCreatedJavaVMs 时,进程崩溃了。

我没有发现IDA发生了什么。

谁能帮帮我!!!!!!!!!!!!谢谢

ps:JNI_GetCreatedJavaVMs方法在android源码中找到。

另一种方法是使用runtime(libart.so)或gdvm(libdvm.so)。

最佳答案

我的本​​机应用程序中的一些代码,它是在 AOSP 源代码树中构建的。

我不确定它是否可以在 NDK 中工作

#include <jni.h>
#include <android_runtime/AndroidRuntime.h>
...
JNIEnv *env;
jint res;
JavaVM *jvm = AndroidRuntime::getJavaVM();
assert(jvm != NULL);
res = jvm->AttachCurrentThread(&env, NULL);
assert(res >= 0);

关于java - NDK如何获取dvm点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20537442/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com