为什么我的本机库无法加载到我的 Android 应用程序中?

Why won't my native library load in my Android App?

我在我的应用程序的 /libs/armeabi/ 文件夹中放置了一个 .so 库(我也在 /libs 文件夹中尝试过),然后尝试使用静态方法加载。我遇到 UnsatisfiedLinkError/null 错误。

我已经尝试了静态方法中的完整路径,但仍然出现错误。

static {
    System.loadLibrary("/data/data/com.imtroymiller.myapp/lib/armeabi/libmylib.so");
}

这是我收到的完整错误消息。

    08-04 12:49:22.204: E/AndroidRuntime(3352): java.lang.UnsatisfiedLinkError: Couldn't load /data/data/com.imtroymiller.myapp/lib/armeabi/libmylib.so from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.imtroymiller.myapp-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.imtroymiller.myapp-1, /vendor/lib, /system/lib]]]: findLibrary returned null

我已经阅读了下面的教程,并且了解如何使用 NDK 从源代码创建库,但我正在尝试将现有库加载到我的应用程序中,以便我可以 运行依赖库的可执行文件。

http://code.tutsplus.com/tutorials/ndk-tutorial--mobile-2152

我已经在两台设备上试过了,都拥有 root 访问权限。一个是CyanogenMod 11,一个是CyanogenMod 12.

编辑:我能够使用...加载它们

System.load("/data/data/com.imtroymiller.myapp/lib/libmylib.so");

看起来 System.load 取路径名而 System.loadLibrary 取库名。但是两者都加载了库。

您可以只使用相对路径:System.loadLibrary("mylib")

如果您为 armeabi 架构构建了库(这是默认的),路径 libs/armeabi/ 是正确的

我能够使用...加载它们

System.load("/data/data/com.imtroymiller.myapp/lib/libmylib.so");

好像System.load取路径名,System.loadLibrary取库名。但是两者都会加载库。