【发布时间】:2016-07-15 09:08:13
【问题描述】:
我是使用 Android 和 JNI 调用的新手。我已经使用 OpenCV 用 C++ 制作了一个简单的算法来检测人脸。 现在要对 Android 做同样的事情,我想从 Java 调用用 C++ 制作的算法。 问题是当我尝试编译 OpenCV 本机时,Gradle build 说:“错误:opencv2/opencv.hpp:没有这样的文件或目录” 我无法从本机 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'
}
如果有人可以帮助我,不胜感激。我对此感到害怕。
谢谢!
【问题讨论】:
标签: java c++ opencv android-ndk java-native-interface