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'
}
如果有人可以帮助我很感激。我对此感到害怕。
谢谢!
不工作。任何人都有在android中包含opencv本机文件?我曾经尝试过的最糟糕的任务。 –
你已经建立了opencv本地库(* .a)。删除“包含OpenCV.mk”部分,然后重试。 – EHH
我使用gradle实验0.7.2,但我不能在jni中包含opencv头文件。你有任何例子或教程解释如何做到这一点?感谢您的耐心和关注。 –