【问题标题】:android .so files not getting extracted in /data/data/<package>/libandroid .so 文件未在 /data/data/<package>/lib 中提取
【发布时间】:2013-10-02 15:13:37
【问题描述】:

我正在开发一个原生 android 应用程序并使用一个生成 .so 文件的开源库。面对奇怪的行为。 前几次,应用程序运行良好,库被加载。但现在它无法找到图书馆并给出 -

java.lang.UnsatisfiedLinkError: 无法加载:findLibrary 返回null

。以下是一些观察: 1. 当我提取 .apk 文件时,库 (.so) 存在于“lib/armeabi”文件夹下。 2.但是当我尝试将库(.so)搜索到设备提取路径中时

/数据/数据//lib/ ,它不存在。关于为什么会发生这种奇怪行为以及为什么 .so 文件没有被提取到 /data/data/com.ibm.homeScreen/lib/ 文件夹下的任何建议。

提前致谢!

【问题讨论】:

    标签: android unsatisfiedlinkerror android-native-library


    【解决方案1】:

    如果您使用 eclipse,请检查构建路径设置: 右键单击您的项目 --> 属性 --> JavaBuildPath --> 订购和导出(是一个选项卡)并在此处检查库是否已标记(复选框)以导出。 还可以设置本机库路径。您可以在 Library Tab --> Android Private Libraries --> 右侧的 EDIT Button 中找到该选项

    This 也有帮助

    【讨论】:

    • 这似乎无关紧要,尤其是当发布者说 .so 存在于 apk 中但未在设备上解压缩时。
    【解决方案2】:

    对于 Eclipse 项目,只需将所有 *.so 文件放在 armeabi 或 armeabi-v7a 文件夹中,然后将文件夹放在项目中的 /libs 文件夹中。编译,*.so文件会自动导入/data/data//lib

    对于 Android 工作室,上述方法对我不起作用。相反,我必须将 armeabi 和 armeabi-v7a 文件夹放入 /jniLibs 而不是 /libs。请注意,我使用的是 Gradle 0.10.+,但不确定它是否适用于较旧的 Gradle。

    【讨论】:

      【解决方案3】:

      您可以在此处找到有关此问题的更多信息: Why do some Android phones cause our app to throw an java.lang.UnsatisfiedLinkError? https://code.google.com/p/android/issues/detail?id=59420

      stackoverflow 链接还包含一些代码以及(当前)最后一个答案中的解决方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-31
        相关资源
        最近更新 更多