Android XR용 빌드 개요

Android XR은 Android 플랫폼 및 생태계의 확장입니다. Android XR SDK는 익숙한 Android 프레임워크 및 도구를 사용하거나 OpenXR 및 WebXR과 같은 개방형 표준을 사용하여 XR 앱을 빌드할 수 있도록 설계되었습니다. 호환되는 모든 모바일 또는 대형 화면 앱은 Play 스토어에서 XR 헤드셋에 설치할 수 있습니다. 호환성 고려사항을 검토하여 앱이 호환되는지 확인합니다.

이 가이드에서는 다음 영역에 대해 설명합니다.

  • 개발 도구 및 기술 선택
  • Android XR용 앱 설계
  • 앱의 매니페스트 파일 구성
  • 앱 매니페스트 호환성 고려사항
  • Android XR의 권한 이해하기
  • Android XR 앱 품질 보장
  • Android XR용 앱 패키징 및 배포

개발 도구 및 기술 선택

Android XR용 앱을 빌드할 때 다음 개발 플랫폼 및 기술 중에서 선택할 수 있습니다.

Jetpack XR SDK

Jetpack XR SDK에는 XR 기기의 고유한 기능을 활용하도록 빌드된 Android XR Jetpack 라이브러리가 포함되어 있습니다. 다음 중 하나를 수행하려면 이 SDK로 시작하세요.

  • 기존 Android 모바일 또는 태블릿 앱 최적화 또는 개선
  • Android 스튜디오 및 Jetpack을 사용하여 새 Android XR 앱 빌드

이미 Android Jetpack으로 개발에 익숙하다면 Jetpack XR SDK가 적합합니다. 이러한 프레임워크 및 라이브러리와 원활하게 통합되도록 설계되었으며 몰입형 XR 환경을 빌드하는 데 기존 지식을 사용할 수 있습니다.

Jetpack XR SDK로 개발에 대해 자세히 알아보기

Unity

Unity Engine은 아티스트, 디자이너, 개발자가 공동작업하여 몰입도 높은 양방향 환경을 만들 수 있는 실시간 3D 개발 엔진입니다. Unity의 Android XR 지원을 사용하면 개발하는 3D 환경을 높은 수준으로 제어할 수 있으며 Unity의 확립된 OpenXR 지원 및 개발자 생태계의 이점을 누릴 수 있습니다.

이미 Unity로 빌드된 XR 환경이 있거나 Unity 개발에 익숙한 경우 이 옵션으로 시작합니다.

Android XR용 Unity로 개발하는 방법 자세히 알아보기

OpenXR

OpenXR은 고성능 멀티플랫폼 XR 환경을 빌드하는 데 사용할 수 있는 로열티가 없는 개방형 표준입니다. Android XR은 OpenXR 1.0 및 1.1을 지원하며 Android XR용 새로운 확장 프로그램으로 사양을 확장하고 있습니다. Android XR은 개방형 표준을 기반으로 하기 때문에 OpenXR 및 Android를 지원하는 개발 도구는 Android XR과 호환되어야 합니다.

Android XR의 OpenXR 지원에 대해 자세히 알아보기

WebXR

WebXR을 사용하면 웹용 몰입형 환경을 구축할 수 있습니다. Android XR의 Chrome과 같은 호환되는 웹브라우저에서 VR 및 AR 기기에 액세스할 수 있도록 지원합니다.

웹용 XR 환경을 빌드하거나 웹 앱에 XR 기능을 추가하려면 이 옵션으로 시작합니다. 기존 WebXR 환경도 Android XR에서 작동합니다.

WebXR로 웹 앱을 빌드하는 방법 자세히 알아보기

XR용 디자인

XR은 기존의 평면 화면을 넘어 디자인 영역을 확장합니다. 실제 현실과 가상 현실을 혼합하는 몰입형 환경을 설계할 수 있습니다. 새로운 환경을 빌드하거나 기존 앱에 몰입형 요소를 추가할 때 Android XR용 디자인 가이드를 참고하면 도움이 됩니다.

앱의 매니페스트 파일 구성

다른 Android 앱 프로젝트와 마찬가지로 Android XR 앱에는 특정 매니페스트 설정이 포함된 AndroidManifest.xml 파일이 있어야 합니다. 매니페스트 파일은 Android 빌드 도구, Android 운영체제, Google Play에 앱에 관한 필수 정보를 설명합니다. 자세한 내용은 앱 매니페스트 개요 가이드를 참고하세요.

XR 차별화 앱의 경우 매니페스트 파일에 다음 요소와 속성이 포함되어야 합니다.

PROPERTY_ACTIVITY_XR_START_MODE 속성

android:name="android.window.PROPERTY_ACTIVITY_XR_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_FULL_SPACE_UNMANAGED (OpenXR만 해당)

XR_ACTIVITY_START_MODE_HOME_SPACE

(Jetpack XR SDK로 빌드된 앱만 해당)

이 시작 모드를 사용하여 Home Space에서 앱을 실행합니다. Home Space에서는 여러 앱을 나란히 실행할 수 있으므로 사용자가 멀티태스킹을 할 수 있습니다. 모든 모바일 또는 대형 화면 Android 앱은 Home Space에서 작동할 수 있으며 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

(Jetpack XR SDK로 빌드된 앱만 해당)

이 시작 모드를 사용하여 전체 공간에서 앱을 실행합니다. 전체 공간에서는 한 번에 하나의 앱만 실행되며 공간 경계가 없고 다른 모든 앱은 숨겨집니다.


<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>

XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED

(OpenXR로 빌드된 앱만 해당)

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>

XR 앱의 PackageManager 기능

Google Play 스토어를 통해 앱을 배포할 때 앱 매니페스트에서 필수 하드웨어 또는 소프트웨어 기능을 지정할 수 있습니다. uses-feature 요소를 사용하면 Play 스토어에서 사용자에게 표시되는 앱을 적절하게 필터링할 수 있습니다.

다음 기능은 XR 앱에만 해당합니다.

android.software.xr.immersive

앱이 Android XR 플랫폼을 타겟팅하고 XR을 지원하는 플랫폼에서만 실행되는 경우 값을 true로 설정합니다. 앱에 XR 최적화 기능이 있지만 XR 이외의 기기에서도 실행할 수 있는 경우 값을 false로 설정합니다.

OpenXR 또는 Unity로 빌드된 앱은 이 값을 true로 설정해야 합니다.

<uses-feature android:name="android.software.xr.immersive" android:required="true" />

android.hardware.xr.input.controller

이 기능은 앱이 제대로 작동하려면 고정밀 6DoF(자유도) 모션 컨트롤러의 입력이 필요하다는 것을 나타냅니다. 앱이 컨트롤러를 지원하고 컨트롤러 없이는 작동할 수 없는 경우 값을 true로 설정합니다. 앱이 컨트롤러를 지원하지만 컨트롤러 없이도 작동할 수 있는 경우 false로 설정합니다.

<uses-feature android:name="android.hardware.xr.input.controller" android:required="true" />

android.hardware.xr.input.hand_tracking

이 플래그는 앱이 올바르게 작동하려면 사용자 손의 관절의 위치, 방향, 속도 등 고화질 손 추적이 필요하다는 것을 나타냅니다. 앱이 손 추적을 지원하고 손 추적 없이는 작동할 수 없는 경우 값을 true로 설정합니다. 앱이 손 추적을 지원하지만 손 추적 없이도 작동할 수 있는 경우 false로 설정합니다.

<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="true" />

android.hardware.xr.input.eye_tracking

이 플래그는 입력이 올바르게 작동하려면 앱에 고화질 아이 트래킹이 필요하다는 것을 나타냅니다. 앱이 입력에 눈 추적을 지원하고 눈 추적 없이는 작동할 수 없는 경우 값을 true로 설정합니다. 앱이 입력에 눈 추적을 지원하지만 눈 추적 없이도 작동할 수 있는 경우 false로 설정합니다.

<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />

모바일 및 대형 화면 앱의 앱 매니페스트 호환성 고려사항

XR 앱의 PackageManager 기능 섹션에 설명된 대로 앱은 앱 매니페스트의 <uses-feature> 요소에서 기능을 선언하여 기능을 사용한다고 선언합니다. 전화나 GPS와 같은 일부 기능은 일부 기기와 호환되지 않을 수 있습니다.

지원되지 않는 기능

다음 Android 기능 선언을 사용하여 기기에 설치할 수 있는 Google Play 스토어 필터 애플리케이션

카메라 하드웨어

android.hardware.camera.ar

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.flash

android.hardware.camera.level.full

연결

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

기기 설정

android.hardware.ram.low

폼 팩터 구성

android.hardware.type.automotive

android.hardware.type.embedded

android.hardware.type.pc

android.hardware.type.television

android.hardware.type.watch

android.software.leanback

android.software.leanback_only

android.software.live_tv

입력

android.hardware.consumerir

android.software.input_methods

위치

android.hardware.location.gps

근거리 무선통신

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

보안 구성 및 하드웨어

android.hardware.se.omapi.ese

android.hardware.se.omapi.sd

android.hardware.se.omapi.uicc

android.hardware.biometrics.face

android.hardware.fingerprint

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.light

android.hardware.sensor.relative_humidity

android.hardware.sensor.stepcounter

android.hardware.sensor.stepdetector

소프트웨어 구성

android.software.backup

android.software.connectionservice

android.software.expanded_picture_in_picture

android.software.live_wallpaper

android.software.picture_in_picture

android.software.telecom

android.software.wallet_location_based_suggestions

전화 통신

android.hardware.telephony

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.software.sip

android.software.sip.voip

가상 현실 (레거시)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

위젯

android.software.app_widgets

XR 권한 이해하기

휴대기기 및 기타 폼 팩터의 앱과 마찬가지로 XR 앱에서 제공하는 일부 기능을 사용하려면 앱의 AndroidManifest 파일에서 권한을 선언해야 할 수 있습니다. 위험한 권한의 경우 앱에서 런타임 권한을 요청해야 할 수 있습니다. 자세한 내용은 Android의 권한권한 권장사항을 참고하세요.

XR 기능 권한

XR 앱에서 다음 권한을 사용할 수 있습니다. 이 섹션의 모든 권한은 위험한 권한으로 간주되므로 앱 매니페스트에서 선언하고 런타임에 요청해야 합니다.

android.permission.EYE_TRACKING

이 권한이 필요한 사용 사례

아바타를 위해 사용자의 눈 모양과 방향을 나타냅니다.

이 권한이 필요한 Jetpack XR SDK 기능

해당 사항 없음

이 권한이 필요한 OpenXR 확장 프로그램

XR_ANDROID_avatar_eyes

이 권한이 필요한 Unity 기능

Android XR: AR 얼굴

android.permission.EYE_TRACKING_FINE

이 권한이 필요한 사용 사례

눈길 입력 및 상호작용

이 권한이 필요한 Jetpack XR SDK 기능

해당 사항 없음

이 권한이 필요한 OpenXR 확장 프로그램

XR_EXT_eye_gaze_interaction

이 권한이 필요한 Unity 기능

Eye Gaze Interaction

android.permission.FACE_TRACKING

이 권한이 필요한 사용 사례

얼굴 표정 추적 및 렌더링

이 권한이 필요한 Jetpack XR SDK 기능

해당 사항 없음

이 권한이 필요한 OpenXR 확장 프로그램

XR_ANDROID_face_tracking

이 권한이 필요한 Unity 기능

XRFaceTrackingFeature

android.permission.HAND_TRACKING

이 권한이 필요한 사용 사례

손 관절 자세 및 각도 및 선형 속도 추적, 사용자 손의 메시 표현 사용

이 권한이 필요한 Jetpack XR SDK 기능

해당 사항 없음

이 권한이 필요한 OpenXR 확장 프로그램

XR_ANDROID_hand_mesh

XR_EXT_hand_tracking

이 권한이 필요한 Unity 기능

XR Hands

XRHandMeshFeature

android.permission.SCENE_UNDERSTANDING

이 권한이 필요한 사용 사례

조명 추정, 메시 표면에 패스스루 투사, 환경의 추적 가능한 항목에 대한 레이캐스트 실행, 평면 추적, 객체 추적, 가림 및 히트 테스트를 위한 깊이 작업, 영구 앵커

이 권한이 필요한 Jetpack XR SDK 기능

비행기 추적

히트 테스트

앵커 지속성

이 권한이 필요한 OpenXR 확장 프로그램

XR_ANDROID_anchor_persistence

XR_ANDROID_depth_texture

XR_ANDROID_light_estimation

XR_ANDROID_composition_layer_passthrough_mesh

XR_ANDROID_raycast

XR_ANDROID_trackables

XR_ANDROID_trackables_object

이 권한이 필요한 Unity 기능

XRAnchorFeature

XRDepthTextureFeature

XRLightEstimationFeature

XRPassthroughFeature

XRTrackableFeature

XRObjectTrackingFeature

Android XR 앱 품질 보장

앱이 우수한 사용자 환경을 제공할 수 있도록 하려면 Android XR 앱 품질 가이드라인을 검토하세요.

Android XR용 앱 패키징 및 배포

Android XR은 Google Play를 통해 XR 헤드셋에 다양한 앱과 환경을 제공합니다. Android XR용 앱 패키징 및 배포 가이드에서는 Play 스토어 및 Play Console 시작하기, 트랙 게시, Android App Bundle 준비, 앱 크기 제한에 관한 정보를 확인할 수 있습니다.