下载 OpenCV
opencv 支持很多平台, 在 opencv 官网下载相应的平台的资源( https://opencv.org/releases/)。 当然当前调研的是 Android 系统, 所以下载 Android 即可。
引入 Android 系统
当下载下来后发现其文件夹会有一个事例, 但是太久了, 还需要降低我的 Android Studio cmake 版本。 在 opencv 文档上还是 Eclipse 而非 Android Studio,所以暂放弃使用事例。 转而投向提供的动态库和按理是对应的 java 代码。
引入 so 动态库
我们知道想调用底层方法, 必须有对应实现的库, opencv 的 so 动态库需要引入。
在下载的文件中, 找到 sdk/native/libs, 把对应的 so 文件复制进去即可。 但是需要注意的话, 如果后面报错误缺少 libc++_shared 库的话, 需要自己去添加, 如果项目中已经存在该库可以忽略。 当然其库在 ndk 中找到。 你电脑ndk目录 /sources/cxx-stl/llvm-libc++/libs/ 下可以找到对应架构的库文件。
引入对应 java 文件
有 so 库, 必定有对应的 java 文件。 如果对 jni 开发比较熟的话, 肯定知道 java 文件位置可不能乱放, 因为 jni 中 c++/c 的代码方法名等都是跟 java 的包、类路径有关的。 所以整体把 java 复制代码复制到 java 下面。 如下图:
解决编译问题并运行
通过上面的引入, 按理说应该可以运行起来的。 但是运行的时候 AsyncServiceHelper 中报 org.opencv.engine.OpenCVEngineInterface 类找不到。 发现其是 aidl, 所以有两种做法, 第一种新建 aidl 文件夹, 然后复制 OpenCVEngineInterface.aidl 文件到 aidl 文件夹中。 第二种就是修改 gradle 文件指定下 aidl 的文件路径。
运行起来后, 发现 OpenCVLoader.initDebug() 一直返回 false。 发现其加载的 so 名字不对。 修改成正确的名称即可。