围绕获取原生opencv for android构建有很多问题和答案.有些使用gradle,有些则使用外部工具.对于原生OpenCV构建,这些众多,复杂且经常相互矛盾的描述可能会以一致的起点进行简化; 在创建Android Studio 2.2 Beta项目时,有一种方法可以包含C++支持:


此功能是在2016年6月左右添加的.有关详细信息,请参阅Android工具技术文档.
将Android Studio 2.2或更高版本与Gradle 2.2.0或更高版本的Android插件一起使用,您可以将C和C++代码编译到Gradle可以与您的APK打包的本机库中,从而为您的应用添加C和C++代码.然后,您的Java代码可以通过Java Native Interface(JNI)调用本机库中的函数.如果您想了解有关使用JNI框架的更多信息,请阅读适用于Android的JNI技巧.
检查Include C++ Support生成一个名为的外部构建文件CMakeLists.txt.
# Sets the minimum version of CMake required to build the native
# library. You should either keep the default value or only pass a
# value of 3.4.0 or lower.
cmake_minimum_required(VERSION 3.4.1)
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# …Run Code Online (Sandbox Code Playgroud) windows java-native-interface cmake android-studio opencv4android
我试图通过Cmake将Opencv包含在我的原生C代码中.我在网上做了一些研究并从网上下载了FindOpenCV.cmake文件并将其添加到我的android项目的app目录中.这也是CMakeLists.txt所在的位置.我使用本教程将OpenCV作为模块导入到我的Android Studio项目中:https://www.learn2crack.com/2016/03/setup-opencv-sdk-android-studio.html,当我运行时:
if(!OpenCVLoader.initDebug()){
System.out.println("Opencv not loaded");
} else {
System.out.println("Opencv loaded");
}
Run Code Online (Sandbox Code Playgroud)
我知道Opencv已经加载了.
但是,因为我正在尝试将OpenCV添加到我的本机代码而不是Java代码中,所以我认为我不能使用它.这是我现在拥有的CMakeLists:
# Sets the minimum version of CMake required to build your native library.
# This ensures that a certain set of CMake features is available to
# your build.
cmake_minimum_required(VERSION 3.4.1)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} FindOpenCV.cmake)
# Specifies a library name, specifies whether the library is STATIC or
# SHARED, and provides relative paths to the source code. You can
# define multiple libraries …Run Code Online (Sandbox Code Playgroud) 今天我将Android Studio NDK更新到最新版本18.0.5002713.在成功安装过程后,我尝试重新运行我的应用程序,但无法这样做.出现的错误如下:org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':app'.
在过去,我在NDK更新后运行我的应用程序时遇到了问题,但是能够通过添加arguments '-DANDROID_STL=gnustl_static'到externalNativeBuildapp.gradle文件中的配置来解决它们.
原始问题:(OpenCV - NDK更新后对'cv :: CascadeClassifier :: detectMultiScale()的未定义引用)
通过添加这行代码,我设法在所有NDK r17c版本的其余部分中避免了NDK的任何问题.
不幸的是,对于修订版r18,GNUSTL的支持已经与gabi ++和stlport一起被删除了.
请参阅NDK修订历史记录:https://developer.android.com/ndk/downloads/revision_history
删除现在已弃用的代码行会产生最初是上述问题的原因的错误.现在的问题是什么是最新的等价物arguments '-DANDROID_STL=gnustl_static'?
编辑:使用'-DANDROID_STL=c++_static'导致旧错误
先感谢您.