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_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_FULL_SPACE_UNMANAGED (OpenXR만 해당)

XR_ACTIVITY_START_MODE_HOME_SPACE

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

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

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

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 애플리케이션은 런타임을 성공적으로 로드하기 위해 네이티브 OpenXR 라이브러리 사용을 선언해야 합니다. 이 선언이 없으면 런타임이 로드되지 않습니다.

<manifest ... >

    <application ... >

    <uses-native-library andro id: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.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.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" />

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

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

지원되지 않는 기능

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

카메라 하드웨어

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

android.permission.EYE_TRACKING_COARSE

아바타와 함께 사용하기 위한 사용자 시선 포즈, 상태, 방향을 나타냅니다. 정밀도가 낮은 눈 추적 데이터가 필요한 경우 이 권한을 사용합니다.

Jetpack XR SDK

해당 사항 없음

OpenXR 확장 프로그램

Unity 기능

android.permission.EYE_TRACKING_FINE

선택, 입력, 상호작용을 위한 시선 추적

Jetpack XR SDK

해당 사항 없음

OpenXR 확장 프로그램

Unity 기능

android.permission.FACE_TRACKING

표정 추적 및 렌더링

Jetpack XR SDK

해당 사항 없음

OpenXR 확장 프로그램

Unity 기능

android.permission.HAND_TRACKING

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

android.permission.SCENE_UNDERSTANDING_COARSE

조명 추정, 메시 표면에 패스스루 투영, 환경에서 추적 가능 항목에 대한 광선 투사 실행, 평면 추적, 객체 추적, 영구 앵커

android.permission.SCENE_UNDERSTANDING_FINE

깊이 텍스처입니다.

Jetpack XR SDK

해당 사항 없음

OpenXR 확장 프로그램

Unity 기능

Android XR 앱 품질 확인

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

Android XR용 앱 패키징 및 배포

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


OpenXR™ 및 OpenXR 로고는 The Khronos Group Inc. 소유의 상표이며 중국, 유럽 연합, 일본, 영국에 상표로 등록되어 있습니다.