IT技术之家

首页 > 移动

移动

搭建Monado Runtime和OpenXR Sample Code编译环境_shawn·xiao_openxr 安卓

发布时间:2022-07-08 18:37:35 移动 0次 标签:android
继上一篇ORB_SLAM3在Linux中的编译环境搭建完成之后还需要搭建编译Runtime和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的编译环境搭建完成!
?