最近小弟在进行ndk的开发中遇到无法将动态库中的函数用到自己写的JNI函数中,比如:#include <jni.h>
#include "HelloJni.h"
#include <stdio.h>
JNIEXPORT void JNICALL
Java_HelloJni_displayHelloJni(JNIEnv *env, jobject obj)
{
int i = callFuncLib(); // this function is defined in lib libmy.so return;
}
情况就是这样, 我需要调用libmy.so动态库中的函数callFuncLib(), 怎样倒入, 是在Android.mk文件中修改make文件,还是用adb push。 注:开发平台是在android 2.0请大侠们不吝指教一二!!必当高分送上
#include "HelloJni.h"
#include <stdio.h>
JNIEXPORT void JNICALL
Java_HelloJni_displayHelloJni(JNIEnv *env, jobject obj)
{
int i = callFuncLib(); // this function is defined in lib libmy.so return;
}
情况就是这样, 我需要调用libmy.so动态库中的函数callFuncLib(), 怎样倒入, 是在Android.mk文件中修改make文件,还是用adb push。 注:开发平台是在android 2.0请大侠们不吝指教一二!!必当高分送上
这儿有一个相关的帖子,你作一下参考.
libmy.so这个库没有.a的么?只有so的?jni中可以调用c的接口,但是调用java的好像不行
libmy.so不是java库,是已经写好的c库,我需要用jni封装这个库,jni不就是用来做这个的吗!
没有试过,你可以在mk文件中假如lib.so的文件名,然后jni的c实现里去调用,不过不知道能不能链到so里函数,你没有试过么?
可能是我没有表达清楚, 我的意思就是试着链连so方件。
一个可行的方法就是把我想要用到的libmy.so文件放到ndk的platform/android */*arm/lib目录下,然后在mk文件中用-lmy来连接这个动态库文件。但这个方法不足的就是你需要手动copy库文件到ndk目录下,这不是软件发布时可用到的技术,可能应付一下一时之需。问一下哪问大侠曾遇到过这个问题的,又是怎么解决的?
要不然,你得将标准linux的那堆libc及相关的函数库,再搞一套,放在一个新建的/lib或/usr/lib下面才可以。
1、dlopen方式
2、在mk文件中引用so库,这个so库要push到system/lib下
System.loadLibrary("libsetNet"); //
}
public native void setNet(String str);
2. 在mk文件下引用so文件,但不需要push到system/libs下,即使你push了,有也有可能push 不进去,因为libs目录是可读的(我说的是ndk-r4),至少我没有成功push进去。那么为什么不用到ndk自己提供的打包机制呢!用LOCAL_SHARD_LIBS标签就行了,不要忘了在JAVA层Load你想要用到的所有库,被依赖的库要放到依赖库的前面:) 大家好好享受android开发的乐趣吧!
我和你一样,也想知道.希望能够解决:[email protected]
谢谢.
我的**.so文件是在.apk包解压后直接拿到的.不知能不能去调用里面的东西.
我邮箱[email protected]