【发布时间】:2015-11-05 20:37:29
【问题描述】:
我遇到了一个 android 5.1 64 位共享库加载问题。
系统:android 5.1。
我的 apk 将两个 xx.so(libA.so & libB.so,libB.so 依赖于 libA.so) 压缩成一个原始文件以限制 apk 文件大小,启动时,应用程序将此原始文件解压缩回原点libA.so & libB.so 到目录 /data/data/MyApp/files/arm64-v8a ,现在应用程序通过传递绝对路径调用 System.load:
System.load("/data/data/MyApp/files/arm64-v8a/libA.so"); //Success
System.load("/data/data/MyApp/files/arm64-v8a/libB.so"); //Fail
和上面的cmets一样,第一次加载libA.so是成功的,但是加载libB.so失败了,错误信息如下: dlopen(“/data/data/MyApp/files/arm64-v8a/libB.so”,RTLD_LAZY)失败:dlopen 失败:找不到库“libA.so”。 但是 /data/data/MyApp/files/arm64-v8a/libA.so 确实存在,可能不在正确的位置?
我测试了32位版本,不存在这个问题。 并且我也在另一台设备Sumsumg Galaxy S6 系统Android5.0 上测试过,也不存在这个问题。
我尝试将 libA.so 复制到 /data/data/MyApp/lib,但出现权限拒绝错误。
有没有人遇到同样的问题或有解决这个问题的想法?
【问题讨论】:
标签: android load 64-bit shared-libraries