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에서 작동합니다.
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.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 권한 이해하기
휴대기기 및 기타 폼 팩터의 앱과 마찬가지로 XR 앱에서 제공하는 일부 기능을 사용하려면 앱의 AndroidManifest 파일에서 권한을 선언해야 할 수 있습니다. 위험한 권한의 경우 앱에서 런타임 권한을 요청해야 할 수 있습니다. 자세한 내용은 Android의 권한 및 권한 권장사항을 참고하세요.
XR 기능 권한
XR 앱에서 다음 권한을 사용할 수 있습니다. 이 섹션의 모든 권한은 위험한 권한으로 간주되므로 앱 매니페스트에서 선언하고 런타임에 요청해야 합니다.
android.permission.EYE_TRACKING
이 권한이 필요한 사용 사례
아바타를 위해 사용자의 눈 모양과 방향을 나타냅니다.
이 권한이 필요한 Jetpack XR SDK 기능
해당 사항 없음
이 권한이 필요한 OpenXR 확장 프로그램
이 권한이 필요한 Unity 기능
Android XR: AR 얼굴
android.permission.EYE_TRACKING_FINE
이 권한이 필요한 사용 사례
눈길 입력 및 상호작용
이 권한이 필요한 Jetpack XR SDK 기능
해당 사항 없음
이 권한이 필요한 OpenXR 확장 프로그램
이 권한이 필요한 Unity 기능
android.permission.FACE_TRACKING
이 권한이 필요한 사용 사례
얼굴 표정 추적 및 렌더링
이 권한이 필요한 Jetpack XR SDK 기능
해당 사항 없음
이 권한이 필요한 OpenXR 확장 프로그램
이 권한이 필요한 Unity 기능
android.permission.HAND_TRACKING
이 권한이 필요한 사용 사례
손 관절 자세 및 각도 및 선형 속도 추적, 사용자 손의 메시 표현 사용
이 권한이 필요한 Jetpack XR SDK 기능
해당 사항 없음
이 권한이 필요한 OpenXR 확장 프로그램
이 권한이 필요한 Unity 기능
android.permission.SCENE_UNDERSTANDING
이 권한이 필요한 사용 사례
조명 추정, 메시 표면에 패스스루 투사, 환경의 추적 가능한 항목에 대한 레이캐스트 실행, 평면 추적, 객체 추적, 가림 및 히트 테스트를 위한 깊이 작업, 영구 앵커
이 권한이 필요한 Jetpack XR SDK 기능
비행기 추적
히트 테스트
앵커 지속성
이 권한이 필요한 OpenXR 확장 프로그램
이 권한이 필요한 Unity 기능
Android XR 앱 품질 보장
앱이 우수한 사용자 환경을 제공할 수 있도록 하려면 Android XR 앱 품질 가이드라인을 검토하세요.
Android XR용 앱 패키징 및 배포
Android XR은 Google Play를 통해 XR 헤드셋에 다양한 앱과 환경을 제공합니다. Android XR용 앱 패키징 및 배포 가이드에서는 Play 스토어 및 Play Console 시작하기, 트랙 게시, Android App Bundle 준비, 앱 크기 제한에 관한 정보를 확인할 수 있습니다.