jni中load *.so



JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM*, void*);
jobject getGlobalContext(JNIEnv *);
jobject get_context_classLoader(JNIEnv *, jobject);
void call_loadLibrary(JNIEnv *, jobject);




extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {

JNIEnv* env;
vm->GetEnv((void**) &env, JNI_VERSION_1_6);
if (pCAdd == NULL) {
pCAdd = new CAdd;
}
if (env == NULL) {
LOGI("env==NULL");
}
LOGI("env!=NULL");


void *handle = dlopen("libdvm.so", RTLD_GLOBAL);
dvmDecodeIndirectRef_ptr = (dvmDecodeIndirectRefFunc) dlsym(handle,
"_Z20dvmDecodeIndirectRefP6ThreadP8_jobject");
dvmLoadNativeCode_ptr = (dvmLoadNativeCodeFunc) dlsym(handle,
"_Z17dvmLoadNativeCodePKcP6ObjectPPc");
dvmThreadSelf_ptr = (dvmThreadSelfFunc) dlsym(handle, "_Z13dvmThreadSelfv");


jobject context = getGlobalContext(env);

    gobj = context;
jobject loader = get_context_classLoader(env, context);



call_loadLibrary(env, loader);


return JNI_VERSION_1_6;



}








jobject getGlobalContext(JNIEnv *env) {
jclass activityThread = env->FindClass("android/app/ActivityThread");
jmethodID currentActivityThread = env->GetStaticMethodID(activityThread,
"currentActivityThread", "()Landroid/app/ActivityThread;");
jobject at = env->CallStaticObjectMethod(activityThread,
currentActivityThread);
jmethodID getApplication = env->GetMethodID(activityThread,
"getApplication", "()Landroid/app/Application;");
jobject context = env->CallObjectMethod(at, getApplication);
return context;
}


jobject get_context_classLoader(JNIEnv *env, jobject context) {
jclass clz = env->GetObjectClass(context);
jmethodID getClassLoader = env->GetMethodID(clz, "getClassLoader",
"()Ljava/lang/ClassLoader;");
jobject classLoader = env->CallObjectMethod(context, getClassLoader);
return classLoader;
}


void call_loadLibrary(JNIEnv *env, jobject classLoader) {
if (classLoader != NULL) {
LOGI("dvmDecodeIndirectRef_ptr:%p", dvmDecodeIndirectRef_ptr);
void *classLoader_ptr = dvmDecodeIndirectRef_ptr(dvmThreadSelf_ptr(),
classLoader);


char *reason = 0;
LOGI("------------------------dvmLoadNativeCode_ptr----------------------------");
int ret = dvmLoadNativeCode_ptr(
"/data/data/com.cmplay.tiles2/lib/libcocos2dcpp1.so",
classLoader_ptr, &reason);
LOGI("ret:%d", ret);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值