从 Android 中的本机 c++ 文件调用本机 opencv

Posted

技术标签:

【中文标题】从 Android 中的本机 c++ 文件调用本机 opencv【英文标题】:Calling native opencv, from native c++ files in Android 【发布时间】:2017-03-27 21:30:29 【问题描述】:

在这里真的很挣扎。基本上,我有一大堆来自 ios 项目的 c++ 文件,它们使用 opencv 并且工作正常。

现在,我正在尝试移植到 android。所以我需要做的是,将我拥有的现有 c++ 文件作为共享库拉入 Android 项目,并且仍然能够调用本机 opencv c++ 方法。这可能吗?

我知道 java 实现只是 c++ 代码的一堆包装器,但我似乎找不到从项目中的其他 c++ 文件调用本机 c++ 代码的方法。任何帮助表示赞赏。谢谢

史蒂夫

【问题讨论】:

【参考方案1】:

您是否尝试过使用Android NDK (Native Development Kit)?它允许您在 Android 中使用 c/c++ 代码。但是您不能简单地将库导入您的应用程序,您需要使用 NDK(.SO 文件)构建它,它会生成充当代码链接器的脚本。

【讨论】:

【参考方案2】:

如果我对您的理解正确,您需要在本机层(而不是通过 Java API)与 opencv 交互。您应该能够为您的目标平台获取 .so 库以及必要的标头,并使用 NDK 对其进行构建。

如果您的应用程序项目没有 JNI 部分,只需将相应的 OpenCV 原生库从 /sdk/native/libs/ 复制到您的项目目录到文件夹 libs/。

source

有很多方法可以设置 NDK 构建。较新版本的 CMake (>=3.7.2) 使得交叉编译相对容易。见this page

【讨论】:

以上是关于从 Android 中的本机 c++ 文件调用本机 opencv的主要内容,如果未能解决你的问题,请参考以下文章

如何加载android系统本机库

带有静态库的 Android Studio 中的本机 C++ 代码

我想从本机活动传递数据以使用 android 中的桥接来反应本机 js 文件

如何附加调试器以从托管(C#)包装器进入本机(C++)代码?

MobileFirst:将文件从本机资源文件夹复制到 Android 环境中的本机文件夹

从 c# 代码调用带有 void *parameter 的本机 c++ 函数