如何为现有Android OpenGLES原生C++项目集成OpenXR?
在Android Studio中为C++引擎配置OpenXR的正确方案
方案一:使用官方Maven预编译库(推荐,无需编译源码)
- 保留
app/build.gradle中的依赖:
implementation 'org.khronos.openxr:openxr_loader_for_android:1.1.41'
- 修改项目的
CMakeLists.txt,添加以下配置(替换[你的项目名]为实际目标名称):
# 自动查找OpenXR Loader包(Android Studio会自动识别Maven中的依赖) find_package(openxr_loader_for_android REQUIRED CONFIG) # 为你的引擎目标添加头文件路径并链接库 target_include_directories([你的项目名] PRIVATE ${openxr_loader_for_android_INCLUDE_DIRS}) target_link_libraries([你的项目名] PRIVATE openxr_loader_for_android::openxr_loader)
如果find_package失效,可手动指定路径(可通过Android Studio的External Libraries找到openxr_loader_for_android,右键选择Show in Explorer查看本地缓存路径):
# 手动指定头文件路径 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../.gradle/caches/modules-2/files-2.1/org.khronos.openxr/openxr_loader_for_android/1.1.41/<本地缓存路径>/jni/include) # 链接对应ABI的预编译库 target_link_libraries([你的项目名] PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../.gradle/caches/modules-2/files-2.1/org.khronos.openxr/openxr_loader_for_android/1.1.41/<本地缓存路径>/jni/${ANDROID_ABI}/libopenxr_loader.so)
方案二:源码编译OpenXR SDK
- 重新克隆完整的OpenXR SDK仓库(必须包含子模块,否则缺失核心代码):
git clone --recursive https://github.com/KhronosGroup/OpenXR-SDK.git lib/openxr
- 修改项目的
CMakeLists.txt,添加以下配置:
# 添加OpenXR SDK子目录,指定编译参数(EXCLUDE_FROM_ALL避免编译所有示例) add_subdirectory( lib/openxr lib/build/lib/android/openxr EXCLUDE_FROM_ALL ) # 为你的引擎目标添加头文件路径 target_include_directories( [你的项目名] PRIVATE lib/openxr/include lib/openxr/src/include ) # 链接核心OpenXR Loader库(注意不是openxr-gfxwrapper,那是示例工具库) target_link_libraries([你的项目名] PRIVATE openxr_loader)
- 在
app/build.gradle的defaultConfig中指定最低Android版本和ABI(OpenXR要求至少API 24):
android { defaultConfig { minSdkVersion 24 externalNativeBuild { cmake { abiFilters 'arm64-v8a' arguments "-DANDROID_ABI=arm64-v8a", "-DANDROID_PLATFORM=android-24" } } } }
关键注意事项
- 头文件
#include <openxr/openxr.h>等写法正确,只要CMake配置了正确的include路径,编译器就能找到。 - 不要链接
openxr-gfxwrapper,这是OpenXR示例中的辅助库,核心功能依赖的是openxr_loader。 - 源码编译时必须克隆子模块,否则会缺失核心头文件和代码,导致CMake报错。
内容的提问来源于stack exchange,提问作者Johnathan
相关产品推荐
相关产品推荐

