现在我有一个使用“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/