Android ndk Android NDK java.lang.UnsatisfiedLink错误:findLibrary返回null
您的Android JNI应用程序中是否存在上述错误?继续读 首先,我要说的是,我已经用自己的方式解决了这个问题,但我觉得Android构建系统中的某些东西(可能是关于Eclipse的)坏了,我希望能为其他人省去几个小时的痛苦。也许其他人也遇到过这个问题,可以评论什么对他们有效 有一段时间,我有一个Android项目,其中包含一些我使用NDK开发的JNI代码。然后,今天,我更改了java代码中的一些内容,然后砰的一声,我无法再加载我的JNI库了。它失败,出现如下异常: E/AndroidRuntime(999):java.lang.UnsatisfiedLinkError:无法加载mylibrary:findLibrary返回null 我在谷歌上搜索并尝试了一切(重建、关闭和重新启动Eclipse等)Android ndk Android NDK java.lang.UnsatisfiedLink错误:findLibrary返回null,android-ndk,java-native-interface,Android Ndk,Java Native Interface,您的Android JNI应用程序中是否存在上述错误?继续读 首先,我要说的是,我已经用自己的方式解决了这个问题,但我觉得Android构建系统中的某些东西(可能是关于Eclipse的)坏了,我希望能为其他人省去几个小时的痛苦。也许其他人也遇到过这个问题,可以评论什么对他们有效 有一段时间,我有一个Android项目,其中包含一些我使用NDK开发的JNI代码。然后,今天,我更改了java代码中的一些内容,然后砰的一声,我无法再加载我的JNI库了。它失败,出现如下异常: E/AndroidRunt
什么最终解决了我的问题?在尝试另一次运行之前,我已从设备上物理卸载了我的应用程序。就这样。在那之后,它成功了。什么对你有效?只是有一个类似的问题 检查/data/data/your.package.name/lib目录 当我在我的程序包目录中登录时,它当前显示:
lib -> /mismatched_uid/settings_10037/fs_1000
可能是我不小心切换了sharedUserId,因此无法再访问库。无需根设备。.在emulator上部署应用程序并浏览文件夹也有相同的问题。
刚刚清理了这个项目,它成功了。神秘..我也有这个问题,但就我的情况而言,我正在另一个项目中使用我的LIB。我不认为这是eclipse或android ndk的问题 您可以查看这些提示,它们可能会导致
不满意的链接错误
,对我来说效果很好,祝您好运:)
/your project/libs/armeabi/
未满足的linkerror
,因此无法成功链接如果您试图在模拟器中运行应用程序,请确保在运行->运行配置->目标中指定了正确的架构(您可能需要使用窗口->Android虚拟设备管理器添加所需的模拟器)
在英特尔模拟器中尝试执行应用程序时,我遇到了相同的问题,而该应用程序使用的是为ARM预编译的库。如果您有一个带有本地_模块“libXYZ”的本机项目,请确保将其作为
System.loadLibrary("XYZ");
如果您有一个带有“libXYZ.so”的本机项目,请确保设备上不存在/system/lib/libXYZ.so。有一个痛苦的解决方法:使用
System.load("/data/data/your.package.name/lib/libXY.so")
我创建了一个名为armeabi-v7a的新文件夹,并将.so文件从armeabi复制到新文件夹中,而不是libs文件夹中的System.loadLibrary()。它解决了错误。在我的例子中,在创建系统应用程序时,问题与权限有关。将“.so”文件放入
/system/lib/
或/system/vendor/lib/
目录后,我将默认分配的权限600修改为755。它工作得很好 我也遇到了同样的问题,以下是我在项目中遇到的一些问题:
System.load(“hello测试”)更改代码>进入System.loadLibrary(“hello测试”)代码>李>
将C函数签名更改为JNIEXPORT jstring Java_com_example\u testndk\u testndk_funcNami(JNIEnv*env,jobject thiz)
:这里使用Java_uuuu
李>
将NDK路径添加到local.properties
,在我的例子中是NDK.dir=
;及
正在更新我的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。前面的答案都没有解决我的问题,但这确实解决了:一直以来,问题是没有必要的子目录和文件。我的libs文件夹中只有一个armeabi文件夹,其中包含正确的.so文件,但应该还有3个,每个文件夹中都有一个.so文件。还不确定其他三个(armeabi-v7a、mips或x86)中的哪一个是必需的,但我知道,当我将Application.mk文件添加到与Android.mk文件相同的文件夹中时,这三个文件都会自动生成,并确保其中包含以下行:
APP_ABI := all
对我来说,那一行是唯一的文本。当ndk build运行时,Application.mk文件显然会导致创建“所有”4个文件夹,并在其中创建正确的.so文件。一旦我得到Application.mk,我就再次运行ndk构建,然后在重试之前对我的Eclipse项目进行了一次清理。一切都运行得很好。我刚刚遇到了这种情况,问题是设备没有足够的空间容纳我
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
// Fixed Issue : "android studio java.lang.unsatisfiedlinkerror: couldn't load find library returned null"
// Cause : For android studio : The JNI files should be placed in the /src/main/jniLibs folder.
// Fix : Mapping the jniLibs 's source Directories with Lib's folder
jniLibs.srcDirs = ['libs']
}
extern "C"
extern "C"
jstring
Java_lara_myapplication_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
//libs is the location of your library's folder, It varies in diffarent projects like src/main/libs etc.
android {
sourceSets.main {
jniLibs.srcDir 'libs'
}
}
-keepclasseswithmembers,allowshrinking,allowoptimization class com.zk.android.jni.Device {
native <methods>; }