Android studio使用nativeC++建立openxr运行环境

先去跑起来openxr提供的hello_xr示例工程再继续

参考meta(原facebook)官方对于android studio编译器配置进行配置安装。
meta链接跳转,有墙
了解android工程结构再继续看
自己先动手实验配置再继续看,不保证方法步骤全部适用,但是自己从零开始并运行起来的,我使用的是valkan引擎,openGl或者其他引擎的话,以下内容部分步骤可以参考。

1.首先启用native C++空模板

要让项目运行起来,最核心的就是,添加配置openxr的sdk以及vulkan(如果是opengl,那就添加opengl),没有其他多余的库需要添加了。

2.根据hello_xr中main.cpp所引用的文件,把需要的文件以及所在的目录全部拷贝到当前src/main/cpp目录下.

在这里插入图片描述
在这里插入图片描述

3.在cpp目录下的cmakelists中

使用include_directories()引用新加入目录

include_directories(common)
include_directories(openXR_include)
include_directories(openXR_src)
include_directories(vulkan_shaders)

调用拷贝的openxr的头文件(此项目中的opensdk是.so文件+openXR_include目录里面的头文件,这些头文件是hello_xr实力工程中里面没有的,感觉像是meta团队和hello_xr更新维护不同步)

find_library(ANDROID_LIBRARY NAMES android)
find_library(ANDROID_LOG_LIBRARY NAMES log)
add_library(openxr_loader SHARED IMPORTED)
set_target_properties(openxr_loader PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/openXR_src/${ANDROID_ABI}/${CMAKE_BUILD_TYPE}/libopenxr_loader.so)
find_path(ANDROID_NATIVE_APP_GLUE android_native_app_glue.h PATHS ${ANDROID_NDK}/sources/android/native_app_glue)
add_library(android_native_app_glue OBJECT "${ANDROID_NATIVE_APP_GLUE}/android_native_app_glue.c")
target_include_directories(android_native_app_glue PUBLIC ${ANDROID_NATIVE_APP_GLUE})
target_compile_options(android_native_app_glue PRIVATE -Wno-unused-parameter)

使用add_library()引用新拷贝的cpp文件

add_library( # Sets the name of the library.
			myxrdemo
			MODULE
			native-lib.cpp
			graphicsplugin_factory.cpp
			graphicsplugin_vulkan.cpp
			logger.cpp
			openxr_program.cpp
			platformplugin_android.cpp
			platformplugin_factory.cpp)

添加vulkan

find_package(Vulkan)

最后链接

target_link_libraries( # Specifies the target library.
        myxrdemo
        android_native_app_glue
        openxr_loader
        ${Vulkan_LIBRARY}
        ${ANDROID_LIBRARY} ${ANDROID_LOG_LIBRARY})
4.build.gradle中

设置依赖项,android{}这行以上的配置,基本按照hello_xr设置的依赖

  1. c++的版本要设置成17,这样拷贝hello_xr的有些C++的语法才不会报错
  2. externalNativeBuild {}中设置ndk,主要是设置openXR_src的路径,根据工程当前所处的环境,调用里面不同的.so文件。
  3. android{}中设置ndkVersion "21.4.7075529"版本号可以自己选定,不需要一模一样,根据报错信息换ndk的版本(前提是已经下载了对应的ndk版本)。
5.在main目录下的AndroidManifest.xml中

下面这行代码将 android:hasCode 声明为 false,因为此应用只包含原生代码,而不含 Java 代码。

<application android:label="@string/app_name"appname//tips:(@string/app_name"appname是原生自带的项目名称,不用和这一样)
android:hasCode="false">
<activity android:name="android.app.NativeActivity"

如果Logcat提示Didn’t find class “androidx.startup.InitializationProvider”
就是用下面这行代码,忽视 androidx.startup.InitializationProvider

<provider android:name="androidx.startup.InitializationProvider"
            android:authorities="${applicationId}.androidx-startup"
            tools:node="remove" />

指定 android:value 作为要构建的共享库的名称

 <activity
            android:name="android.app.NativeActivity"
            android:configChanges="screenSize|screenLayout|orientation|keyboardHidden|keyboard|navigation|uiMode|density"
            android:excludeFromRecents="false"
            android:launchMode="singleTask"
            android:resizeableActivity="false"
            android:screenOrientation="landscape"
            android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
            android:exported="true"
            tools:ignore="NonResizeableActivity">

            <meta-data
                android:name="android.app.lib_name"
                android:value="myxrdemo" />

            <meta-data
                android:name="com.oculus.vr.focusaware"
                android:value="true" />

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="com.oculus.intent.category.VR" />
                <category android:name="android.intent.category.LAUNCHER" />
<!--                <category android:name="org.khronos.openxr.intent.category.IMMERSIVE_HMD" />-->
6.

对于naticeC++空项目来说,调用的是Java_com_example_myapplication_MainActivity_stringFromJNI()
但是现在需要android_main作为程序的入口,所以需要引入
#include <android_native_app_glue.h>
(解释放上面cmake中为什么引入android_native_app_glue.h)

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值