首页 > 解决方案 > 使用 NDK(本机 C++ 代码)部分构建 librealsense android 应用程序?

问题描述

我正在尝试构建一个android应用程序。

  1. 该应用程序利用 librealsense android 包装器来获取帧(返回com.intel.realsense.librealsense.FrameSet)。
  2. 然后它将获得的帧传递给一些本机 C++ 函数以进行进一步处理。本机 C++ 函数将rs2::frameset作为输入参数,例如int NativeFrameProcessing(rs2::frameset& frames). 这是通过使用 NDK 实现的。

通过查看librealsense示例android程序,android中的帧获取部分似乎很清楚。librealsense 代码还显示了通过将本地指针转换为jlong.

我不清楚的是如何在 android 部分和 NDK(本机代码)部分中指定 librealsense 依赖项。

在android中,依赖被指定为:

repositories {
    maven{
        url "https://dl.bintray.com/intel-realsense/librealsense-dev"
    }
}

dependencies {
    implementation 'com.intel.realsense:librealsense:2.41.0+@aar'
}

在 NDK(本机代码部分)中,我使用 CMake 生成编译配置。

find_package(realsense2 REQUIRED)

但是我猜这样,CMake会找到安装在当前系统中的librealsense(本例中是Ubuntu,因为我在Ubuntu中做项目),它不是针对android设备构建的,版本可能不一致使用下载的 AAR android 库。

那么如何正确指定对 librealsense 的依赖项?例如,指向 CMake 以某种方式使用下载的 AAR 库,因此 android 部分和 NDK 部分都依赖于相同的 librealsense ?提前致谢 !

标签: androidc++cmakeandroid-ndkrealsense

解决方案


根据 Android文档,AAR 已经包含本机程序集 -
这意味着您不需要构建它并且可以删除 CMake 支持。

如果您想自己构建 AAR,只需按照构建说明进行操作。

如果出于某种原因,您可能想realsense2.so直接链接,您可以简单地通过解压缩从 AAR 中提取它 - 或者自己构建 AAR 并从输出中获取它。

工具链绝对不会关心主机系统上安装的程序集——即使两者都可以生成x86_64程序集,它们也会链接到不同的库,因此不兼容且不可互换。


推荐阅读