jni中load *.so
来源:互联网 发布:ds证据理论 软件 编辑:程序博客网 时间:2024/06/05 17:42
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);
}
0 0
- jni中load *.so
- Unstaisfiedlink error load jni.so failed
- android JNI (2) - load .so file with JNI
- Cannot load hello library: java.lang.UnsatisfiedLinkError: /opt/wdh/jni/libhello.so: /opt/wdh/jni/li
- JNI中调用第三方提供的so文件
- JNI中调用第三方提供的so文件
- android中JNI利用第三方的so库
- Android JNI以及打包so文件到apk中
- Android Studio Gradle项目中添加JNI so文件
- AndroidStudio Gradle项目中添加JNI生成文件(.so文件)
- Dalvik虚拟机中so的加载和JNI调用
- AndroidStudio Gradle项目中添加JNI生成文件(.so文件)
- JNI---在c中使用log 和生成so库
- Android studio项目中添加JNI so库
- Dalvik虚拟机中so的加载和JNI调用
- Jni从dll或so文件中获取信息
- Android Studio中使用JNI和第三方.so库
- Cannot load mod_jk.so
- gradle指定java主类
- Objective-C基础之类别,扩展,协议
- [2016/07/05] LeetCode / Java - Day 12 -
- GridView通用分页模型
- ios弹簧动画实现
- jni中load *.so
- spark利用MLlib实现kmeans算法实例
- 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低存入文本文件
- pyspider HTTP 599: SSL certificate problem: self signed certificate in certificate chain解决方法
- Android存储空间不足下,APP出现奔溃等情况
- sqlserver处理并发控制的问题
- UIWebView获得网页内容(HTML源码)、加载本地HTML文件
- linux下重命名文件或移动文件夹
- 计算机图形学基础(六) 光照2