Android:opencv环境搭建及其遇到的坑

  1. 搭建opencv版本号:
    • Android studio:Android Studio Arctic Fox | 2020.3.1 Patch 3
    • opencv:opencv4.5.4版本
  2. 环境搭建流程
    • 吐槽:书写环境搭建前先吐槽一些真是没有最坑只有更坑,搭建一个环境坑到家了,opencv的版本兼容大坑再加上as的版本坑,哎真是坑的一言难尽,网上的资料更是操蛋,很多都是copy的有没有实测过都不一定,比如libc++_shared.so not found 网上很多文章都是单纯的配置build文件并没有完整的讲解ndk的配置,能解决才怪呢。
    • 下载opencv对应的Android 工程包 下载地址,可以下载最新的,也可以下载以往版本,下载完成后解压后的文件夹如下:
      opencv解压文件夹

      sdk下文件夹

      native下文件夹

备注:samples:opencv当前版本案例文件夹,sdk:opencv对应sdk文件夹 etc:opencv扩展功能文件夹 java:opencv java封装接口文件夹,主要是对下层opencv的函数的java封装 native:opencv底层实现文件夹
native中libs:opencvjava4.so opencv native实现的so文件,Android的上层调用重点使用java和native文件夹中的libs两个文件夹。

  • 创建as工程,import module 打开上面的opencv文件夹中的java文件夹,以module的方式将其引入,此乃第一大坑,as gradle 编译,opencv中java并没有提供对应的build文件,所以使用上面as版本不能直接import,卡在选择文件夹后仅有cancel没有下一步,网上有资料说是as这个版本bug,也不愿追究了总之是坑,使用下面方式进行解决:
    • 新建module工程,注意工程包名使用opencv java提供的包名,工程名可以任意提供,将java下的代码及其res文件夹copy到module的对应工程中去,即java没有提供build,只能新建工程创建build文件(类似于eclipse工程到as的转化)

    • opencv中的aidl

      备注:copy过程中还需要注意这个文件夹并不是普通的代码文件,是aidl文件夹需要以aidl的方式将其引入。

    • 将opencv的native文件夹下的lib中所有子文件夹(可以根据机型的cpu类型选择对应的)copy到module中去(以jnilibs的方式),需要注意的是Android 默认JniLibs为jni的默认文件夹,如不是放到这个文件夹(通常习惯放到libs中去)需要在build文件中声明:


      jni声明
      • 常规流程到这里就完成了,编译成功也没有报错 赶紧写个小Demo测试一下 编码编译运行一气呵成,尼玛点击直接崩溃,我去 这心情比吃屎都难受啊,不对啊,按照网上说的流程都做了啊,还依靠自己的经验做到了不能做的 怎么会崩溃呢,好在log有提示那就继续一步一步排坑吧
        • OpenCV error: Cannot load info library for OpenCV:不能加载opencv info lib库,资料解释是opencv最新版本没有对应的lib库,先前版本有 你说这坑不坑,新版本没有咱就别用了,用了咱就提供呗,没有只能去找老版本,opencv下载还挺慢,费劲八叉的下载完成还是没有,github上到时搜到了,下载放入后还是崩溃不能加载,debug发现找到的是32位编译的,现在手机多数都是64位的,没辙了看来免费的没戏了 只能在csdn下载了,本部富裕的家庭雪上加霜 好在c币买来的可以使用 不然就真的坑死了,下载链接不贴了,有需要的评论联系吧。
          • 集成第三SO之DLOPEN FAILED: LIBRARY "LIBC++_SHARED.SO" NOT FOUND:解决了info lib库,opencv javalib库还是不能加载,提示上面错误,原因是 opencv lib库依赖于libc++_shared lib 库,但是普通工程加载so文件不会生成对应的shared lib库的,网上多数资料也是说明修改build 文件 而没有表明修改build文件后还需要ndk编译流程才能生成对应的shared lib库,对应解决可以参考下面大神的文章:copy HelloJniDemo ndk编译生成对应的shared lib库,编译生成后的shared lib库在build的临时文件中可以获取(针对不同的cpu有着不同的生成),同时小经验:ndk编译文件 cmake尽可能不要自己去写,去搞一个别人的了解cmake的语法和机制就好了。
      • Android opencv的初始化流程如下:


        opencv初始化代码
  1. 搭建环境遇到的坑
    • opencv中java文件夹不能以module方式引入(参考上面)
    • 新建module copy所有文件夹忽略掉aidl文件夹(参考上面)
    • Cannot load info library for OpenCV 异常(参考上面)
    • LIBRARY "LIBC++_SHARED.SO" NOT FOUND 异常(参考上面)
    • opencv的初始化及其监听初始化结果(参考上面)
    • opencv 图片灰度值Demo设置属性失败造成崩溃(不要乐极生悲,编译成功一高兴那就可悲了
    • 伴随环境搭建as中需要记录的几个知识点:
      • as项目导入jni so 库:JniLibs文件夹和libs文件夹区别(参考上面)
      • NDK路径:sdk管理器已经下载对应的ndk版本,但是新建工程并没有识别ndk路径需要在local.properties中声明ndk 路径,需要注意此时的系统路径规范(linux和windows路径语法不同)还有就是需要确认到ndk的版本号文件夹,声明后项目ndk路径也就有了,但是编译有提示此处设置后续可能被抛弃,所以不建议在此地声明,哎 as的bug真心不少,下载了你不识别,声明了你又说后续要抛弃不能用 到底要做什么,还有就是build声明ndk版本号如下:
        ndk版本号

        备注:gradle编译和ndk的版本号有关,不同的编译版本对应不同的ndk版本,不建议ndk太新版本。

      • andriod项目文件夹梳理: java,res,assets,aidl,cpp 等文件夹是同一级目录,JniLibs,libs,src是同一级目录。

参考文章:
Android:opencv环境搭建
Android:opencv的初始化
libc++_shared.so not found bug异常解决
build中ndk版本号的设置
Android官网:c++库支持
github:Android NDK案例集合

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容