【问题标题】:java.lang.UnsatisfiedLinkError: Couldn't load native_sample from loaderjava.lang.UnsatisfiedLinkError: 无法从加载器加载 native_sample
【发布时间】:2015-12-13 08:00:48
【问题描述】:

错误:

Process: com.example.syafiq.opencvoi, PID: 7760
java.lang.UnsatisfiedLinkError: Couldn't load native_sample from loader dalvik.system.PathClassLoader[dexPath=/data/app/com.example.syafiq.opencvoi-13.apk,libraryPath=/data/app-lib/com.example.syafiq.opencvoi-13]: findLibrary returned null
at java.lang.Runtime.loadLibrary(Runtime.java:358)
at java.lang.System.loadLibrary(System.java:526)
at com.example.syafiq.opencvoi.Sample3Native$1.onManagerConnected(Sample3Native.java:79)
at org.opencv.android.AsyncServiceHelper$3.onServiceConnected(AsyncServiceHelper.java:319)
at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1114)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1131)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5602)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)

sample3Native.java 第 79 行是:

 public void onManagerConnected(int status) {
        switch (status) {
            case LoaderCallbackInterface.SUCCESS:
            {
                Log.i(TAG, "OpenCV loaded successfully");

                // Load native library after(!) OpenCV initialization
                System.loadLibrary("native_sample");

AsyncServiceHelper.Java 第 319 行是

mUserAppCallback.onManagerConnected(status);

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
include ../../sdk/native/jni/OpenCV.mk
LOCAL_MODULE    := native_sample
LOCAL_SRC_FILES := jni_part.cpp
LOCAL_LDLIBS +=  -llog -ldl
include $(BUILD_SHARED_LIBRARY)

还有application.mk

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi armeabi-v7a
LOCAL_ARM_NEON := true

代码中没有错误。我尝试了几种解决方案,但结果仍然相同,代码是从开源网站获得的。我对android studio还不够好,我还在学习。我希望你们能帮助我解决这个错误。我非常感谢您的帮助和考虑,以帮助我并解决我的错误。感谢您的宝贵时间:)

【问题讨论】:

  • 可能你的手机不是 armeabi 或 armeabi-v7a 。你能在你的手机上去 /data/app-lib/com.example.syafiq.opencvoi-13 吗?
  • 我已经安装了 armeabi-v7a 但我没有安装 armeabi。是否可以?因为我的朋友告诉我只安装 armeabi-v7a 没关系。如果不是,我现在可以安装 armeabi。
  • 你的应用是安卓应用吗?
  • 是的,它是一个安卓应用
  • 可以展示一下你的build.gradle吗?或者可以提供代码链接吗?

标签: java android classloader


【解决方案1】:

从我的角度来看,您的“native_sample”库的版本有问题。正如documentation所写的那样

如果 Java 虚拟机找不到合适的,则抛出 声明为本地的方法的本地语言定义。

您的类路径中可能有两个版本,而 jvm 加载了错误的版本。所以它找到了库,但是在类加载过程中发现不一致,可能需要的方法是在以后的库版本中添加的。

我建议试试这个:

System.load(String path) //with an absolute path to needed lib

另见:Difference between System.load() and System.loadLibrary in Java

【讨论】:

  • 谢谢,我先累了再看你给我的链接。
【解决方案2】:
apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.example.syafiq.opencvoi"
        minSdkVersion 19
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets {

           // jniLibs.srcDirs = ['libs']
       main{
         jniLibs{
           srcDir 'libs'
         }
       }

    }


}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile project(':libraries:opencv')
}

【讨论】:

  • 它给了我一个错误:/ "No such property: srcDirs for class: com.android.build.gradle.internal.api.DefaultAndroidSourceSet_Decorated"
  • 嘿,很抱歉回复晚了,感谢您编辑它。它给了我不同的错误“找不到 Gradle DSL 方法:srcDir():可能的原因:项目 'OpenCVoi' 可能使用不包含该方法的 Gradle 版本。另一个原因是:构建文件可能缺少 Gradle插件”:/
  • 你能把你的项目推到github上吗?或者你能提供你找到代码的链接吗?单文件很难解决。
  • 这里是小太阳,抱歉回复晚了github.com/Ajay191191/Opencv-Face-Recognition
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 2020-08-16
相关资源
最近更新 更多