网上查询了N多文章关于交叉编译opencv 与 opencv-contrib for android的,但是一直没有找到能正常编译的文章,经过自己的坚持不懈的努力,终于编译出来opencv for android的so库
1.准备工具,先是下载需要的编译的opencv与opencv-contrib,
下载链接: opencv: Releases · opencv/opencv · GitHub
opencv-contrib: Tags · opencv/opencv_contrib · GitHub
gcc交叉编译工具:gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu
下载链接: 链接: https://pan.baidu.com/s/1ZZ04U5PoeRzhrKC1mr8YaQ 提取码: 5ieb
(最讨厌有人下载了,然后上传csdn 赚积分,气人,我百度链接,随便下载)
官网下载链接: Linaro Releases
cmake:下载连接 Download | CMake
3.以上工具下载完就可以解压缩,然后打开cmake gui界面
设置交叉编译 toolchain文件,我这里因为之前是下载过android studio 所以就直接用
android studio里的配置了,如果你们没有,建议你们下载一个android studio 然后配置好
sdk 及ndk 版本,我ide里都下载了,但是使用的sdk是28 ndk版本是22.1.7171670
点击完Done 后就可以cmake就开始配置了编译环境了
配置完成后,不出意外就会报错,提示没有 ANDROID_SDK_ROOT 路径
search里 重新输入android , 然后下面的列表里可以看到 android examples 与 android projects都被选中了,默认是编译这两个的,但是这两个选中后,就需要gradle版本设置,后面会设置gradle版本的。
这里可以点击Configure,进行配置了,注意 因为编译了opencv-contrib 所以会需要下载库,这里是需要 一个 网络代理(你懂得) 可以下载库的的 才能正常下载。
准备一个 网络代理(你懂得)并运行,注意不要使用全局代理,并且设置好可以本地连接 并且开启了代理端口, 然后再运行 Proxifier 这个软件(这个软件需要下载破解版本),用这个软件可以代理 terminal终端 连接外网。下载依赖库文件了。
运行Proxifier
以上都设置完就可以点击Configure 进行配置了
search里 重新输入gradle
我这里设置的gradle 插件版本是 4.2.1 与 gradle 版本是 7.0.2
以上设置完再点击Configure,出现 Configuring done 后再点击 Generate按钮,
出现 Generating done 即为正常
注意: 这期间应当还会提示Error 例如 提示没有设置 android sdk root 环境变量 和后面还会出现有多个cmake 版本。如果有多个cmake 版本,比如是系统的cmake版本, 可以用homebrew 卸载了,ndk里也会有多的cmake版本,也可先压缩其它版本目录备份,再删除cmake其它版本目录,保留一个cmake版本,然后重启一下电脑,
设置环境变量 vim ~/.zshrc 在文件最后添加下面内容 ,根据自己的实际情况进行修改路径。不要完全照抄,因为我们的路径是不一样的。 修改后保存 再执行source ~/.zshrc 如果不会,就重启电脑,让环境变量生效。
这里进入opencv-4.6.0/build-arm目录里,
开始输入并执行make -j16 进行编译,开多少线程进行编译根据自己的机器配置进行修改
make -j8 或 make -j4 或只输入make ,
这期间,可以把android studio 打开,设置网络代理(你懂得)代理, 目的是在后面编译project时,有可能gradle要连接外网,我之前就遇到过,然后设置了代理,再编译就正常了。
设置完成后就可以关闭这个界面了
编译到这,后面就开始编译android projects了
全部编译完成