Windows环境下为Android编译OpenCV4.3

踩了三四天的坑,今天终于顺利跑通了,原来是toolchain的问题,外网的教程大多都是用opencv source里的toolchain,会导致各种奇奇怪怪的错误(std not a member of std,canot find iostram等等)

环境配置

本文编译环境如下:

  1. 首先需要下载OpenCV 4.3.0 源码,根据需求再加上OpenCV_contrib 4.3.0 源码,解压放到你记得住的文件夹

  2. 下载 cmake 3.18 图方便直接选安装包就行 cmake-3.18.0-rc1-win64-x64.msi

  3. 下载 Mingw(建议用installer傻瓜式安装)选择下列需要安装的组件,右键选择 Mark for Installation,之后选择 Menu -> Installation -> Apply Changes



    安装完后把mingw加入系统环境变量(win键搜索环境变量就有,编辑完后重启系统生效)

  4. 下载 Android NDK 和 SDK,可以直接在官网下,但这里推荐直接在 Android Studio 里安排。打开AS任意一个项目,在工具栏选择Tools -> SDK Maneger



    打开后选择SDK Tools,勾选右下角 Show Package Details,勾选一个NDK版本,Apply。



    SDK同理,安装完后打开 Project Structure -> SKD Location 找到SDK路径。



    同样要写到环境变量里



    NDK则在 Sdk\ndk\21.2.6472646,不写进环境变量也没问题,待会要在cmake里配置

  5. 安装 JDK,最低需要 8,这里用 8u251 (过高版本可能不兼容)



    同样需要配置环境变量



    还需加入



    对着打就行,重启后可以用cmd测试是否配置成功

  6. 下载 ANT 1.10.7,放到你记得住的目录

编译配置

新建一个存放编译结果的文件夹,比如我就放在 G:\opencv\android_build,解压后源码放在 G:\opencv\source

运行 cmake-gui (找不到就按win搜索)

将源码和输出地址填入这里

点击 Add Entry,添加以下几个属性

  • ANDROID_NDK 类型为PATH,填入你的NDK路径(AS下载的就在Sdk\ndk\21.2.6472646
  • ANDROID_SDK PATH,填入你的SDK路径
  • ANDROID_ABI STRING,设置平台,不填默认为 armeabi-v7a
  • ANDROID_NATIVE_API_LEVEL STRING,默认API为21
  • ANT_EXECUTABLE PATH,填入ANT路径下的bin(用于java 封装,便于 AS 导入module)
  • ANDROID_STL STRING,根据需求写入c++_staticc++_shared(默认是gnustl_static)

这时候你可以看到一片红,不用慌,这是代表新增,不是报错。我们点击下方的Configure。

选择这个选项,Next。

这里需要配置toolchain路径,注意了,不要用源码包里的toolchain,用你自己的ndk目录下的toolchain,不然可能导致一系列头文件丢失的错误,血的教训=_=。

等待Configure完成,一切正常的话应该是这样

如果你需要的话,现在可以添加opencv-contrib模块,搜索 extra,在 OPENCV_EXTRA_MODULES_PATH 添加路径 ....../opencv_contrib-4.3.0/modules。(需要重新添加NDK路径)

参数调整

以下参数根据自己需求调整

  • BUILD_ANDROID_PROJECTS 不需要示例项目可直接取消勾选

  • BUILD_ANDROID_EXAMPLES = OFF

  • BUILD_PERF_TESTS = OFF

  • BUILD_TESTS = OFF

  • BUILD_opencv_world = OFF (生成 .so 库 libopencv_world.so,这是一个集合,不清楚和默认编译的 libopencv_java3.so 有什么区别,默认不开启,如果开启的话不会复制 java 层函数,也就是 cmake 的 gui 界面会显示 Java wrappers: NO)

  • BUILD_SHARED_LIBS = OFF (如果 On 则只编译 so 库)

  • WITH_CUDA = OFF (CUDA 是 NVidia 推出的并行计算架构,编译非安卓 SDK 时建议添加)

  • WITH_OPENCL = ON (因为我们编译的是 android sdk,所以建议添加移动端的并行架构支持)

  • WITH_OPENCL_SVM = ON (建议开启共享虚拟内存)

调整完后再次点击Configure,完成后点击Generate。

执行编译

完成后通过命令行工具 cmd (管理员身份) 进入 你的build文件夹,或者直接在 buid 文件夹右键选择 Gitbash

输入命令 mingw32-make.exe

如果没有出现报错,则再输入 mingw32-make.exe install

编译完成,打开AS的项目,在工具栏选择File -> New -> Import_Module,把 build/install/sdk/java 导入即可(如果你有配置ANT的话)或者直接copy编译出来的.a或者.so在AS里连接,之后可能会写。

错误处理总结我之后在写,可以把报错贴到评论区或者私聊问我。

Windows环境下为Android编译OpenCV4.3的更多相关文章

  1. Windows环境下使用VS2005编译OpenSSL

    如何Windows环境下,使用VS2005编译OpenSSL,虽然这个问题在Baidu.Google上一堆,但安装中还是遇到些问题,在这里 记录下来希望能帮助大家不要在走弯路.注:我是在WinXP S ...

  2. 在Windows环境下使用MinGW编译Qt 4.8.6

    1.修改环境变量工具推荐:Rapid Environment Editor.官网:http://www.rapidee.com/ 修改前请先备份当前的环境变量.然后: (1)检查系统变量path,删除 ...

  3. Windows 10 下使用 MinGW-w64 编译 OpenCV-4.1.1

    1. 下载安装 CMake 2. 下载安装 MinGW-w64,假设安装于 X:\path\to\MinGW-w64 此处注意选择 POSIX 版本而非 Win32 版本,因为 OpenCV 调用了标 ...

  4. ionic3 在windows环境下打包android 正式签名版APK

    生成签名文件keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore demo为 ...

  5. 关于Windows环境下安装Android模拟器Genymotion的教程

    打开Genymotion的官网www.genymotion.com,点击按钮"get genymotion", 选择"Free"下的"DOWNLOAD ...

  6. 【转】Windows环境下Android NDK环境搭建

    原文网址:http://www.metsky.com/archives/525.html 前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员 ...

  7. Windows环境下Android NDK环境搭建

    前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员来讲,基本够用了,由于Linux系统的权限限制和Android封装架构限制,很多涉及底层设 ...

  8. Windows环境下Android Studio v1.0安装教程

    Windows环境下Android Studio v1.0安装教程 准备工具 JDK安装包. 要求:JDK 7以及以上版本. Android Studio安装文件. Windows: exe(包含SD ...

  9. Android 源码获取-----在Windows环境下通过Git得到Android源代码

    在学习Android的过程中,深入其源代码研究对我们来说是非常重要的,这里将介绍如何通过在Windows环境下使用Git来得到我们的Android源代码. 1.首先确保你电脑上安装了Git,这个通过  ...

  10. Android笔记——Windows环境下Android Studio v1.0安装教程

    本文主要讲解Windows环境下Android Studio的安装教程,Mac的Android Studio安装与此类似不在赘述,另外友情提示Windows下的SDK与Mac的SDK是通用的,可以直接 ...

随机推荐

  1. fatal: 无法访问 'https://github.com/nmww/lingyun.git/':Failed to connect to github.com port 443 after 13 ms: Connection refused

    fatal: 无法访问 'https://github.com/nmww/lingyun.git/':Failed to connect to github.com port 443 after 13 ...

  2. 软件开发人员 Kubernetes 入门指南|Part 1

    Kubernetes 是一个用于部署和管理容器的编排系统.使用 Kubernetes,用户可以通过自动执行管理任务(例如在跨节点间扩展容器并在容器停止时重新启动任务),在不同环境中可靠地运行容器. K ...

  3. 轻松掌握组件启动之Redis集群扩展秘籍:轻松扩容与缩容,释放高性能潜能

    扩展集群操作 扩容 在我们原始的集群基础上,我们决定增加一台主节点(8007)和一台从节点(8008),这样新增的节点将会在下图中以虚线框的形式显示在集群中. 1: 首先,在 /usr/local/r ...

  4. 一款简单漂亮的WPF UI - AduSkin

    前言 经常会有同学会问,有没有好看简单的WPF UI库推荐的.今天就给大家推荐一款简单漂亮的WPF UI,融合多个开源框架组件:AduSkin. WPF是什么? WPF 是一个强大的桌面应用程序框架, ...

  5. Unity - UIWidgets 5. Redux接入(一) 基本接入

    对响应式的数据组织结构不太熟, 直接尝试Redux走起 参考资料 Redux的基本概念 state 一个字段用于存储状态 存储state的地方称为"store", 类似Model\ ...

  6. IDEA的Maven换源

    打开IDEA安装路径,然后打开下面的文件夹 plugins\maven\lib\maven3\conf 在conf文件目录下出现一个setting.xml的文件.(ps:如果没有,请忽略本文,自行创建 ...

  7. 微前端、single-spa初探

    微前端 微前端,前端这次词就不用多做解释了,这个概念的重点在于这个"微"字, 从字面意义上看,微是小的意思,小是相对于大的一个用于比较的形容词,所以通常是在项目庞大的情况下,才会考 ...

  8. .NET8依赖注入新特性Keyed services

    什么是Keyed service Keyed service是指,为一个需要注入的服务定义一个Key Name,并使用使用Key Name检索依赖项注入 (DI) 服务的机制. 使用方法 通过调用 A ...

  9. 记一次在线客服系统用户遭勒索,索要茶水费事件的 Windbg 分析与应对

    本文记录了几个月前,客户在使用在线客服系统过程中,遭到勒索威胁,索要茶水费 的事件.经过应对,快速的化解了攻击威胁,并继续安全使用至今. 讲故事 威胁次日,收到报警,服务器 CPU 使用率持续超过 8 ...

  10. UData+StarRocks在京东物流的实践

    1 背景 数据服务与数据分析场景是数据团队在数据应用上两个大的方向,行业内大家有可能会遇到下面的问题: 1.1 数据服务 烟囱式开发模式:每来一个需求开发一个数据服务,数据服务无法复用,难以平台化,技 ...