我正在开发适用于Android OpenCV的Android Studio,但是当我编译eclipse中的项目时,我收到了这个错误:
D:\ software \ AndroidStudioProjects \ CameraMe \ openCVSamplefacedetection \ src \ main \ jni \ DetectionBasedTracker_jni.cpp:2:33:致命错误:opencv2 / core / core.hpp:没有这样的文件或目录
我想没有找到opencv的标题,但我不知道错误。
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)
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android-8
#include <DetectionBasedTracker_jni.h>
#include <opencv2/core/core.hpp>
#include <opencv2/contrib/detection_based_tracker.hpp>
......
答案 0 :(得分:10)
当您使用Android Studio时,默认情况下会忽略您的Makefile,并且会动态生成新的Makefile,而不会正确引用OpenCV,因为它不受支持。
这就是NDK构建目前在Android Studio中运行的方式,它已被弃用,而更好的方法是在工作中。
您可以停用此内置NDK支持,并通过在 build.gradle 中执行此操作来改为使用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还支持 x86 和 mips ,所以您还可以轻松扩展对这些平台的支持。