android 调用第三方so 编译通过 提示找不到第三方so

小李哥哥 2012-07-02 11:27:50
如题,有没有谁做过调用第三方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 !");
}
...全文
4958 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
oTianGaoYunDan12 2013-06-14
  • 打赏
  • 举报
回复
有android调用第三方so详细点的资料么?有的话发一份啊。 424201073@qq.com thank you
sheji105 2013-05-14
  • 打赏
  • 举报
回复
在根目录的.mk文件中加入LOCAL_JNI_SHARED_LIBRARIES := (生产的jni名字)。就可以解决问题了。
星河_SR 2012-11-15
  • 打赏
  • 举报
回复
你好,你的这个问题解决了吗? 我现在的问题和你一摸一样,就连错误信息都是一样的?你是怎么解决的啊 ?求demo 420890901qq.com 万分感谢啊
JaveZh 2012-07-06
  • 打赏
  • 举报
回复
linux下编译的就通过linux rm和cp掉那个so文件
放到系统lib里 位置是什么我不记得了 你查查看
cstk502 2012-07-05
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 的回复:]
引用 22 楼 的回复:

那你现在就是基于手机开发的吗?还是有其他的终端,我开发是基于mbox开发的,这个系统源码是经过定制的,so文件只能底层rm和cp,我的意思就是这个,我就想问你这个so也是适用于手机终端的?
引用 19 楼 的回复:

引用 18 楼 的回复:

别人的so也许只适合他自己开发这个的系统上,android是开源的,你应该不是基于现有的android开发的吧?……
[/Quote]


这个so 不适应于android 手机
小李哥哥 2012-07-05
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 的回复:]

解压apk包看看有没有so包
[/Quote]
解压过了,apk里的so跟第三方的so不一样,编译之后生成了新的so,第三方so没有打包到apk里面,怎么打包进去啊,谢谢你。
南瓜饼 2012-07-04
  • 打赏
  • 举报
回复
解压apk包看看有没有so包
小李哥哥 2012-07-04
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 的回复:]

那你现在就是基于手机开发的吗?还是有其他的终端,我开发是基于mbox开发的,这个系统源码是经过定制的,so文件只能底层rm和cp,我的意思就是这个,我就想问你这个so也是适用于手机终端的?
引用 19 楼 的回复:

引用 18 楼 的回复:

别人的so也许只适合他自己开发这个的系统上,android是开源的,你应该不是基于现有的android开发的吧?
是有其他基于andro……
[/Quote]
是的,是基于手机开发的,so是在linux下编译的,基于arm的,手机上应该可以用吧。手机上用的so有什么特别的要求吗?
JaveZh 2012-07-04
  • 打赏
  • 举报
回复
那你现在就是基于手机开发的吗?还是有其他的终端,我开发是基于mbox开发的,这个系统源码是经过定制的,so文件只能底层rm和cp,我的意思就是这个,我就想问你这个so也是适用于手机终端的?
[Quote=引用 19 楼 的回复:]

引用 18 楼 的回复:

别人的so也许只适合他自己开发这个的系统上,android是开源的,你应该不是基于现有的android开发的吧?
是有其他基于android开发的系统?

我查过第三方的so了,跟我自己写的so是一个类型的。说实话,没太明白你什么意思。呵呵,谢谢你。
[/Quote]
小李哥哥 2012-07-04
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 的回复:]

android 你直接放在libs/armeabi目录下应该就可以load了,你在看看加载名字你的名字是否正确 如果是方法找不到一般就是你的jni定义有问题
[/Quote]
libs/armeabi目录下ndk-build之后就有了第三方的库,但是还是找不到。是找不到库,不是方法。谢谢你的回复。
maggiccrystal_3 2012-07-04
  • 打赏
  • 举报
回复
android 你直接放在libs/armeabi目录下应该就可以load了,你在看看加载名字你的名字是否正确 如果是方法找不到一般就是你的jni定义有问题
小李哥哥 2012-07-04
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

别人的so也许只适合他自己开发这个的系统上,android是开源的,你应该不是基于现有的android开发的吧?
是有其他基于android开发的系统?
[/Quote]
我查过第三方的so了,跟我自己写的so是一个类型的。说实话,没太明白你什么意思。呵呵,谢谢你。
JaveZh 2012-07-04
  • 打赏
  • 举报
回复
别人的so也许只适合他自己开发这个的系统上,android是开源的,你应该不是基于现有的android开发的吧?
是有其他基于android开发的系统?
小李哥哥 2012-07-04
  • 打赏
  • 举报
回复
有没有人知道啊?求帮助啊。
小李哥哥 2012-07-03
  • 打赏
  • 举报
回复
求帮助啊。
小李哥哥 2012-07-03
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
查找的目录是 APK lib path + system lib path

能把报 错信息贴下吗?是找不到还是load fail
[/Quote]
07-03 15:26:02.288: E/AndroidRuntime(9596): Caused by: java.lang.UnsatisfiedLinkError: Library xxx not found
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
谢谢你。
cstk502 2012-07-03
  • 打赏
  • 举报
回复
第三方的so文件是在NDK 环境下编译的么?
cstk502 2012-07-03
  • 打赏
  • 举报
回复

查找的目录是 APK lib path + system lib path

能把报 错信息贴下吗?是找不到还是load fail
小李哥哥 2012-07-03
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

第三方so 放到 /system/lib 下测试一下 看能行不
[/Quote]
测试过了,之前我自己写的so调用的时候是可以成功的,但是/system/lib下没有我写的so,这是怎么回事呢?
cstk502 2012-07-03
  • 打赏
  • 举报
回复
能不能把报错信息发下
加载更多回复(10)

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧