Java 找不到OpenCV4Android本机方法

Java 找不到OpenCV4Android本机方法,java,android,c++,opencv,android-ndk,Java,Android,C++,Opencv,Android Ndk,对于我的第一个Android应用程序,我正在尝试创建一个将图像缝合在一起的应用程序。在设置了UI并做了一些研究之后,OpenCV4Android似乎是一个不错的选择。不幸的是,OpenCV4Android的图像拼接部分要求我使用Android NDK。为了进行设置,我除了使用现有代码外还使用了其他代码 教程中的代码在我的项目中正常工作,但当我尝试在Java部分中使用类似于的“Mat”或“Imgcodecs.imread(…)”时,我会出现以下错误: 4-16 21:09:02.116 28450

对于我的第一个Android应用程序,我正在尝试创建一个将图像缝合在一起的应用程序。在设置了UI并做了一些研究之后,OpenCV4Android似乎是一个不错的选择。不幸的是,OpenCV4Android的图像拼接部分要求我使用Android NDK。为了进行设置,我除了使用现有代码外还使用了其他代码

教程中的代码在我的项目中正常工作,但当我尝试在Java部分中使用类似于的“Mat”或“Imgcodecs.imread(…)”时,我会出现以下错误:

4-16 21:09:02.116 28450-28450/aaron.picstitch E/AndroidRuntime: FATAL EXCEPTION: main
  Process: aaron.picstitch, PID: 28450
  java.lang.UnsatisfiedLinkError: Native method not found: org.opencv.core.Mat.n_Mat:(III)J
  at org.opencv.core.Mat.n_Mat(Native Method)
  at org.opencv.core.Mat.<init>(Mat.java:37)
  at aaron.picstitch.CameraActivity.<init>(CameraActivity.java:46)
  at java.lang.Class.newInstanceImpl(Native Method)
  at java.lang.Class.newInstance(Class.java:1208)
  at android.app.Instrumentation.newActivity(Instrumentation.java:1067)
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2297)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
  at android.app.ActivityThread.access$900(ActivityThread.java:175)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
  at android.os.Handler.dispatchMessage(Handler.java:102)
  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)
似乎对大多数人有效,但对我无效。如果可能的话,我正在寻求帮助,试图使OpenCV对象(如“Mat”)在我现有的Java代码中工作

关于类似stackoverflow问题的其他人也被要求查看gradle.build(模块应用程序),因此:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

defaultConfig {
    applicationId "aaron.picstitch"
    minSdkVersion 18
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"

    ndk {
        moduleName "MyLibrary"
    }
    sourceSets.main {
        jni.srcDirs = []
        jniLibs.srcDir "src/main/libs"
    }
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

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

非常感谢您的帮助。

您如何构建libMyLibrary.so,应该在src/main/libs文件夹中找到它?@AlexCohn我为ndk构建创建了一个工具(在YouTube教程的~1:02),然后在jni文件夹中使用它(在YouTube教程的~7:33)。除Program path.Cool外,我的值相同。图书馆真的建成了吗?你是从Java加载的吗?@AlexCohn是的,我想是的?我只是照做了,OpenCVLoader部分仍然不工作,实际上它刚刚开始工作。我的错误是使用了两个静态{}块,一个用于OpenCVLoader,另一个用于NDK库。我想如果不这样做,OpenCVLoader就可以工作了。
apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

defaultConfig {
    applicationId "aaron.picstitch"
    minSdkVersion 18
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"

    ndk {
        moduleName "MyLibrary"
    }
    sourceSets.main {
        jni.srcDirs = []
        jniLibs.srcDir "src/main/libs"
    }
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

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