使用 NDK(本机 C++ 代码)部分构建 librealsense android 应用程序?

时间:2021-01-30 03:55:50

标签: android c++ cmake android-ndk realsense

我正在尝试构建一个 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 ?提前致谢!

1 个答案:

答案 0 :(得分:0)

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

如果您想自己构建 AAR,只需按照 build instructions 操作即可。

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

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