道路很曲折,搞明白几个事,其实也简单。我写的都是我自己碰到的问题,供大家参考。
感谢 http://blog.csdn.net/wjskeepmaking/article/details/70597169
我的环境是MacOS10.13.2, Android Studio3.01
现在开始讲一下我的编译打包流程。先做准备工作。(为了好排错,我是把脚本一段段摘出来,分段执行的)
1. 新建一目录(下面统称 WD目录):opencv4android-3.4,后面所有的文件都放到这个目录下。
1. 安装 cmake
如果需要安装CMake,可以先安装MacPorts,然后
sudo port install cmake
2.下载 build-opencv-for-android:github,会得到两个重要文件:setup.sh, build-android-opencv.sh,放到WD目录下。
3. 下载解压 OpenCV3.4源代码包 + OpenCV Contrib源代码包
请注意,都是3.4.0版本,如果OpenCV Contrib用的是master,会编译失败,请下载 Tag 3.4.0。
把两个目录并排放到WD目录下。目录名改为opencv, opencv_contrib。也是为了省事,如果不想改目录名,就改build-android-opencv.sh文件里的目录名。
你也可以通过运行setup.sh来自动下载源码,执行前,需要修改一下文件里的版本号。
4. 【重要】下载NDK。本来Android Studio 里的SDKManager是可以直接下载 NDK的,但版本太高,是16版。我是用不了。我试了一下,最高只能用到15C版。所以,我把setup.sh里的代码摘出来分段执行。
git clone --recursivehttps://github.com/tzutalin/android-ndk-downloader.git
cd android-ndk-downloader
python download_ndk.py (请注意选项,要选:24,NDK的版本 r10 到 r15 都可以)
下载完成后,解压zip。这时,可以设置 NDK_ROOT 环境变量:
export NDK_ROOT=<ndk解压后的目录 >
好了,我们已经绕过了第一个坑。
5. 【重要】在命令行下,直接运行 android 命令,如果你收到错误提示:
$ android
*************************************************************************
The "android" command is deprecated.
For manual SDK, AVD, and project management, please use Android Studio.
For command-line tools, use tools/bin/sdkmanager and tools/bin/avdmanager
*************************************************************************
Invalid or unsupported command ""
Supported commands are:
android list target
android list avd
android list device
android create avd
android move avd
android delete avd
android list sdk
android update sdk
那么恭喜你,你的Android SDK Tools版本太高了。可以参考这往篇文章:http://blog.csdn.net/Story51314/article/details/73201037(感谢作者)
直接从该作者提供的网盘中下载更低版本的 Android SDK Tools,再次感谢作者。
下载后,我建议先备份原来 Android 目录下的tools,然后直接覆盖。我是这么干的,方便。
一般来说,路径是:~/Library/Android/sdk/tools
好了,我们又绕过第二个大坑。
6. 现在我们打开build-android-opencv.sh 文件
编辑:declare -a ANDROID_ABI_LIST=( "x86" "armeabi" "armeabi-v7a" "arm64-v8a"),选择你希望的架构平台。
编辑:SCRIPT=$(readlink -f $0) ,这里readlink 要改成SCRIPT=$( stat -f $0) ,否则报错。
编辑:WD=`dirname $SCRIPT` 为 WD=$(pwd `dirname $SCRIPT`),取绝对路径,相对路径会出错。我这碰到了这个问题。
好了,我们现在绕过了第三个大坑。后面就比较顺利了。
7. 现在可以在WD目录下执行:./build-android-opencv.sh ,开始打包编译
如果发现在编译过程中,下载face_landmark_model.dat超时(有70多M大小),可以先从这https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat下载好文件,再复制到 <WD目录>/opencv/.cache/data/,修改文件名为:7505c44ca4eb54b4ab1e4777cb96ac05-face_landmark_model.dat,我不知道这个名称会不会在不同的机器上不同,请注意你的出错提示。
剩下的就是等待编译打包结束。要花不少时间,去喝杯咖啡吧。
8. 所有编译打包的文件(不同架构平台下的so包和 java源代码)都在 WD目录下的android_opencv里。如果配置你的开发环境,网上有很多教程,我就不在这里讲了。
当出现错误时,我建议把脚本文件中的代码分段出取执行一下。比较好看到问题所在。