
yuyi
下载 Android Studio 并通过其安装 Android SDK、相应的 NDK 以进行 Pico4 设备上的原生 c++ 混合应用开发。
注意问题 ⚠️:
Android sdk、 Cmake、 JDK 等开发环境版本和项目代码中使用的版本对应。Could not GET ‘https://dl.google.com/dl/android/maven2/com/android/tools/b***.pom
报错解决办法,取消 Android Studio 代理设置,在 gradle.property(global) 中注释掉代理设置代码,重启 Android Studio.
从 pico4 开发者官网下载原生开发的 Pico_openXR_SDK 文件,其中包含对应 pico4 版本的 helloXR 项目。
使用 Android Studio 打开该项目,构建 gradle 运行环境。
连接 pico4 物理设备到电脑,检测到设备后,点击运行。
一级目录文件及其作用
├── CMakeLists.txt // CMake 构建系统的配置文件
├── build // 这个目录通常是构建过程中生成的。包含编译后的代码、生成的资源文件和构建过程中产生的文件
├── build.gradle //Gradle 构建脚本。它定义了项目的构建过程、依赖关系和所需的插件等
├── gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── hello_xr // 主要包含源代码
├── local.properties // 本地机器特定的配置,比如 Android SDK 和 NDK 的路径
├── openxr_loader
└── settings.gradle // 配置整个 Gradle 项目的设置
源代码目录文件
├── AndroidManifest.xml
├── CMakeLists.txt
├── check.h
├── common.h
├── d3d_common.cpp
├── d3d_common.h
├── geometry.h
├── graphicsapi.h
├── graphicsplugin.h
├── graphicsplugin_d3d11.cpp
├── graphicsplugin_d3d12.cpp
├── graphicsplugin_factory.cpp
├── graphicsplugin_opengl.cpp
├── graphicsplugin_opengles.cpp
├── graphicsplugin_vulkan.cpp
├── hello_xr.1
├── java
├── logger.cpp
├── logger.h
├── main.cpp
├── openxr_program.cpp
├── openxr_program.h
├── options.h
├── pch.cpp
├── pch.h
├── platformdata.h
├── platformplugin.h
├── platformplugin_android.cpp
├── platformplugin_factory.cpp
├── platformplugin_win32.cpp
├── platformplugin_xlib.cpp
└── vulkan_shaders
这些文件是你的 hello_xr
项目的核心组成部分,每个文件都有其特定的用途和功能。
AndroidManifest.xml
: 这是 Android 应用的清单文件,定义了应用的基本特性,如权限、活动(Activities)和服务(Services)等。CMakeLists.txt
: CMake 配置文件,用于指导项目的编译和构建过程。check.h
, common.h
, geometry.h
, graphicsapi.h
, graphicsplugin.h
, options.h
, pch.h
, platformdata.h
, platformplugin.h
: 这些 .h
文件是 C++ 头文件,定义了类、函数原型和其他类型的声明。d3d_common.cpp
, graphicsplugin_d3d11.cpp
, graphicsplugin_d3d12.cpp
, graphicsplugin_factory.cpp
, graphicsplugin_opengl.cpp
, graphicsplugin_opengles.cpp
, graphicsplugin_vulkan.cpp
, logger.cpp
, main.cpp
, openxr_program.cpp
, platformplugin_android.cpp
, platformplugin_factory.cpp
, platformplugin_win32.cpp
, platformplugin_xlib.cpp
, pch.cpp
: 这些 .cpp
文件包含了上述头文件中声明的函数和类的具体实现。d3d_common.cpp/h
: 可能包含与 Direct3D(一种图形接口)相关的通用函数和定义。graphicsplugin_*.cpp
: 这些文件可能是针对不同图形 API(如 Direct3D 11, Direct3D 12, OpenGL, Vulkan 等)的实现。logger.cpp/h
: 定义了日志记录功能,用于记录程序运行时的信息。openxr_program.cpp/h
: 这些文件可能与 OpenXR API 的使用有关,用于创建和管理 VR/AR 体验。platformplugin_*.cpp
: 这些文件可能是针对不同平台(如 Android, Windows, Xlib 等)的特定功能实现。vulkan_shaders
: 这个目录可能包含用于 Vulkan 图形 API 的着色器代码。hello_xr.1
: 这可能是一个文档文件,例如 man page(手册页)。java
目录: 包含 Java 源代码,通常用于 Android 应用的 Java 层实现。每个文件都是项目的一部分,共同协作以实现 VR/AR 应用的功能。🌟📚
如果定义了 XR_USE_PLATFORM_ANDROID,即程序在 Android 平台上运行,代码将执行以下操作:
ShowHelp() 和 UpdateOptionsFromSystemProperties() 函数提供了帮助信息,并从系统属性中更新配置选项。
AndroidAppState 结构体和 app_handle_cmd() 函数用于处理 Android 应用的生命周期事件。
android_main() 函数是 Android 应用的入口点,它初始化了 OpenXR 程序,并且循环处理事件和渲染帧。
创建和初始化 OpenXR 程序:无论是在 Android 还是其他平台上,代码都会创建和初始化一个 OpenXR 程序。这包括创建实例、初始化系统、创建会话和交换链。
事件循环:程序进入一个循环,不断处理事件、轮询动作,并渲染新的帧。这个循环是 VR 应用的核心,确保了持续的用户交互和图形更新。