踩了三四天的坑,今天终于顺利跑通了,原来是toolchain的问题,外网的教程大多都是用opencv source里的toolchain,会导致各种奇奇怪怪的错误(std not a member of std,canot find iostram等等) 环境配置本文编译环境如下: 首先需要下载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_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++_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 = 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里连接,之后可能会写。 错误处理总结我之后在写,可以把报错贴到评论区或者私聊问我。
|