【问题标题】:Android Studio with opencv for android ndk, opencv header files not foundAndroid Studio with opencv for android ndk, opencv 头文件未找到
【发布时间】:2015-05-26 15:58:04
【问题描述】:

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

D:\software\AndroidStudioProjects\CameraMe\openCVSamplefacedetection\src\main\jni\DetectionBasedTracker_jni.cpp:2:33:致命错误:opencv2/core/core.hpp:没有这样的文件或目录

我猜opencv的头文件没找到,但不知道怎么回事。

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)

应用程序.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 opencv android-studio android-ndk


    【解决方案1】:

    当您使用 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,所以你可以还可以轻松地将您的支持扩展到这些平台。

    【讨论】:

    • @ph0b 你能帮我吗?我正在尝试实现人脸检测并在 jni 中面临许多错误。我不知道如何解决这些问题。
    • 感谢您的建议,但是当我这样做时,Android Studio jniLibs 和 jni 带有下划线,并出现错误“无法解析符号 jniLibs”。我希望我可以发布我的整个应用程序 build.gradle 文件,但这些响应评论框中没有空间。我应该发布更多详细信息作为“答案”吗?有什么建议吗?
    • 我刚刚在另一个帖子上发布了更多详细信息和一些随附的屏幕截图这可以让它快速浏览一下,将不胜感激
    • 它几乎用 gradle-experimental 完成了,现在有一种新的、新的方法正在使用 cmake:tools.android.com/tech-docs/new-build-system/…
    • 这样做但我得到“在任务中找不到属性'Os'”,似乎 gradle 出于某种原因无法识别“Os”......有什么建议吗?
    猜你喜欢
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    相关资源
    最近更新 更多