为什么我的Android应用程序中的本机库加载失败?

时间:2015-08-04 20:05:17

标签: android android-ndk null native unsatisfiedlinkerror

我在我的应用程序的/ libs / armeabi /文件夹(我也在/ libs文件夹中试过)中放了一个.so库,然后尝试使用静态方法加载。我收到一个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

我已经在两台设备上尝试过此操作,两者都具有超级用户权限。一个是CyanogenMod 11,另一个是CyanogenMod 12。

编辑:我可以使用...

加载它们
System.load("/data/data/com.imtroymiller.myapp/lib/libmylib.so");

看起来System.load接受路径名,System.loadLibrary接受库名。但两者都加载了库。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我可以使用...

加载它们
System.load("/data/data/com.imtroymiller.myapp/lib/libmylib.so");

看起来System.load接受路径名,System.loadLibrary接受库名。但两者都会加载库。