Android NDK学习笔记:Android Studio3.1+CMAKE+OpenCV3.4配置

本文介绍如何在Android Studio 3.1中使用CMAKE配置OpenCV 3.4.1,详细步骤包括环境配置、OpenCV库的添加、CMakeLists.txt的编写,并提供了一个灰度化图片的测试Demo。适用于希望通过NDK开发配置OpenCV的开发者。
摘要由CSDN通过智能技术生成


1 前言

  Android Studio在2.2版本更新之后加入了CMAKE方式配置NDK的方法,这大大简化了之前通过Android.mk和Application.mk两个本地配置文件进行NDK开发的方式。这种方法在后续更新的版本中不断增强,越来越好用,越来越不会出问题。本文基于Android Studio3.1的版本进行配置,使用CMAKE的配置方式配置OpenCV最新版(截止发文时间是OpenCV 3.4.1),并在最后给出一个灰度转换的测试Demo。

  如果你想通过Android NDK开发配置OpenCV,本文或许对你有用。

2 准备工作

2.1 开发环境

  • Java 8 u161
  • Windows 10 Enterprise 64bit
  • Android Studio 3.1
  • OpenCV for Android 3.4.1
  • Android NDK 16.1.4479499
  • Gradle 4.4
  • CMAKE


注意: NDK更迭比较快,之前一直用14R版本,配置最新版的OpenCV,貌似老出一些莫名其妙的bug,后来更新16R之后,bug莫名其妙的消失了,貌似新版本更强大,推荐用最新版。Gradle脚本大部分是AS自动配置的,一般会自动更新,但如果在update推送弹窗中点了ignore之后,会停止推送,推荐使用最新版本。

2.2 下载相关文件

OpenCV

  OpenCV可以直接在官网上下,官方网址为:https://opencv.org/releases.html

  选择Android pack版本即可,大约310MB,由于服务器在国外,下载速度可能会比较慢,使用迅雷要比FireFox自带的下载器快。
这里写图片描述
NDK

  NDK并不会随着Android SDK自动下载,需要手动配置——
打开AS -> Settings -> Appearance & Behavior -> System Settings -> Android SDK ->SDK Tools 勾选 NDK,如果CMAKE没有勾选,也要勾选。

这里写图片描述

  至此,准备工作结束。

3 OpenCV for Android的配置

3.1 创建项目

  创建一个名为OpenCVTest的Android project,注意勾选include C++选项即可。
这里写图片描述

这里写图片描述

3.2 OpenCV相关文件

  • include文件
      在下载好的OpenCV压缩包中,打开路径下的.\opencv-3.4.1-android-sdk\OpenCV-android-sdk\sdk\native\jni 有一个include文件夹,把这个文件夹复制粘贴至我们的OpenCVTest项目中,路径为src/main/cpp
  • jni文件
      然后是动态库(.so文件),打开路径下的.\opencv-3.4.1-android-sdk\OpenCV-android-sdk\sdk\native ,有一个libs 文件夹,这个文件夹里面是所有版本的abi的so文件。复制粘贴到我们的项目中,路径为src/main/jniLibs 这个文件夹需要自己手动去创建。

注意:
  1. 无论是include还是libs的路径都可以自定义,习惯上是这样放,但其实只要在之后的CMakeList配置文件里面设置正确就没有问题。
  2. 值得一提的是,OpenCV在最新版本中把动态库和静态库分开了,分别放在libs和staticlbs两个文件夹中,之前是放在一个文件夹里的。我们测试Demo仅需要动态库和头文件即可。

  最后配置好之后文件结构如图所示:
这里写图片描述

3.3 配置文件

3.3.1 build.gradle文件

  在android 节点中添加如下代码:

sourceSets{
        main{
            jniLibs.srcDirs = ['src/main/jniLibs/libs']
        }
}

  这一步设置了动态链接库的路径地址,用于项目构建时,Native寻找和链接相关的so文件。

  然后在Android.defaultConfig.externalNativeBuild 的节点内增加一行过滤器,如下:

abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'mips', 'mips64'

  .so文件依赖于硬件环境,不同的CPU架构对应不同的.so文件,abiFilters关键字能够指定Android 所支持的CPU架构,一般是以上7种,最终这些.so文件会被打包进APK,所以可以根据自己的项目进行选择,比如在AS模拟器上开发APP选一个 x86 就可以了,如果是手机端,一般是arm架构,选 armeabi-v7a 即可。

  最终的build.gradle文件如下:


                
评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值