Android NDK java.lang.UnsatisfiedLinkError:findLibrary返回null

Lee*_*xon 51 java-native-interface android-ndk

您的Android JNI应用中出现上述错误?继续阅读......

在前面,我会说我已经用我自己的方式解决了这个问题,但是我觉得Android构建系统中的某些内容(可能是关于Eclipse)已经破了,我希望能够为其他人节省数小时的痛苦.也许其他人已经遇到过这个问题,可以评论对他们有用的东西.

有一段时间,我有一个Android项目,其中包含一些我使用NDK开发的JNI代码.然后,今天,我在java代码中改变了一些东西,然后poof,我再也无法加载我的JNI库了.它失败了,例如:

E/AndroidRuntime(999):java.lang.UnsatisfiedLinkError:无法加载mylibrary:findLibrary返回null

我用Google搜索并尝试了所有内容(重建,关闭和重新启动Eclipse等等)

什么最终解决了我的问题?在尝试另一次运行之前,我从设备上物理卸载了我的应用程序.而已.在那之后,它奏效了.什么对你有用?

Roy*_*Roy 15

如果您有LOCAL_MODULE"libXYZ"的本机项目,请确保将其加载为

System.loadLibrary("XYZ");
Run Code Online (Sandbox Code Playgroud)


Mik*_*ike 13

如果您尝试在模拟器中运行应用程序,请确保在"运行" - >"运行配置" - >"目标"中指定了正确的体系结构(您可能需要使用"窗口" - >"Android虚拟设备管理器"添加所需的模拟器).

尝试在英特尔模拟器中执行应用程序时,我遇到了同样的问题,而应用程序正在使用为ARM预编译的库.


Bil*_*Hoo 11

我也有这个问题,但对于我的情况,我在另一个项目中使用我的库.我不认为这是eclipse或android-ndk的问题.

你可以查看这些可以导致的提示,UnsatisfiedLinkError它对我来说很好,祝你好运:)

  1. 必须遵循JNI接口的命名规则(你说你之前成功加载了库,所以你可以忽略它)并且库必须在目录中 /your project/libs/armeabi/
  2. 如果你确保上面的事情已经完成,那么你必须确保你生成的libs已经安装到你的app.apk中,否则它仍然无法找到lib并且你会发现错误.要执行此操作,请右键单击您的eclipse项目名称,然后进入构建路径 - 配置构建路径,在左侧菜单中选择Java Build Path,然后单击右侧面板上的Order and Export选项卡,选中之前的复选框您的库名称,然后单击确定,然后清理,重建并运行您的项目,并将您的库安装到app.apk,事情已完成.

在此输入图像描述

在此输入图像描述

在此输入图像描述

编辑:

  1. UnsatisfiedLinkError总而言之,如果库未安装到您的app.apk中,则会抛出它,因此无法成功链接.


小智 6

在libs文件夹中,我创建了一个名为armeabi-v7a的新文件夹,并将.so文件从armeabi复制到新文件夹.它解决了这个错误.


adi*_*tya 6

就我而言,在制作系统应用程序时,问题与​​权限有关.将" .so "文件放入/system/lib//system/vendor/lib/目录后,我将默认分配的权限600修改为755.它运行良好.


Dan*_*iel 5

我遇到了同样的问题,这些是我对项目的一些问题:


  1. 从转变System.load("hello-test");System.loadLibrary("hello-test");;
  2. 将C函数签名更改为JNIEXPORT jstring Java_com_example_testndk_TestNDK_funcNami(JNIEnv* env, jobject thiz):此处使用Java_<java_package_name>_<java-class-name>_<function-name>;
  3. local.properties在我的例子中添加NDK路径ndk.dir=<my-path-to-ndk-directory>; 和
  4. 更新我build.gradle的内容还包括defaultConfig:ndk { moduleName "hello-test" }.

  • 包裹名字: com.example.testndk
  • Java类名: TestNDK
  • C源名称: hello-test.c
  • 项目结构中的JNI目录位置: AndroidProjects/TestNDK/app/src/main/jni

IDE:Android Studio 0.8.1.

  • 对我来说#4(包括defaultConfig中的"ndk")就可以了.谢谢! (2认同)

icy*_*sor 2

刚刚遇到了类似的问题。

查看您的 /data/data/your.package.name/lib 目录

当我在我的包目录中时,它当前显示:

lib -> /mismatched_uid/settings_10037/fs_1000
Run Code Online (Sandbox Code Playgroud)

可能我不小心切换了sharedUserId,因此无法再访问该库。

  • 你能澄清一下吗?我遇到了同样的错误,你刚才所说的远远超出了我的能力范围 (3认同)