1

我正在尝试使用 Java 反射加载一个 Android 本机库,但在运行时找不到该库。通常我加载一个本机库:

System.loadLibrary("mylib");

一切都按预期工作。现在我尝试loadLibrary用反射调用该方法,如下所示:

Class<?> system = Class.forName("java.lang.System");
Method loadLibrary = system.getDeclaredMethod("loadLibrary", String.class);
loadLibrary.invoke(null, "mylib");

但在运行时我得到:

Caused by: java.lang.UnsatisfiedLinkError: Library mylib not found; tried [/system/lib64/libmylib.so, /vendor/lib64/libmylib.so]
    at java.lang.Runtime.loadLibrary0(Runtime.java:1001)
    at java.lang.System.loadLibrary(System.java:1530)
    at java.lang.reflect.Method.invoke(Native Method)

似乎通过反射loadLibrary在错误的路径中查找库。这些/system/lib64:/vendor/lib64java.library.path属性的路径,但它不会在 apk 内部查看。当然,该库存在于最终的 apk 中,并且位于正确的位置,用于正确的 ABI。

笔记

我无法使用

System.load("absolute-path-to-lib/mylib.so");

因为从我打电话的地方我没有可用的路径,我没有任何ContextApplication可用的路径来检索路径。

你知道如何强制loadLibrary搜索当前的 apk 吗?谢谢!

4

0 回答 0