如题,有没有谁做过调用第三方so的啊,这个应该是个比较常规的问题,可是比较菜,网上查了好多关于这个的,自己写好了调用第三方so的代码,但是运行的时候总是提示找不到第三方的so。单独调用自己写的so是可以的,刚测试过,可以得到JNI的输出结果。
求大神知道啊。Android.mk
LOCAL_PATH := $(call my-dir)
### Link libXXX.so
include $(CLEAR_VARS)
LOCAL_MODULE := xxx
##
LOCAL_SRC_FILES := libxxx.so
include $(PREBUILT_SHARED_LIBRARY)
##
include $(CLEAR_VARS)
LOCAL_MODULE := callxxx
LOCAL_SRC_FILES := callxxx.c
LOCAL_SHARED_LIBRARIES := xxx
##LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)callxxx.c
#include <string.h>
#include <jni.h>
#include <dlfcn.h>jobject (*xxx) (jobject, jint, jstring, jint);JNIEXPORT jobject JNICALL Java_com_abc
(JNIEnv * env, jobject thiz, jobject injob, jint type, jstring addr, jint num)
{
void *p;
p = dlopen("/data/data/com.a.abccc/lib/librecongi.so",RTLD_NOW);
xxx= dlsym(p,"xxx"); return (*xxx)(injob,type,addr,numofcandi);
}
JNIEXPORT jstring JNICALL Java_com_AddToList_testJNI
(JNIEnv * env, jobject job)
{
return (*env)->NewStringUTF(env, "Hello from IME !");
}
求大神知道啊。Android.mk
LOCAL_PATH := $(call my-dir)
### Link libXXX.so
include $(CLEAR_VARS)
LOCAL_MODULE := xxx
##
LOCAL_SRC_FILES := libxxx.so
include $(PREBUILT_SHARED_LIBRARY)
##
include $(CLEAR_VARS)
LOCAL_MODULE := callxxx
LOCAL_SRC_FILES := callxxx.c
LOCAL_SHARED_LIBRARIES := xxx
##LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)callxxx.c
#include <string.h>
#include <jni.h>
#include <dlfcn.h>jobject (*xxx) (jobject, jint, jstring, jint);JNIEXPORT jobject JNICALL Java_com_abc
(JNIEnv * env, jobject thiz, jobject injob, jint type, jstring addr, jint num)
{
void *p;
p = dlopen("/data/data/com.a.abccc/lib/librecongi.so",RTLD_NOW);
xxx= dlsym(p,"xxx"); return (*xxx)(injob,type,addr,numofcandi);
}
JNIEXPORT jstring JNICALL Java_com_AddToList_testJNI
(JNIEnv * env, jobject job)
{
return (*env)->NewStringUTF(env, "Hello from IME !");
}
{
System.loadLibrary("xxx") ;
System.loadLibrary("callxxx") ;
}
这是java里load .so文件的方式,是不是这样load不对呢?
System.loadLibrary 不会查找 data/data/com.a.abccc/lib/ 目录
{
System.loadLibrary("xxx") ;
System.loadLibrary("callxxx") ;
}
System.loadLibrary 的搜索路径由'java.library.path' 来决定
System.out.println('加载库时搜索的路径列表:\n'+System.getProperty('java.library.path'));
如果不在这个目录下肯定找不到
但是在/data/data/工程目录/lib里找到了第三方so和我写的so。我用System.load("/data/data/工程目录/lib/libxxx.so");还是提示找不到,无语了。能帮我再看看吗,谢谢你了。
查找的目录是 APK lib path + system lib path能把报 错信息贴下吗?是找不到还是load fail
07-03 15:26:02.288: E/AndroidRuntime(9596): at java.lang.Runtime.loadLibrary(Runtime.java:461)
07-03 15:26:02.288: E/AndroidRuntime(9596): at java.lang.System.loadLibrary(System.java:557)
07-03 15:26:02.288: E/AndroidRuntime(9596): at com.a.abcc.add.<clinit>(add.java:28)
07-03 15:26:02.288: E/AndroidRuntime(9596): ... 21 more
谢谢你。
是有其他基于android开发的系统?
放到系统lib里 位置是什么我不记得了 你查查看
[email protected]
thank you