Ringkasan pembuatan untuk Android XR

Android XR adalah ekstensi dari platform dan ekosistem Android. Android XR SDK dirancang agar Anda dapat mem-build aplikasi XR menggunakan framework dan alat Android yang sudah dikenal atau menggunakan standar terbuka seperti OpenXR dan WebXR. Semua aplikasi seluler atau layar besar yang kompatibel akan tersedia untuk diinstal di headset XR dari Play Store. Tinjau pertimbangan kompatibilitas untuk melihat apakah aplikasi Anda kompatibel.

Panduan ini menjelaskan area berikut:

  • Memilih alat dan teknologi pengembangan
  • Mendesain aplikasi untuk Android XR
  • Mengonfigurasi file manifes aplikasi
  • Pertimbangan kompatibilitas manifes aplikasi
  • Memahami izin untuk Android XR
  • Memastikan kualitas aplikasi Android XR
  • Memaketkan dan mendistribusikan aplikasi untuk Android XR

Memilih alat dan teknologi pengembangan

Saat mem-build aplikasi untuk Android XR, Anda dapat memilih dari platform dan teknologi pengembangan berikut:

Jetpack XR SDK

Jetpack XR SDK berisi library Jetpack Android XR yang dibuat untuk memanfaatkan kemampuan unik perangkat XR. Mulai dengan SDK ini jika Anda ingin melakukan salah satu hal berikut:

  • Mengoptimalkan atau meningkatkan aplikasi seluler atau tablet Android yang ada
  • Mem-build aplikasi Android XR baru menggunakan Android Studio dan Jetpack

Jika Anda sudah merasa nyaman mengembangkan dengan Android Jetpack, Jetpack XR SDK adalah pilihan yang tepat untuk Anda. Library ini dirancang untuk berintegrasi secara lancar dengan framework dan library tersebut, serta memungkinkan Anda menggunakan pengetahuan yang ada untuk membangun pengalaman XR yang imersif.

Pelajari lebih lanjut pengembangan dengan Jetpack XR SDK.

Unity

Unity Engine adalah game engine pengembangan 3D real-time yang memungkinkan seniman, desainer, dan developer berkolaborasi untuk menciptakan pengalaman imersif dan interaktif. Dukungan Android XR Unity memberi Anda kontrol tingkat tinggi atas pengalaman 3D yang Anda kembangkan, sekaligus mendapatkan manfaat dari dukungan OpenXR dan ekosistem developer Unity yang sudah mapan.

Jika Anda sudah memiliki pengalaman XR yang dibuat dengan Unity atau jika Anda sudah terbiasa dengan pengembangan Unity, mulailah dengan opsi ini.

Pelajari lebih lanjut pengembangan dengan Unity untuk Android XR.

OpenXR

OpenXR adalah standar terbuka bebas royalti yang dapat digunakan untuk mem-build pengalaman XR multiplatform berperforma tinggi. Android XR mendukung OpenXR 1.0 dan 1.1, dan kami memperluas spesifikasi dengan ekstensi baru untuk Android XR. Karena Android XR dibuat berdasarkan standar terbuka, alat pengembangan yang mendukung OpenXR dan Android harus kompatibel dengan Android XR.

Pelajari lebih lanjut dukungan OpenXR untuk Android XR.

WebXR

WebXR memungkinkan Anda membuat pengalaman imersif untuk web. API ini memberikan akses ke perangkat VR dan AR di browser web yang kompatibel seperti Chrome di Android XR.

Mulai dengan opsi ini jika Anda ingin mem-build pengalaman XR untuk web atau jika Anda ingin menambahkan kemampuan XR ke aplikasi web. Pengalaman WebXR yang ada juga akan berfungsi di Android XR.

Pelajari lebih lanjut cara mem-build aplikasi web dengan WebXR.

Mendesain untuk XR

XR memperluas platform desain di luar layar datar tradisional; Anda dapat mendesain pengalaman imersif yang memadukan realitas fisik dan virtual. Baik Anda mem-build pengalaman baru atau menambahkan elemen imersif ke aplikasi yang ada, panduan desain untuk Android XR dapat membantu Anda memulai.

Mengonfigurasi file manifes aplikasi

Seperti project aplikasi Android lainnya, aplikasi Android XR Anda harus memiliki file AndroidManifest.xml dengan setelan manifes tertentu. File manifes menjelaskan informasi penting tentang aplikasi Anda ke alat build Android, sistem operasi Android, dan Google Play. Lihat panduan ringkasan manifes aplikasi untuk mengetahui informasi selengkapnya.

Untuk aplikasi yang terdiferensiasi XR, file manifes Anda harus berisi elemen dan atribut berikut:

Properti PROPERTY_ACTIVITY_XR_START_MODE

Properti android:name="android.window.PROPERTY_ACTIVITY_XR_START_MODE" memberi tahu sistem bahwa aktivitas harus diluncurkan dalam mode tertentu saat aktivitas dimulai.

Ada tiga kemungkinan nilai untuk properti ini:

  • XR_ACTIVITY_START_MODE_HOME_SPACE (khusus Jetpack XR SDK)
  • XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED (khusus Jetpack XR SDK)
  • XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED (Khusus OpenXR)

XR_ACTIVITY_START_MODE_HOME_SPACE

(Khusus aplikasi yang dibuat dengan Jetpack XR SDK)

Gunakan mode mulai ini untuk meluncurkan aplikasi di Ruang Rumah. Di Ruang Rumah, beberapa aplikasi dapat berjalan berdampingan, sehingga pengguna dapat melakukan multitasking. Aplikasi Android seluler atau layar besar dapat beroperasi di Ruang Rumah, serta aplikasi XR yang dibuat menggunakan Jetpack XR SDK.

<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

(Khusus aplikasi yang dibuat dengan Jetpack XR SDK)

Gunakan mode mulai ini untuk meluncurkan aplikasi dalam Ruang Penuh. Dalam Ruang Penuh, hanya satu aplikasi yang berjalan pada satu waktu, tanpa batas ruang, dan semua aplikasi lainnya disembunyikan.


<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

(Khusus aplikasi yang dibuat dengan OpenXR)

Aplikasi yang di-build dengan OpenXR diluncurkan dalam Ruang Penuh dan harus menggunakan mode mulai XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED. Ruang Penuh yang tidak dikelola memberi sinyal ke Android XR bahwa aplikasi menggunakan OpenXR.


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

<uses-native-library> OpenXR

(Khusus aplikasi yang dibuat dengan OpenXR)

Aplikasi OpenXR harus mendeklarasikan penggunaan library OpenXR native agar berhasil memuat runtime-nya. Tanpa deklarasi ini, runtime akan gagal dimuat.


<manifest ... >

    <application ... >

    <uses-native-library android:name="libopenxr.google.so" android:required="true" />

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

Fitur PackageManager untuk aplikasi XR

Saat mendistribusikan aplikasi melalui Google Play Store, Anda dapat menentukan fitur hardware atau software yang diperlukan dalam manifes aplikasi. Elemen uses-feature memungkinkan Play Store memfilter aplikasi yang ditampilkan kepada pengguna dengan tepat.

Fitur berikut khusus untuk aplikasi yang terdiferensiasi XR.

android.software.xr.api.spatial

Aplikasi yang dibuat menggunakan Jetpack XR SDK harus menyertakan fitur ini dalam manifes aplikasi. Nilai yang Anda tetapkan untuk atribut android:required bergantung pada jalur rilis aplikasi Anda.

Jika aplikasi Anda memaketkan fitur atau konten yang dibeda-bedakan XR ke dalam APK seluler yang ada dan dipublikasikan di jalur rilis seluler, Anda harus menetapkan atribut android:required ke false. Jika aplikasi Anda dibuat secara khusus untuk perangkat yang mendukung XR dan dipublikasikan ke jalur rilis khusus Android XR, Anda harus menetapkan atribut android:required ke true.

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

android.software.xr.api.openxr

Aplikasi yang menargetkan platform Android XR dan di-build dengan OpenXR atau Unity harus menyertakan fitur ini dalam manifes aplikasi dengan atribut android:required ditetapkan ke true.

Aplikasi yang menggunakan Paket Ekstensi Android XR untuk Unity versi 1.0.0 atau yang lebih tinggi atau Unity OpenXR: Android XR Package versi 0.5.0-exp.1 atau yang lebih tinggi tidak perlu menambahkan elemen ini secara manual ke manifes aplikasi. Kedua paket ini akan memasukkan elemen ini ke dalam manifes aplikasi untuk Anda.

Perangkat dapat menentukan versi untuk fitur ini, yang menunjukkan versi OpenXR tertinggi yang didukung oleh perangkat. 16 bit yang lebih tinggi mewakili bilangan utama, dan 16 bit yang lebih rendah mewakili bilangan minor. Misalnya, untuk menentukan OpenXR versi 1.1, nilainya akan ditetapkan ke "0x00010001".

Aplikasi dapat menggunakan versi fitur untuk menunjukkan versi minimum OpenXR yang diperlukan aplikasi. Misalnya, jika aplikasi Anda memerlukan dukungan OpenXR versi 1.1, deklarasikan fitur berikut:

<uses-feature android:name="android.software.xr.api.openxr"
    android:version="0x00010001"
    android:required="true" />

android.hardware.xr.input.controller

Fitur ini menunjukkan bahwa aplikasi memerlukan input dari pengontrol gerakan 6DoF (derajat kebebasan) presisi tinggi agar berfungsi dengan benar. Jika aplikasi Anda mendukung pengontrol dan tidak dapat berfungsi tanpanya, tetapkan nilai ke benar (true). Jika aplikasi Anda mendukung pengontrol, tetapi dapat beroperasi tanpanya, tetapkan ke salah (false).

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

android.hardware.xr.input.hand_tracking

Flag ini menunjukkan bahwa aplikasi memerlukan pelacakan tangan fidelitas tinggi agar berfungsi dengan benar, termasuk posisi, orientasi, dan kecepatan sendi di tangan pengguna. Jika aplikasi Anda mendukung pelacakan tangan dan tidak dapat berfungsi tanpa pelacakan tangan, tetapkan nilai ke benar (true). Jika aplikasi Anda mendukung pelacakan tangan, tetapi dapat beroperasi tanpa pelacakan tangan, tetapkan ke salah (false).

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

android.hardware.xr.input.eye_tracking

Flag ini menunjukkan bahwa aplikasi memerlukan pelacakan mata fidelitas tinggi agar input berfungsi dengan benar. Jika aplikasi Anda mendukung pelacakan mata untuk input dan tidak dapat berfungsi tanpanya, tetapkan nilai ke benar (true). Jika aplikasi Anda mendukung pelacakan mata untuk input, tetapi dapat beroperasi tanpanya, tetapkan ke salah (false).

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

Pertimbangan kompatibilitas manifes aplikasi untuk aplikasi seluler dan perangkat layar besar

Seperti yang dijelaskan di bagian Fitur PackageManager untuk aplikasi XR, aplikasi mendeklarasikan bahwa aplikasi menggunakan fitur dengan mendeklarasikannya dalam elemen <uses-feature> dalam manifes aplikasi. Beberapa fitur, seperti telepon atau GPS, mungkin tidak kompatibel dengan semua perangkat.

Fitur yang tidak didukung

Aplikasi filter Google Play Store tersedia untuk diinstal di perangkat menggunakan deklarasi fitur Android berikut.

Hardware Kamera

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

Konektivitas

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

Konfigurasi Perangkat

android.hardware.ram.low

Konfigurasi Faktor Bentuk

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

Input

android.hardware.consumerir

android.software.input_methods

Lokasi

android.hardware.location.gps

Near Field Communication

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

Konfigurasi dan Hardware Keamanan

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

Sensor

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

Konfigurasi Software

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

Telepon

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

Virtual Reality (Lama)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

Widget

android.software.app_widgets

Memahami izin untuk XR

Sama seperti aplikasi di perangkat seluler dan faktor bentuk lainnya, beberapa kemampuan yang ditawarkan oleh aplikasi XR mungkin mengharuskan aplikasi Anda untuk mendeklarasikan izin dalam file AndroidManifest aplikasi. Dalam kasus izin berbahaya, aplikasi Anda mungkin perlu meminta izin runtime. Baca Izin di Android dan praktik terbaik izin untuk mengetahui informasi yang lebih mendalam.

Izin berikut dapat digunakan oleh aplikasi XR. Semua izin di bagian ini dianggap sebagai izin berbahaya, jadi Anda harus mendeklarasikannya dalam manifes aplikasi dan memintanya saat runtime.

android.permission.EYE_TRACKING_COARSE

Merepresentasikan pose, status, dan orientasi mata pengguna, seperti untuk digunakan dengan avatar. Gunakan izin ini jika data pelacakan mata dengan presisi rendah diperlukan.

android.permission.EYE_TRACKING_FINE

Tatapan mata untuk pemilihan, input, dan interaksi.

android.permission.FACE_TRACKING

Melacak dan merender ekspresi wajah.

Jetpack XR SDK

t/a

Ekstensi OpenXR

Fitur Unity

android.permission.HAND_TRACKING

Melacak pose sendi tangan serta kecepatan sudut dan linear; Menggunakan representasi mesh tangan pengguna.

android.permission.SCENE_UNDERSTANDING_COARSE

Estimasi cahaya; memproyeksikan passthrough ke permukaan mesh; melakukan raycast terhadap objek yang dapat dilacak di lingkungan; pelacakan bidang; pelacakan objek; anchor persisten.

android.permission.SCENE_UNDERSTANDING_FINE

Tekstur kedalaman.

Jetpack XR SDK

t/a

Ekstensi OpenXR

Fitur Unity

Memastikan kualitas aplikasi Android XR

Untuk memastikan aplikasi Anda memberikan pengalaman pengguna yang baik, tinjau pedoman kualitas aplikasi Android XR kami.

Mengemas dan mendistribusikan aplikasi untuk Android XR

Android XR menghadirkan berbagai aplikasi dan pengalaman ke headset XR melalui Google Play. Dalam panduan untuk memaketkan dan mendistribusikan aplikasi untuk Android XR, Anda akan menemukan informasi tentang cara memulai Play Store dan Konsol Play, memublikasikan jalur, menyiapkan app bundle Android, dan batasan ukuran aplikasi.