지원되는 OpenXR 확장 프로그램 또는 지원되는 엔진으로 빌드를 시작하기 전에 다음 섹션의 정보를 검토하고 작업을 완료하여 앱이 몰입형 XR 개발용으로 구성되어 있는지 확인하세요.
앱의 매니페스트 파일 구성
다른 Android 앱 프로젝트와 마찬가지로 Android XR 앱에는 특정 매니페스트 설정이 있는 AndroidManifest.xml 파일이 있어야 합니다. 매니페스트 파일은 Android 빌드 도구, Android 운영체제, Google Play에 앱에 관한 필수 정보를 설명합니다. 자세한 내용은 앱 매니페스트 개요 가이드를 참고하세요.
XR 차별화 앱의 경우 매니페스트 파일에 다음 요소와 속성이 포함되어야 합니다.
PROPERTY_XR_ACTIVITY_START_MODE 속성
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" 속성을 사용하면 활동이 시작될 때 특정 모드에서 활동을 실행해야 함을 시스템에 알릴 수 있습니다.
이 속성에는 다음 값이 있습니다.
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED(OpenXR만 해당)
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
OpenXR로 빌드된 앱은 전체 공간에서 실행되며 XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED 시작 모드를 사용해야 합니다. 관리되지 않는 전체 공간은 앱이 OpenXR을 사용한다고 Android XR에 신호를 보냅니다.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED" />
<activity
android:name="com.example.myapp.MainActivity" ... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED 속성
android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" 속성은 애플리케이션이 특정 유형의 경계로 실행되어야 함을 나타냅니다. 앱이 사용자가 실제 공간을 이동할 수 있도록 설계된 경우 XR_BOUNDARY_TYPE_LARGE를 지정해야 합니다. XR_BOUNDARY_TYPE_NO_RECOMMENDATION을 지정하면 안전 경계 유형에 관한 추천이 제공되지 않으므로 시스템에서 이미 사용 중인 유형을 사용합니다.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
android:value="XR_BOUNDARY_TYPE_LARGE" />
</application>
</manifest>
<uses-native-library> OpenXR
OpenXR 애플리케이션은 런타임을 성공적으로 로드하기 위해 네이티브 OpenXR 라이브러리 사용을 선언해야 합니다. 이 선언이 없으면 런타임이 로드되지 않습니다.
<manifest ... >
<application ... >
<uses-native-library android:name="libopenxr.google.so" android:required="false" />
<activity
android:name="com.example.myapp.MainActivity" ... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
XR 앱용 PackageManager 기능
Google Play 스토어를 통해 앱을 배포할 때 앱 매니페스트에서 필수 하드웨어 또는 소프트웨어 기능을 지정할 수 있습니다. uses-feature 요소를 사용하면 Play 스토어에서 사용자에게 표시되는 앱을 적절하게 필터링할 수 있습니다.
다음 기능은 XR 차별화 앱에만 적용됩니다.
android.software.xr.api.openxr
Android XR 플랫폼을 타겟팅하고 OpenXR 또는 Unity로 빌드된 앱은 android:required 속성이 true로 설정된 앱 매니페스트에 이 기능을 포함해야 합니다.
Android XR Extensions Package for Unity 버전 1.0.0 이상 또는 Unity OpenXR: Android XR Package 버전 0.5.0-exp.1 이상을 사용하는 앱은 앱 매니페스트에 이 요소를 수동으로 추가하지 않아도 됩니다. 이 두 패키지는 앱 매니페스트에 이 요소를 삽입합니다.
기기는 이 기능의 버전을 지정할 수 있으며, 이는 기기에서 지원하는 가장 높은 OpenXR 버전을 나타냅니다. 상위 16비트는 메이저 번호를 나타내고, 하위 16비트는 마이너 번호를 나타냅니다. 예를 들어 OpenXR 버전 1.1을 지정하려면 값을 "0x00010001"로 설정합니다.
앱은 기능 버전을 사용하여 앱에 필요한 OpenXR의 최소 버전을 나타낼 수 있습니다. 예를 들어 앱에 OpenXR 버전 1.1 지원이 필요한 경우 다음과 같은 기능을 선언합니다.
<uses-feature android:name="android.software.xr.api.openxr"
android:version="0x00010001"
android:required="true" />
android.hardware.xr.input.controller
이 기능은 앱이 올바르게 작동하려면 고정밀 6DoF(자유도) 모션 컨트롤러의 입력이 필요함을 나타냅니다. 앱이 컨트롤러를 지원하고 컨트롤러 없이는 작동할 수 없는 경우 값을 true로 설정합니다.
앱이 컨트롤러를 지원하지만 컨트롤러 없이도 작동할 수 있는 경우 false로 설정합니다.
<!-- Sets android:required to true, indicating that your app can't function on devices without controllers. -->
<uses-feature android:name="android.hardware.xr.input.controller" android:required="true" />
android.hardware.xr.input.hand_tracking
이 플래그는 앱이 사용자의 손에 있는 관절의 위치, 방향, 속도를 비롯한 고충실도 손 추적을 올바르게 작동하는 데 필요로 함을 나타냅니다. 앱이 손 추적을 지원하고 손 추적 없이는 작동할 수 없는 경우 값을 true로 설정합니다. 앱이 손 추적을 지원하지만 손 추적 없이도 작동할 수 있는 경우 false로 설정합니다.
<!-- Sets android:required to true, indicating that your app can't function on devices without hand tracking. -->
<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="true" />
android.hardware.xr.input.eye_tracking
이 플래그는 앱이 입력에 고화질 눈 추적이 필요하여 제대로 작동함을 나타냅니다. 앱이 입력용 시선 추적을 지원하고 시선 추적 없이는 작동할 수 없는 경우 값을 true로 설정합니다. 앱이 입력용 시선 추적을 지원하지만 시선 추적 없이도 작동할 수 있는 경우 false로 설정합니다.
<!-- Sets android:required to true, indicating that your app can't function on devices without eye tracking. -->
<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />
다음 단계
앱의 매니페스트를 구성하고 중요한 정보를 검토했으므로 이제 OpenXR로 빌드하는 방법을 살펴보세요.