2016-07-15 104 views
0

我是使用Android和JNI调用的新手。我使用OpenCV完成了一个简单的C++算法,用于检测人脸。 现在要为Android做同样的事情,我想调用Java中用C++编写的算法。 问题是,当我尝试编译OpenCV本地,Gradle构建说:“错误:opencv2/opencv.hpp:没有这样的文件或目录” 我不能从原生OpenCV编译标头。如何在Android中使用jni调用编译OpenCV原生码

这是我的Android.mk文件:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 


# OpenCV 
OPENCV_INSTALL_MODULES:=on 
OPENCV_CAMERA_MODULES:=on 
OPENCV_LIB_TYPE:=SHARED 

include <path_to_android_OpenCV>/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk 

LOCAL_MODULE := opencvjni 
LOCAL_CFLAGS := -I<path_to_android_OpenCV>/OpenCV-android-sdk/sdk/native/jni/include -Wall -Werror 
LOCAL_SRC_FILES := openCVJNI.c detect_face.cpp 

LOCAL_C_INCLUDES += <path_to_project>/app/src/main/jni 
LOCAL_C_INCLUDES += <path_to_android_OpenCV>/OpenCV-android-sdk/sdk/native/jni/include 

LOCAL_STATIC_LIBRARIES := <path_to_android_OpenCV>/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/*.a 

LOCAL_LDLIBS += -llog -ldl 

include $(BUILD_SHARED_LIBRARY) 

这是我的Application.mk:

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

这就是我的gradle.build:

apply plugin: 'com.android.model.application' 

model { 
    android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.3" 

    defaultConfig { 
     minSdkVersion.apiLevel 22 
     targetSdkVersion.apiLevel 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles.add(file('proguard-android.txt')) 
     } 
    } 
    ndk { 
     moduleName "openCVJNI" 
     cppFlags.add("-std=c++11") // Add provisions to allow C++11 functionality 
     cppFlags.add("-fexceptions") 
     stl = "gnustl_shared" 
    } 
    task ndkBuild(type: Exec) { 
     commandLine '<_path_to_NDK>/ndk-bundle/build/ndk-build', '-C', file('app/src/main/jni').absolutePath 
    } 

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

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

如果有人可以帮助我很感激。我对此感到害怕。

谢谢!

回答

0

https://developer.android.com/ndk/guides/android_mk.html

在下面的链接,它是根据LOCAL_C_INCLUDES节中提到:

Define this variable before setting any corresponding inclusion flags via LOCAL_CFLAGS or LOCAL_CPPFLAGS.

+0

不工作。任何人都有在android中包含opencv本机文件?我曾经尝试过的最糟糕的任务。 –

+0

你已经建立了opencv本地库(* .a)。删除“包含OpenCV.mk”部分,然后重试。 – EHH

+0

我使用gradle实验0.7.2,但我不能在jni中包含opencv头文件。你有任何例子或教程解释如何做到这一点?感谢您的耐心和关注。 –

相关问题