网上查询了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 路径

 

 

 

我这里只选择了一个opencl,可以都选中上的

 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了

 全部编译完成

注:经过反复测试,其实,只要设置好gradle版本与gradle插件版本,就能正常编译android projects 与 android tests了,不需要android studio  这个ide打开。默认make时会自动下载gradel指定的版本,然后进行编译android代码。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐