【问题标题】:Why won't my native library load in my Android App?为什么我的原生库无法加载到我的 Android 应用程序中?
【发布时间】:2015-08-04 20:05:17
【问题描述】:

我在我的应用程序的 /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 使用库名。但两者都加载了库。

【问题讨论】:

    标签: android android-ndk null native unsatisfiedlinkerror


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-09
        相关资源
        最近更新 更多