Hi,
I would like to use OpenCV in the NDK Part of my Android Project, but I can't get it to compile properly.
I am using Android Studio and did the following steps:
encouraged gradle to not generate a makefile, but to use mine instead:
The Application.mk is basically the same as in the sample projects.
apply plugin: 'com.android.library'
import org.apache.tools.ant.taskdefs.condition.Os
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
minSdkVersion 14
targetSdkVersion 22
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
sourceSets {
main {
jniLibs.srcDir 'src/main/libs'
jni.srcDirs = []
}
}
}
dependencies {
compile fileTree(dir: new File(buildDir, 'libs'), include: '*.jar')
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
println('executing ndkBuild')
def ndkBuildingDir = project.plugins.findPlugin('com.android.library').sdkHandler.getNdkFolder().absolutePath
def ndkBuildPath = ndkBuildingDir
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
ndkBuildPath = ndkBuildingDir + '/ndk-build.cmd'
} else {
ndkBuildPath = ndkBuildingDir + '/ndk-build'
}
commandLine ndkBuildPath, '-j8', '-C', file('src/main').absolutePath
}
Then I set up my Android.mk file like this:
PROJ_PATH := $(call my-dir)
LOCAL_PATH := $PROJ_PATH
include $(CLEAR_VARS)
include $(PROJ_PATH)/other_libs
OPENCV_DIR:=$(PROJ_PATH)/../../../../../OpenCV-android-sdk
OPENCV_INSTALL_MODULES:=off
OPENCV_CAMERA_MODULES:=off
OPENCV_LIB_TYPE:=LOCAL_SHARED
include $(OPENCV_DIR)/sdk/native/jni/OpenCV.mk
LOCAL_SRC_FILES := UVCCamera/UVCPreview.cpp
LOCAL_MODULE := libuvccamera
LOCAL_C_INCLUDES += $(OPENCV_DIR)/sdk/native/jni/include/
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_LDLIBS += -llog -ldl
include $(BUILD_SHARED_LIBRARY)
I am unsure on how to set LOCAL_SRC_FILES and LOCAL_C_INCLUDES. UVCCamera/UVCPreview.cpp includes opencv headers and the opencv include directory is stored in $(OPENCV_DIR)/sdk/native/jni/include/Is this setup ok?
The problem I am having is that the ndk builder cant find the opencv header files, and I get an error:jni/UVCCamera/UVCPreview.cpp:3:33: fatal error: opencv2/core/core.hpp: No such file or directory [armeabi-v7a] Install : libusb100.so => libs/armeabi-v7a/libusb100.so make: *** No rule to make target `jni/libuvc/android/jni/../../UVCCamera/UVCPreview.cpp', needed by `obj/local/armeabi-v7a/objs/uvccamera/UVCCamera/UVCPreview.o'. Stop. compilation terminated. make: *** [obj/local/armeabi-v7a/objs/UVCCamera/UVCPreview.o] Error 1 [armeabi-v7a] Compile arm : uvc_static <= stream.c ^ #includeThe "No rule to make target" disappears if I leave the LOCAL_SRC_FILES empty, but the builder still cant find the opencv headers.make: *** Waiting for unfinished jobs....
Can anybody find an error in my setup?
The Application.mk is basically the same as in the sample projects.
APP_PLATFORM := android-14
APP_ABI := armeabi-v7a
APP_OPTIM := release
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions