Windows环境下为Android编译OpenCV4.3
Windows环境下为Android编译OpenCV4.3
踩了三四天的坑,今天终于顺利跑通了,原来是toolchain的问题,外网的教程大多都是用opencv source里的toolchain,会导致各种奇奇怪怪的错误(std not a member of std,canot find iostram等等)
环境配置
本文编译环境如下:
- cmake 3.18
- Android Studio 4.0
- Mingw
- Java JDK 8 (需要8+,过高版本可能不兼容)
- Apache ant1.10.7 (只编译.so库则不需要)
首先需要下载OpenCV 4.3.0 源码,根据需求再加上OpenCV_contrib 4.3.0 源码,解压放到你记得住的文件夹
下载 cmake 3.18 图方便直接选安装包就行
cmake-3.18.0-rc1-win64-x64.msi

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

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

下载 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里配置安装 JDK,最低需要 8,这里用 8u251 (过高版本可能不兼容)

同样需要配置环境变量

还需加入

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

下载 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_SDKPATH,填入你的SDK路径ANDROID_ABISTRING,设置平台,不填默认为armeabi-v7aANDROID_NATIVE_API_LEVELSTRING,默认API为21ANT_EXECUTABLEPATH,填入ANT路径下的bin(用于java 封装,便于 AS 导入module)ANDROID_STLSTRING,根据需求写入c++_static或c++_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= OFFBUILD_PERF_TESTS= OFFBUILD_TESTS= OFFBUILD_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的更多相关文章
- Windows环境下使用VS2005编译OpenSSL
如何Windows环境下,使用VS2005编译OpenSSL,虽然这个问题在Baidu.Google上一堆,但安装中还是遇到些问题,在这里 记录下来希望能帮助大家不要在走弯路.注:我是在WinXP S ...
- 在Windows环境下使用MinGW编译Qt 4.8.6
1.修改环境变量工具推荐:Rapid Environment Editor.官网:http://www.rapidee.com/ 修改前请先备份当前的环境变量.然后: (1)检查系统变量path,删除 ...
- Windows 10 下使用 MinGW-w64 编译 OpenCV-4.1.1
1. 下载安装 CMake 2. 下载安装 MinGW-w64,假设安装于 X:\path\to\MinGW-w64 此处注意选择 POSIX 版本而非 Win32 版本,因为 OpenCV 调用了标 ...
- ionic3 在windows环境下打包android 正式签名版APK
生成签名文件keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore demo为 ...
- 关于Windows环境下安装Android模拟器Genymotion的教程
打开Genymotion的官网www.genymotion.com,点击按钮"get genymotion", 选择"Free"下的"DOWNLOAD ...
- 【转】Windows环境下Android NDK环境搭建
原文网址:http://www.metsky.com/archives/525.html 前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员 ...
- Windows环境下Android NDK环境搭建
前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员来讲,基本够用了,由于Linux系统的权限限制和Android封装架构限制,很多涉及底层设 ...
- Windows环境下Android Studio v1.0安装教程
Windows环境下Android Studio v1.0安装教程 准备工具 JDK安装包. 要求:JDK 7以及以上版本. Android Studio安装文件. Windows: exe(包含SD ...
- Android 源码获取-----在Windows环境下通过Git得到Android源代码
在学习Android的过程中,深入其源代码研究对我们来说是非常重要的,这里将介绍如何通过在Windows环境下使用Git来得到我们的Android源代码. 1.首先确保你电脑上安装了Git,这个通过 ...
- Android笔记——Windows环境下Android Studio v1.0安装教程
本文主要讲解Windows环境下Android Studio的安装教程,Mac的Android Studio安装与此类似不在赘述,另外友情提示Windows下的SDK与Mac的SDK是通用的,可以直接 ...
随机推荐
- threading 专递类对象
import threading class MyClass: def __init__(self, name): self.name = name def my_method(self): prin ...
- 【图像处理】如何使用matplotlib 库显示灰度图像为自定义颜色
项目场景 我这里有一张名为airplane.jpg的灰度图像灰度图像 使用 matplotlib 库读取并显示: import matplotlib.pyplot as plt root=" ...
- python~windows自动化工具 uiautomation库
微软提供了关于自动化操作PC端桌面应用程序的工具,官方描述为: Microsoft UI Automation is an accessibility framework that enables W ...
- NOI 2023 春季测试 游记
开坑,待填. upd: 摆,不想填,但还是来填坑了. \(Day -1\) 看板子,什么都不会.发现自己已经不会写十二月刷了一整个题单的线段树合并了,感慨了一下自己连鱼都不如的记忆力,不过反正春测不考 ...
- mac os 升级到13后,系统免密失败
# sudo vim /etc/ssh/ssh_config # 添加以下内容 PubkeyAcceptedKeyTypes +ssh-rsa
- SpringBoot+Redis实现接口级别缓存信息
本文主要讲述如何通过SpringBoot+Redis实现接口级别缓存信息 背景 近期因为一直在处理公司的老项目,恰好碰到产品说页面有一些信息展示慢,简单看了一下页面接口,发现查询的是系统中几张大表(数 ...
- 《流畅的Python》 读书笔记 第8章_对象引用、可变性和垃圾回收
第8章_对象引用.可变性和垃圾回收 本章的主题是对象与对象名称之间的区别.名称不是对象,而是单独的东西 name = 'wuxianfeng' # name是对象名称 'wuxianfeng'是个st ...
- 浮点类型(double与float及其它们的输入输出)
<1>浮点类型 (1)两种类型 double 字长64位(8个字节),有效数字15,范围大概为2.2* 10^-308 ~ 1.79*10^308,0,nan; float字长32位(4个 ...
- 【uniapp】【微信小程序】【外包杯】如何创建分包
意义:分包可以减少小程序数次启动时的加载时间 1.创建分包的根目录 2.在page.json中,和pages节点平级的位置声明节点,用来定义分包的相关结构 3.在subpkg目录上新建页面 4.完成了
- 架构师的知行合一(内容由AI的全文生成,满分100分我打99分)
大型架构是怎么来的 随着科技的不断发展,越来越多的企业和组织开始意识到数字化转型的重要性.为了更好地适应市场的变化,满足客户的需求,提高企业的竞争力,大型架构成为了企业和组织不可或缺的一部分.那么,大 ...