在Android

时间:2017-05-27 03:15:21

标签: java android c++ opencv android-ndk

我试图在Android上使用非自由模块和OpenCV。我正在按照这个回答https://stackoverflow.com/a/28557686/6126070但我无法理解它,因为这是我第一次使用Android和NDK的应用程序。

现在,OpenCV(没有nonfree)正在处理我的应用程序,并且我在使用NDK和JNI的C ++代码中使用它。我遇到的问题是编辑我当前的Android.mk和Application.mk文件,以便在编译nonfree时回答问题。

这是我的Android.mk和Application.mk文件,其中包含我的项目结构。

Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

#opencv
OPENCVROOT:= C:\OpenCV-2.4.10-android-sdk
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=SHARED
include ${OPENCVROOT}/sdk/native/jni/OpenCV.mk

LOCAL_SRC_FILES := com_example_adrien_ndkopencvtest4_OpencvNativeClass.cpp


LOCAL_LDLIBS += -llog
LOCAL_MODULE := MyOpencvLibs 


include $(BUILD_SHARED_LIBRARY)

Application.mk:

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

项目结构: enter image description here

我的项目因我的jni .h文件中的行#include <opencv2/nonfree/nonfree.hpp>而崩溃,这就是我尝试导入非自由模块的原因。

正如我所说,我试图实现上面提到的答案,但我遇到了麻烦。

答案:

构建非自由模块:

第1步:我正好复制文件。

第2步:我不知道我应该在我的应用程序或计算机中创建此文件夹的位置?

第3步:这是一个大问题,我不知道如何将我在答案中提供的Android.mk和Application.mk文件合并。此外,我不理解项目文件夹cd中的行&#34; libnonfree并输入ndk-build来构建libnonfree.so.&#34;

对于&#34;构建示例应用程序&#34;我还没到过这个部分,但我想我不需要这样做我可以继续使用我的应用程序使用OpenCV,除了#include <opencv2/nonfree/nonfree.hpp>行可以工作。

我试图明确这个问题,如果您需要更多信息,我会很乐意编辑它。

1 个答案:

答案 0 :(得分:1)

步骤2:在jniLibs文件下创建文件夹或直接放入4个文件。

第3步:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

#opencv
OPENCVROOT:= C:\OpenCV-2.4.10-android-sdk
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=SHARED
include ${OPENCVROOT}/sdk/native/jni/OpenCV.mk

LOCAL_SRC_FILES := com_example_adrien_ndkopencvtest4_OpencvNativeClass.cpp


LOCAL_LDLIBS += -llog
LOCAL_MODULE := MyOpencvLibs 


include $(BUILD_SHARED_LIBRARY)


include $(CLEAR_VARS)

LOCAL_C_INCLUDES:= ${OPENCVROOT}/sdk/native/jni/include
LOCAL_MODULE    := nonfree
LOCAL_CFLAGS    := -Werror -O3 -ffast-math
LOCAL_LDLIBS    += -llog

# for 2.4.8, delete the line precomp.cpp \
LOCAL_SRC_FILES := nonfree_init.cpp \
sift.cpp \
surf.cpp
include $(BUILD_SHARED_LIBRARY)

你可以搜索如何在android studio(ndk-build)中添加外部工具