NDK如何获得dvm点?

时间:2013-12-12 07:26:31

标签: java android-ndk

现在我有一个问题要使用" JNI_GetCreatedJavaVMs"。

但是我无法使用JNI_OnLoad方法,因为我的本机代码不是为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发生的事情。

谁能帮助我!!!!!!!!!!!!!! THX

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

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

1 个答案:

答案 0 :(得分:1)

我的原生应用程序中的一些代码,它是在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);