搭建Monado Runtime和OpenXR Sample Code编译环境_shawn·xiao_openxr 安卓
继上一篇《搭建ORB_SLAM3在Linux下的编译和运行环境》完成之后
为了完全打通 OpenXR---Runtime---SLAM 的数据通路
我们还需要搭建编译Runtime和OpenXR的环境
Runtime编译的是开源的Monado
OpenXR则需要编两份开源代码:
1.OpenXR-sdk-source :?
???OpenXR-sdk-source的SampleCode——Hello_xr
2.OpenXR-android-broker:
???用来加载Runtime的borker
???broker的源码比较难找,在gitlab上可以找到:
?? https://gitlab.freedesktop.org/ryan.pavlik/draft-openxr-android-broker-impl
最终生成的交付件都是apk:
1.Monado生成inProcess和outOfProcess两个apk:
? ?openxr_android-inProcess-debug.apk
? ?openxr_android-outOfProcess-debug.apk
2.Openxr-android-broker会生成4个apk,不过运行Hello_xr只需要用到其中一个:
? ?installable_runtime_broker-debug.apk
3.OpenXR-sdk-sources SampleCode会生成两种图形渲染方式的apk:
? ?hello_xr-OpenGLES-debug.apk
? ?hello_xr-Vulkan-debug.apk
源码在Github上自行搜索下载
最终结果以Hello_xr能够安装在Android设备(手机、VR等)上且能正常运行表示成功
Monado和OpenXR的环境配置和运行主要分三部分:
一.配置Android相关编译环境
二.配置Monado、OpenXR的编译工具,依赖库
三.编译、运行
环境搭建之前,先将虚拟机的虚拟内存、硬盘空间、CPU核尽量开大,
否则在编译过程中出现虚拟机卡死,或者电脑直接崩了,会是一件很囧的事
本地虚拟机配置如下:
虚拟内存:10G
虚拟硬盘:80G
CPU:4核
扩展虚拟内存和硬盘的具体方法,
在《搭建ORB_SLAM3在Linux下的编译和运行环境》第1节中已有说明,
不再重复讲解。
一.配置Android相关编译环境
1.?? ?安装jdk
2.?? ?安装android-sdk
3.?? ?安装ndk
1.1?安装jdk
JDK要下载适配Android的Java8或11,不要下载最新的Java17、18
要不然最终编译会直接报”Unsupported class file major version 62”错误:
(有这种错误就说明是JDK版本不对)
?
jdk官方下载地址:Java Downloads | Oracle
终端执行:
(1) mkdir java && cd java
(2) 下载Java11的linux对应版本x64 Compressed Archive : jdk-11.0.15.1_linux-x64_bin.tar.gz
(3) 解压:tar –zxvf jdk-11.0.15.1_linux-x64_bin.tar.gz
(4) sudo vim /etc/profile
(5) 在文件最后添加jdk环境变量:
export JAVA_HOME=/home/shawn/java/jdk-11.0.15.1
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
保存后,退出
(6) 使文件生效:source /etc/profile
(7) 查看是否安装成功:java –version
有如下图显示,则表示安装成功:
1.2 安装Android-sdk
目前Android-sdk都是通过Android Studio直接下载,
但是Android官网从sdk24之后就不再提供Android sdk package的直接下载了。
不过从官网?https://developer.android.com/studio 的最下面可以看到,
android官方提供了一种不需要Android Studio, 只需要download SDK packages的方式。
就是用sdkmanager来实现
因此我们需要实现在Linux下面使用sdkmanager下载AndroidSDK
先下载cmdline-tools工具
然后用cmdline-tools再下载sdkmanager
终端执行:
(1) mkdir android-sdk && cd android-sdk
(2)下载cmdline-tools.zip工具包:
直接下载压缩包或者命令下载:
wget https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
(3)解压:unzip commandlinetools-linux-8092744_latest.zip
解压之后,sdkmanager就在/android-sdk/cmdline-tools/bin下面
(4) cd ../android-sdk/cmdline-tools/bin
(5)执行“./sdkmanager --list --channel=0”查看是否能获取到官方释放的sdk列表,
发现并没有,只有如下报错(图中”temp”应名为”android-sdk”,此处仅为示例):
无法找到sdk根目录,
提示显示有两种解决办法:
一是用sdk_root指定路径
二是把文件夹移动到指定路径
使用第二种,简单直接
可以直接在文件管理中操作,或者终端命令移动:
在/android-sdk/cmdline-tools/目录下新建一个名为latest文件夹
将/cmdline-tools下所有文件都拷贝到 latest 文件夹中
终端命令也很简单,cd 到cmdline-tools目录后执行:
(6) mkdir latest?
(7) mv bin/ lib/ NOTICE.txt source.properties -t latest/
两种方法选其一就行了。
文件移动完成后,cd到latest/bin/ 目录
再次执行查询命令:./sdkmanager --list --channel=0
就能看到android从发布至今所有的sdk,build-tools,platform-tools等
终端命令下载对应版本sdk并标识对应的platforms:
(8) ./sdkmanager "build-tools;31.0.0" "platforms;android-31"
安装过程中会有一些协议许可认证需要用户确认
一路y就行
下载完成后,sdk所有一级子目录都会被下载到cmdline-tools同级目录下
?
(9) 在/etc/profile中配置ANDROID_HOME环境变量:sudo vim /etc/profile
文件末尾添加下面两行:
export ANDROID_HOME=/home/shawn/android-sdk
export PATH=$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$ANDROID_HOME/
tools/bin:$PATH
保存退出,执行:source /etc/profile
Linux安装SDK完成!
参考文档:Linux安装Android Sdk_爱新觉罗狗剩儿的博客-CSDN博客_linux安装android sdk
1.3?安装ndk
ndk配置比较简单,官网直接下载压缩包,或者终端命令下载,
然后解压,再配置环境变量。
?
(1) wget https://dl.google.com/android/repository/android-ndk-r23b-linux.zip
(2) unzip android-ndk-r23b-linux.zip
(3) sudo vim /etc/profile
文件末尾添加下面两行:
export NDK_HOME=/home/shawn/android_ndk/android-ndk-r23b/
export PATH=$NDK_HOME:$PATH
保存退出
(4) source /etc/profile
ndk的下载似乎不是必须的,
在最后./grdlew编译时貌似会自动下载ndk且直接安装到上一步android-sdk目录里面。
官网在”自动安装 NDK 和 CMake”一项中对此也有介绍:
安装及配置 NDK 和 CMake ?|? Android 开发者 ?|? Android Developers
但是前提是已预先接受NDK和CMake 的许可,
使用以下命令预先接受脚本中的相应许可:
${sdk}/cmdline-tools/latest/bin/sdkmanager --licenses
提示选择是否同意时,一路y
二.配置Monado、OpenXR的编译工具,依赖库
Monado / Monado · GitLab
从monado源码官网可以看到,
monado的编译环境具体配置如下:
?
其中cmake、python、Eigen3在ORB_SLAM3环境搭建时已经安装,
此处不在复述
OpenGL在搭建ORB_SLAM3环境编译opencv配置cmake时,
有专门打开WITH_OPENGL=ON,不需要单独安装
并且似乎opengl、vulkan在./gradlew编译时会自动下载依赖(暂不确定),
vulkan依赖没有单独配置,但是最终hello_xr也编译出了vulkan apk
libusb、libudev、Video 4 Linux也都不需要配置
glslangValidator需要安装,否则会出现如下错误:
glslangValidator安装也十分简单,其官网有说明:
glslang-tools_11.1.0-4_arm64.deb Ubuntu 21.10 Download
终端命令:
(1) sudo apt-get update
(2) sudo apt-get install glslang-tools
三.编译、运行
3.1 在这三个目录下,分别执行 ./gradlew assembleDebug 编译即可
shawn@shawn-virtual-machine:~/openxr/monado$?
shawn@shawn-virtual-machine:~/openxr/openxr-android-broker$?
shawn@shawn-virtual-machine:~/openxr/OpenXR-SDK-Source/src/tests/hello_xr$
3.2最终apk生成目录:
monado apk:
../src/xrt/targets/openxr_android/build/outputs/apk/inProcess/debug
../src/xrt/targets/openxr_android/build/outputs/apk/outOfProcess/debug
openxr-android-broker apk:
../sampleclient/build/outputs/apk/debug/sampleclient-debug.apk
../system_runtime_broker/build/outputs/apk/debug/system_runtime_broker-debug.apk
../installable_runtime_broker/build/outputs/apk/debug/installable_runtime_broker-debug.apk
../nativesampleclient/build/outputs/apk/debug/nativesampleclient-debug.apk
Hello_xr apk:
../src/tests/hello_xr/build/outputs/apk/Vulkan/debug/hello_xr-Vulkan-debug.apk
../src/tests/hello_xr/build/outputs/apk/ OpenGLES/debug/hello_xr-OpenGLES-debug.apk
3.3 在手机或者VR设备上分别安装如下apk:
adb install ../installable_runtime_broker-debug.apk?
adb install ../openxr_android-outOfProcess-debug.apk
adb install ../hello_xr-OpenGLES-debug.apk
adb install ../hello_xr-Vulkan-debug.apk
3.4 运行:
不论是手机端还是VR,安装完三个APK后
(1).先运行Monado XR
(2).Home退出再运行OpenXR Runtime,勾选Monado XR
(3).Home退出再运行Hello XR
? ? ?(hello_xr-OpenGLES-debug.ap可能在android手机上会有些问题,
? ? ? hello_xr-Vulkan-debug.apk亲测是可以的)
手机端运行效果:
?
?
VR端运行效果如下:
因为我们是在Pico neo3上安装apk做的测试
从第二张图可以看到,OpenXR broker在选择加载Runtime时,
不仅会有我们自己编译的Monado Runtime,还有Pico XR Runtime的选项
这就可以理解,Runtime上承OpenXR SDK,下接device适配层的属性了
?
?
?
?当前效果还是2D的,要想改为3D的,在Hello_xr的Androidmainfest.xml中做如下修改即可:?
到此,基于Monado的Runtime和OpenXR SKD Source code的编译环境搭建完成!
?
相关文章
- 单元测试入门篇_单元测试csdn_程序员杨叔
- vue3中hooks的介绍及用法_一只爱吃糖的小羊_vue hooks
- 登录注册token_咬口大葱_token注册
- 一次java内存top res高排查记录_java进程res一直增高_死磕音视频
- Node.js--》Express和路由模块的讲解使用_亦世凡华、
- 【MineCraft】-- 使用Java开发我的世界Mod_我的世界mod开发_Shewyoo
- 生产环境调试APNS的方式(测试同学说线上APP突然接收不到通知了。)_不安分的羽毛_apns 测试
- Flex布局实战详解_flex布局实战篇_RedEric
- 大数据面试题集锦-Hadoop面试题(二)-HDFS_张飞的猪大数据
- 【操作系统】?? Windows压缩工具 “ Bandizip与7-zip ”(带你快速了解)_久绊A
- shell 脚本中 的> /dev/null 2>&1_祥仔先生
- Spark学习笔记(三)_langzitianya
- 升级iOS 16后续航时间变短了,如何提升续航?_m0_63254421_苹果更新ios16时间如何变小
- TDengine 入门教程⑤??数据库SQL操作 | 建库、建表、数据读写_tdengine创建表_小康师兄
- Java / Tensorflow - API 调用 pb 模型使用 GPU 推理_BIT_666_手机端测pb模型怎么调用
- 软考高级系统架构设计师系列论文之:百篇软考高级架构设计师论文范文_最笨的羊羊_系统架构设计论文