android 动态加载的 class 无法加载 so

2016-02-18 12:34:50 +08:00
 gnaix

android 动态加载的 class 无法加载 so 。
写了一个 sdk 静态导入的时候可以调用 native 方法。
但是吧 sdk 改用动态加载的时候(通过 dexClassLoader 加载)。这个时候加载 so 的时候报错了。
报错信息: java.lang.UnsatisfiedLinkError: Couldn't load fraudmetrix: findLibrary returned null

9489 次点击
所在节点    Android
6 条回复
814084764
2016-02-18 13:39:32 +08:00
不会的。肯定是你写错了。。
gnaix
2016-02-18 14:02:45 +08:00
@814084764
try {
long e = System.currentTimeMillis();
System.loadLibrary("fraudmetrix");
Log.d("MAIN", System.currentTimeMillis() - e + "s");
} catch (UnsatisfiedLinkError var3) {
var3.printStackTrace();
}
就简单的加载代码。普通情况下是正常的,但是把这段代码放在动态加载的 class 中就抛 UnsatisfiedLinkError 了
r00tt
2016-02-18 14:42:10 +08:00
dexClassLoader 初始化的时候是可以传入 so 查找路径的,试试加入 so 的路径,必须是在当前应用的文件目录下,其他目录不行
gnaix
2016-02-18 14:42:18 +08:00
改用 System.load()可以了
faywong8888
2016-02-18 15:47:00 +08:00
肯定是 classload 的资源查找路径的问题
gnaix
2016-02-18 15:57:01 +08:00
@faywong8888 是的 刚刚发现是因为 dexClassLoader 的 libPath 参数自己设为 null 了,没用 /data/data/package/lib

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/257308

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX