Android 스튜디오를 설치하고 구성하고, 프로젝트를 만들고, Jetpack XR SDK를 설정하면 몰입형 환경을 빌드할 준비가 완료됩니다.
빌드할 수 있는 모든 방법을 살펴보기 전에 다음 섹션의 정보를 검토하고 작업을 완료하여 앱이 몰입형 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_HOME_SPACE(Jetpack XR SDK만 해당)XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED(Jetpack XR SDK만 해당)
XR_ACTIVITY_START_MODE_HOME_SPACE
이 시작 모드를 사용하여 홈 스페이스에서 앱을 실행합니다. 홈 공간에서는 여러 앱이 나란히 실행되므로 사용자가 멀티태스킹을 할 수 있습니다. 모든 모바일 또는 대형 화면 Android 앱은 홈 공간에서 작동할 수 있으며 Jetpack XR SDK를 사용하여 빌드된 XR 앱도 마찬가지입니다.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_HOME_SPACE" />
<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_ACTIVITY_START_MODE_FULL_SPACE_MANAGED
이 시작 모드를 사용하여 전체 공간에서 앱을 실행합니다. 전체 공간에서는 공간 경계 없이 한 번에 하나의 앱만 실행되고 다른 모든 앱은 숨겨집니다.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED" />
<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>
XR 앱용 PackageManager 기능
Google Play 스토어를 통해 앱을 배포할 때 앱 매니페스트에서 필수 하드웨어 또는 소프트웨어 기능을 지정할 수 있습니다. uses-feature 요소를 사용하면 Play 스토어에서 사용자에게 표시되는 앱을 적절하게 필터링할 수 있습니다.
다음 기능은 XR 차별화 앱에만 적용됩니다.
android.software.xr.api.spatial
Jetpack XR SDK를 사용하여 빌드된 앱은 앱 매니페스트에 이 기능을 포함해야 합니다. android:required 속성에 설정하는 값은 앱의 출시 트랙에 따라 다릅니다.
앱이 XR 차별화 기능 또는 콘텐츠를 기존 모바일 APK에 번들로 묶고 모바일 출시 트랙에 게시된 경우 android:required 속성을 false로 설정합니다.
<!-- If you are publishing an existing mobile APK using the mobile release track, set android:required to false.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="false" />
앱이 XR 지원 기기용으로 특별히 빌드되고 Android XR 전용 출시 트랙에 게시된 경우 android:required 속성을 true로 설정합니다.
<!-- If you are publishing a separate APK for XR using the dedicated Android XR release track, set android:required to true.-->
<uses-feature android:name="android.software.xr.api.spatial" 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" />
모바일 및 대형 화면 앱의 앱 매니페스트 호환성 고려사항
XR 앱용 PackageManager 기능 섹션에 설명된 대로 앱은 앱 매니페스트의 <uses-feature> 요소에서 기능을 선언하여 기능을 사용한다고 선언합니다. 텔레포니나 GPS와 같은 일부 기능은 모든 기기와 호환되지 않을 수 있습니다.
기기에 사용 설정된 기능 목록을 가져오려면 adb
shell pm list features를 실행합니다.
지원되지 않는 기능
Google Play 스토어는 다음 Android 기능 선언을 사용하여 기기에 설치할 수 있는 애플리케이션을 필터링합니다.
카메라 하드웨어
android.hardware.camera.autofocus
android.hardware.camera.capability.manual_post_processing
android.hardware.camera.capability.manual_sensor
android.hardware.camera.capability.raw
android.hardware.camera.concurrent
android.hardware.camera.external
android.hardware.camera.level.full
연결
android.hardware.ipsec_tunnel_migration
기기 설정
폼 팩터 구성
android.hardware.type.automotive
android.hardware.type.embedded
android.hardware.type.television
android.software.leanback_only
입력
android.software.input_methods
위치
근거리 무선통신
보안 구성 및 하드웨어
android.hardware.se.omapi.uicc
android.hardware.biometrics.face
android.hardware.identity_credential
android.hardware.identity_credential_direct_access
android.hardware.keystore.limited_use_key
android.hardware.keystore.single_use_key
android.hardware.strongbox_keystore
센서
android.hardware.sensor.accelerometer_limited_axes
android.hardware.sensor.accelerometer_limited_axes_uncalibrated
android.hardware.sensor.ambient_temperature
android.hardware.sensor.barometer
android.hardware.sensor.gyroscope_limited_axes
android.hardware.sensor.gyroscope_limited_axes_uncalibrated
android.hardware.sensor.heading
android.hardware.sensor.heartrate
android.hardware.sensor.heartrate.ecg
android.hardware.sensor.hinge_angle
android.hardware.sensor.relative_humidity
android.hardware.sensor.stepcounter
android.hardware.sensor.stepdetector
소프트웨어 구성
android.software.connectionservice
android.software.expanded_picture_in_picture
android.software.live_wallpaper
android.software.picture_in_picture
android.software.wallet_location_based_suggestions
전화 통신
android.hardware.telephony.calling
android.hardware.telephony.cdma
android.hardware.telephony.data
android.hardware.telephony.euicc
android.hardware.telephony.euicc.mep
android.hardware.telephony.gsm
android.hardware.telephony.ims
android.hardware.telephony.mbms
android.hardware.telephony.messaging
android.hardware.telephony.radio.access
android.hardware.telephony.subscription
가상 현실 (레거시)
android.hardware.vr.headtracking
android.hardware.vr.high_performance
위젯
다음 단계
이제 앱의 매니페스트 구성을 완료하고 중요한 정보를 검토했으므로 몰입도 높은 환경을 빌드하는 방법을 살펴보세요.
- XR로 Android 앱을 3D로 구현하기
- XR용 Jetpack Compose로 공간 UI 개발
- 공간 UI에 Material Design 구현
- 앱에 공간 환경 추가
- 엔티티 생성, 제어, 관리