Android Studio with opencv for android ndk, opencv header 找不到文件

Android Studio with opencv for android ndk, opencv header files not found

我正要去 Android Studio 进行 Android OpenCV 开发,但是当我编译在 eclipse 中正常的项目时,我得到了这个错误:

D:\software\AndroidStudioProjects\CameraMe\openCVSamplefacedetection\src\main\jni\DetectionBasedTracker_jni.cpp:2:33: fatal error: opencv2/core/core.hpp: No such file or directory

我猜是没有找到opencv的headers,但我不知道哪里出了问题。

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

#OPENCV_CAMERA_MODULES:=off
#OPENCV_INSTALL_MODULES:=off
#OPENCV_LIB_TYPE:=SHARED
include D:\eclipse\OpenCV_2.4.9_android_sdk\sdk\native\jni\OpenCV.mk

LOCAL_SRC_FILES  := DetectionBasedTracker_jni.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_LDLIBS     += -llog -ldl

LOCAL_MODULE     := detection_based_tracker

include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android-8

DetectionBasedTracker_jni.cpp

#include <DetectionBasedTracker_jni.h>
#include <opencv2/core/core.hpp>
#include <opencv2/contrib/detection_based_tracker.hpp>
......

当您使用 Android Studio 时,默认情况下您的 Makefile 会被忽略,并且会即时生成新的 Makefile,而不会正确引用 OpenCV,因为它不受支持。

这就是 NDK 构建目前在 Android Studio 中的工作方式,它已被弃用,而更好的方法正在开发中。

您可以通过在 build.gradle:

中执行此操作来停用此内置 NDK 支持并改用 Makefile
import org.apache.tools.ant.taskdefs.condition.Os

apply plugin: 'com.android.application'

android {
    ...

    sourceSets.main {
        jniLibs.srcDir 'src/main/libs' //set .so files directory to libs
        jni.srcDirs = [] //disable automatic ndk-build call
    }

    // call regular ndk-build(.cmd) script from app directory
    task ndkBuild(type: Exec) {
        if (Os.isFamily(Os.FAMILY_WINDOWS)) {
            commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath
        } else {
            commandLine 'ndk-build', '-C', file('src/main').absolutePath
        }
    }

    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn ndkBuild
    }
}

顺便说一句,我看到你只将 APP_ABI 设置为 armeabi-v7a,但 OpenCV 还支持 x86mips,因此您也可以轻松扩展对这些平台的支持。