INNER CODE UNIT · C++
addWeakGloablReference
tiann/epic · library/src/main/cpp/epic.cpp:91
addWeakGloablReference = (jobject (*)(JavaVM *, void *, void *)) dlsym(handle,
"_ZN3art9JavaVMExt22AddWeakGlobalReferenceEPNS_6ThreadEPNS_6mirror6ObjectE");
} else if (api_level < 24) {
// Android M, art::JavaVMExt::AddWeakGlobalRef(art::Thread*, art::mirror::Object*)
void *handle = dlopen("libart.so", RTLD_LAZY | RTLD_GLOBAL);
addWeakGloablReference = (jobject (*)(JavaVM *, void *, void *)) dlsym(handle,
"_ZN3art9JavaVMExt16AddWeakGlobalRefEPNS_6ThreadEPNS_6mirror6ObjectE");
} else {
// Android N and O, Google disallow us use dlsym;
void *handle = dlopen_ex("libart.so", RTLD_NOW);
void *jit_lib = dlopen_ex("libart-compiler.so", RTLD_NOW);
LOGV("fake dlopen install: %p", handle);
const char *addWeakGloablReferenceSymbol = api_level <= 25
? "_ZN3art9JavaVMExt16AddWeakGlobalRefEPNS_6ThreadEPNS_6mirror6ObjectE"
: "_ZN3art9JavaVMExt16AddWeakGlobalRefEPNS_6ThreadENS_6ObjPtrINS_6mirror6ObjectEEE";
addWeakGloablReference = (jobject (*)(JavaVM *, void *, void *)) dlsym_ex(handle, addWeakGloablReferenceSymbol);
jit_compile_method_ = (bool (*)(void *, void *, void *, bool)) dlsym_ex(jit_lib, "jit_compile_method");