【问题标题】:Opencv Library return nullOpencv 库返回 null
【发布时间】:2016-04-28 06:05:40
【问题描述】:

当我在 android Studio 中集成 Open cv 以进行眼睛检测时。集成消息后打印 Opencv 安装成功消息生成但在他们给出错误之后。

无法从加载器加载 detection_based_tracker dalvik.system.PathClassLoader[DexPathList[[zip 文件“/data/app/com.example.admin.lanskart-2.apk”],nativeLibraryDirectories=[/data/app-lib/com.example.admin.lanskart-2,/vendor/lib,/system/lib ]]]:查找库 返回null

Process: com.example.admin.lanskart, PID: 24341
java.lang.UnsatisfiedLinkError: Couldn't load detection_based_tracker from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.admin.lanskart-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.admin.lanskart-2, /vendor/lib, /system/lib]]]: findLibrary returned null
        at java.lang.Runtime.loadLibrary(Runtime.java:365)
        at java.lang.System.loadLibrary(System.java:553)
        at com.example.admin.lanskart.MainActivity$1.onManagerConnected(MainActivity.java:69)
        at org.opencv.android.AsyncServiceHelper$3.onServiceConnected(AsyncServiceHelper.java:319)
        at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1140)
        at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1157)
        at android.os.Handler.handleCallback(Handler.java:808)
        at android.os.Handler.dispatchMessage(Handler.java:103)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:5299)
        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:825)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641)
        at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 我认为您没有提供足够的详细信息来获得答案。你尝试了什么?您是否检查了缺少库的路径?等等。想象一下,你在我们这里,必须解决这个问题......

标签: android opencv


【解决方案1】:

您需要在 gradle 中定义 jni 源的目录。你的应用 gradle 应该是这样的:

   apply plugin: 'com.android.model.application'
model {
    android {
        compileSdkVersion = 22
        buildToolsVersion = "23.0.0"

        defaultConfig.with {
            applicationId = "enter.your.packagename"
            minSdkVersion.apiLevel = 10
            targetSdkVersion.apiLevel = 22
            versionCode = 1
            versionName = "1.0"
        }


    }

    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles += file('proguard-rules.pro')
        }
    }

    /*
     * native build settings
     */
    android.ndk {
        moduleName = "ndklibrarysample"
        cppFlags += ["-std=c++11", "-fexceptions", "-frtti"]
        cppFlags  += "-I${file("D:yourpathtothesefiles/OpenCV-3.0.0-android-sdk-1/OpenCV-android-sdk/sdk/native/jni/include")}".toString()
        ldLibs += ["android", "EGL", "GLESv2", "dl", "log", "z"]
        stl = "gnustl_static"
    }

    android.productFlavors {
        create("arm") {
            ndk.with {
                abiFilters += "armeabi"

                File curDir = file('./')
                curDir = file(curDir.absolutePath)
                String libsDir = curDir.absolutePath + "\\src\\main\\jniLibs\\armeabi\\"

                ldLibs += libsDir + "libopencv_java3.so"
            }
        }
        create("armv7") {
            ndk.with {
                abiFilters += "armeabi-v7a"

                File curDir = file('./')
                curDir = file(curDir.absolutePath)
                String libsDir = curDir.absolutePath + "\\src\\main\\jniLibs\\armeabi-v7a\\"

                ldLibs += libsDir + "libopencv_java3.so"
            }
        }
        create("x86") {
            ndk.with {
                abiFilters += "x86"

                File curDir = file('./')
                curDir = file(curDir.absolutePath)
                String libsDir = curDir.absolutePath + "\\src\\main\\jniLibs\\x86\\"

                ldLibs += libsDir + "libopencv_java3.so"
            }
        }
        create("mips") {
            ndk.with {
                abiFilters += "mips"

                File curDir = file('./')
                curDir = file(curDir.absolutePath)
                String libsDir = curDir.absolutePath + "\\src\\main\\jniLibs\\mips\\"

                ldLibs += libsDir + "libopencv_java3.so"
            }
        }
        create("fat") {

        }
    }
}

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

并将你的类路径从你的项目 gradle 文件更改为这个版本,并确保你的 local.properties 文件的 ndk 路径

classpath 'com.android.tools.build:gradle-experimental:0.2.0'

【讨论】:

  • 不客气 .. :) 所以接受我的回答(点赞)@samyakjain
  • @samyakjain 如果有帮助,请接受我的回答,如果您不能接受,请点赞
猜你喜欢
  • 2011-10-07
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
  • 2012-02-07
  • 2020-07-19
  • 2021-12-08
相关资源
最近更新 更多