Setelah menginstal dan mengonfigurasi Android Studio, membuat project, dan menyiapkan Jetpack XR SDK, Anda siap untuk mulai membangun pengalaman imersif untuk perangkat seperti headset XR dan kacamata XR berkabel.
Sebelum mulai mempelajari semua cara yang dapat Anda lakukan untuk membangun, tinjau informasi dan selesaikan tugas apa pun di bagian berikut untuk memastikan aplikasi Anda dikonfigurasi untuk pengembangan XR imersif.
Mengonfigurasi file manifes aplikasi Anda
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 dibedakan XR, file manifes Anda harus berisi elemen dan atribut berikut:
Properti PROPERTY_XR_ACTIVITY_START_MODE
Properti android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
memungkinkan sistem mengetahui bahwa aktivitas harus diluncurkan dalam mode tertentu saat
aktivitas dimulai.
Properti ini memiliki nilai berikut:
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_HOME_SPACE
Gunakan mode mulai ini untuk meluncurkan aplikasi Anda di Ruang Utama. Dalam Ruang Utama, beberapa aplikasi dapat berjalan berdampingan, sehingga pengguna dapat melakukan multitasking. Semua aplikasi Android seluler atau perangkat layar besar dapat beroperasi di Ruang Utama, 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
Gunakan mode mulai ini untuk meluncurkan aplikasi Anda di Ruang Penuh. Di Ruang Penuh, hanya satu aplikasi yang berjalan dalam 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>
Properti PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED
Properti android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
menunjukkan bahwa aplikasi harus diluncurkan dengan jenis
batas tertentu. Aplikasi Anda harus menentukan
XR_BOUNDARY_TYPE_LARGE jika dirancang untuk memungkinkan
pengguna bergerak di ruang fisik mereka. Menentukan
XR_BOUNDARY_TYPE_NO_RECOMMENDATION tidak memberikan
rekomendasi untuk jenis batas pengaman, sehingga sistem menggunakan jenis
yang sudah digunakan.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
android:value="XR_BOUNDARY_TYPE_LARGE" />
</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 Google Play Store
memfilter aplikasi yang ditampilkan kepada pengguna dengan tepat.
Fitur berikut khusus untuk aplikasi yang dibedakan XR.
android.software.xr.api.spatial
Aplikasi yang di-build 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 menggabungkan fitur atau konten yang dibedakan XR ke dalam APK seluler yang ada dan dipublikasikan di jalur rilis seluler, tetapkan atribut android:required ke 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" />
Jika aplikasi Anda dibuat khusus untuk perangkat yang mendukung XR dan dipublikasikan ke
jalur rilis khusus Android XR, tetapkan atribut android:required ke
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
Fitur ini menunjukkan bahwa aplikasi memerlukan input dari pengontrol gerakan 6DoF
(derajat kebebasan) presisi tinggi agar dapat berfungsi dengan benar. Jika aplikasi Anda
mendukung pengontrol dan tidak dapat berfungsi tanpanya, tetapkan nilainya ke true.
Jika aplikasi Anda mendukung pengontrol, tetapi dapat beroperasi tanpa pengontrol, tetapkan ke
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
Flag ini menunjukkan bahwa aplikasi memerlukan pelacakan gerak tangan fidelitas tinggi agar
berfungsi dengan benar, termasuk posisi, orientasi, dan kecepatan sendi di
tangan pengguna. Jika aplikasi Anda mendukung pelacakan gerak tangan dan tidak dapat berfungsi tanpanya, tetapkan nilai ke true. Jika aplikasi Anda mendukung pelacakan gerak tangan, tetapi dapat beroperasi
tanpanya, tetapkan ke 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
Flag ini menunjukkan bahwa aplikasi memerlukan pelacakan gerak mata fidelitas tinggi agar input
berfungsi dengan benar. Jika aplikasi Anda mendukung pelacakan gerak mata untuk input dan tidak dapat
berfungsi tanpanya, tetapkan nilainya ke true. Jika aplikasi Anda mendukung pelacakan gerak mata
untuk input, tetapi dapat beroperasi tanpanya, tetapkan ke 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" />
android.hardware.xr.input.face_tracking
Flag ini menunjukkan bahwa aplikasi memerlukan hardware pelacakan wajah agar dapat berfungsi
dengan benar. Jika aplikasi Anda mendukung pelacakan wajah dan tidak dapat berfungsi tanpanya, tetapkan
nilainya ke true. Jika aplikasi Anda mendukung pelacakan wajah, tetapi dapat beroperasi tanpanya, tetapkan ke false.
<!-- Sets android:required to true, indicating that your app can't function on devices without face tracking. -->
<uses-feature android:name="android.hardware.xr.input.face_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 tersebut menggunakan fitur dengan mendeklarasikannya dalam elemen <uses-feature>
dalam manifes aplikasi. Beberapa fitur, seperti telepon atau GPS, mungkin tidak
kompatibel dengan semua perangkat.
Untuk mendapatkan daftar fitur yang diaktifkan untuk perangkat, jalankan adb
shell pm list features.
Fitur yang tidak didukung
Google Play Store memfilter aplikasi yang tersedia untuk diinstal di perangkat menggunakan deklarasi fitur Android berikut.
Hardware Kamera
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
Konektivitas
android.hardware.ipsec_tunnel_migration
Konfigurasi Perangkat
Konfigurasi Faktor Bentuk
android.hardware.type.automotive
android.hardware.type.embedded
android.hardware.type.television
android.software.leanback_only
Input
android.software.input_methods
Lokasi
Komunikasi Nirkabel Jarak Dekat
Konfigurasi dan Hardware Keamanan
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
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.relative_humidity
android.hardware.sensor.stepcounter
android.hardware.sensor.stepdetector
Konfigurasi Software
android.software.connectionservice
android.software.expanded_picture_in_picture
android.software.live_wallpaper
android.software.picture_in_picture
android.software.wallet_location_based_suggestions
Telepon
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
Virtual Reality (Lama)
android.hardware.vr.headtracking
android.hardware.vr.high_performance
Widget
Langkah berikutnya
Setelah selesai mengonfigurasi manifes aplikasi dan meninjau informasi penting, pelajari cara membangun pengalaman imersif:
- Menghadirkan aplikasi Android ke 3D dengan XR
- Mengembangkan UI spasial dengan Jetpack Compose untuk XR
- Mengimplementasikan Desain Material untuk UI spasial Anda
- Menambahkan lingkungan spasial ke aplikasi Anda
- Membuat, mengontrol, dan mengelola entity