Jetpack Compose untuk XR
Update Terbaru | Rilis Stabil | Kandidat Rilis | Rilis Beta | Rilis Alfa |
---|---|---|---|---|
7 Mei 2025 | - | - | - | 1.0.0-alpha04 |
Mendeklarasikan dependensi
Untuk menambahkan dependensi pada XR compose, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk mengetahui informasi selengkapnya.
Tambahkan dependensi untuk artefak yang diperlukan dalam file build.gradle
bagi aplikasi atau modul Anda:
Groovy
dependencies { implementation "androidx.xr.compose:compose:1.0.0-alpha04" // Use to write unit tests testImplementation "androidx.xr.compose:compose-testing:1.0.0-alpha04" }
Kotlin
dependencies { implementation("androidx.xr.compose:compose:1.0.0-alpha04") // Use to write unit tests testImplementation("androidx.xr.compose:compose-testing:1.0.0-alpha04") }
Untuk informasi dependensi selengkapnya, lihat Menambahkan dependensi build.
Masukan
Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau mempunyai masukan untuk meningkatkan kualitas library ini. Harap periksa masalah yang sudah diketahui dalam library ini sebelum membuat laporan baru. Anda dapat memberikan suara untuk masalah yang sudah diketahui dengan mengklik tombol bintang.
Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.
Versi 1.0
Versi 1.0.0-alpha04
7 Mei 2025
androidx.xr.compose:compose:1.0.0-alpha04
dan androidx.xr.compose:compose-testing:1.0.0-alpha04
dirilis. Versi 1.0.0-alpha04 berisi commit ini.
Fitur Baru
- Menambahkan antarmuka
CompositionLocalConsumerSubspaceModifierNode
untuk memungkinkan jenisSubspaceModifier
kustom mengakses nilai lokal komposisi. - Menambahkan
SpatialPanel
API baru yang mengikuti gaya penerapanAndroidView
compose dan menghentikan penggunaanViewBased SpatialPanel
sebelumnya. - Menambahkan objek pendamping
VolumeConstraints.Unbounded
yang mewakili batasan tanpa batas. - Menambahkan
SubspaceModifier.onPointSourceParams
untuk mengizinkan sumber audio yang di-spatialisasi. ApplicationSubspace
publik telah ditambahkan, yang menawarkanVolumeConstraints
opsional untuk menentukan area 3D tempat aplikasi dapat merender konten spasial. Secara default, jika tidak ada batasan yang ditentukan, Subruang akan dibatasi oleh bidang pandangSpatialUser
saat ini dalam lebar dan tinggi. Pengguna dapat memberikan batasan yang akan digunakan jika bidang pandang tidak dapat ditentukan. Jika tidak, nilai lebar dan tinggi bidang pandang default akan digunakan.- Menambahkan
SpatialExternalSurface
, yang dapat digunakan untuk merender konten stereoskopik.SpatialExternalSurface
dapat disesuaikan dengan pengubah (kecuali alfa), dan efek bulu tepi. - Menambahkan Pengubah Subruang
pointerHoverIcon
baru yang memungkinkan pengguna menyetel ikon untuk pointer spasial.
Perubahan API
- Menghapus batasan
RequiresApi(34)
di semua paket Jetpack XR. Pembatasan ini tidak diperlukan karena Jetpack XR saat ini hanya tersedia di perangkat dengan API level 34+. (Iae0f8) - Project yang dirilis dengan Kotlin 2.0 memerlukan KGP 2.0.0 atau yang lebih baru untuk digunakan. (Idb6b5)
- Penanganan kembali kini akan berfungsi di panel spasial tanpa aktivitas tersemat. Agar penanganan kembali berfungsi, Anda harus menentukan
android:enableOnBackInvokedCallback="true"
dalam manifes Android. - Penanganan kembali kini akan berfungsi pada dialog spasial. Agar penanganan balik berfungsi, Anda harus menentukan
android:enableOnBackInvokedCallback="true"
dalam manifes Android. SpatialPanel
berbasis Compose dan View kini dapat menentukan ukurannya sendiri berdasarkan kontennya.- Developer kini dapat menetapkan nilai
SpatialElevationLevel
kustom mereka sendiri dan tidak terbatas pada level yang telah ditentukan sebelumnya. - Tingkat elevasi Orbiter kini dapat disesuaikan melalui parameter
elevation
. - Subruang kini dapat dibatasi oleh bidang pandang
SpatialUser
dalam lebar dan tinggi secara default. Jika bidang pandang tidak dapat ditentukan, nilai lebar dan tinggi bidang pandang default akan digunakan. - Menambahkan callback baru
onMoveStart
danonMoveEnd
ke pengubahMovable
. CallbackonMoveStart
danonMoveEnd
dipanggil saat pengguna memulai dan mengakhiri pemindahan composable subspace dengan pengubah yang dapat dipindahkan. - Parameter
name
telah dihapus dari API spasial sepertiSpatialRow
danSpatialPanel
. Untuk men-debug hierarki compose spasial, gunakanSubspaceModifier.testTag
. - Menghapus kelebihan beban
SpatialPopup
yang tidak didukung yang hanya memilikispatialElevationLevel
dancontent
. Gunakan antarmuka yang mendukungonDimissRequest
. - Callback
onPoseChange
dari pengubah Movable telah dihapus. Sebagai gantinya, gunakanonMove
. SubspaceModifiers
tidak akan lagi menerapkan efeknya jika dilepas atau saat ini sedang dilepas.SpatialRow
API yang ada telah dibagi menjadiSpatialRow
danSpatialCurvedRow
. Jika sebelumnya menggunakan parametercurveRadius
SpatialRow
, gunakanSpatialCurvedRow
sekarang yang menawarkan perilaku yang sama.MainPanel
danActivityPanel
tidak lagi memiliki panel judul saat dijalankan pada image sistem terbaru yang serupa.- Pengubah alfa dan skala kini dapat ditumpuk dan akan mengalikan nilainya untuk nilai alfa atau skala akhir yang diterapkan.
- Callback
onPoseChange
dari pengubah Movable telah dioptimalkan untuk melakukan gerakan pose yang lebih lancar. - Pengubah yang dapat dipindahkan dan diubah ukurannya kini akan menjalankan callback-nya di thread utama untuk memastikan bahwa perubahan status akan memicu rekomposisi.
- Menambahkan pengamatan status ke fase tata letak dan pengukuran untuk memastikan bahwa perubahan status di
SubspaceLayout
akan memicu tata letak ulang. - Update rantai pengubah yang dioptimalkan untuk menggunakan kembali pengubah yang ada dengan lebih baik.
Perbaikan Bug
- Menghentikan scrimming saat
SpatialDialog
ditampilkan. (Ic4594) - Permintaan tata letak ulang yang dibuat saat node pengubah dilepas kini akan diabaikan.
- Menghapus fase tata letak ulang yang dipicu oleh pengubah Movable dan Resizable.
- Memperbaiki error dalam composable
MainPanel()
yang terjadi saat salah satu dimensi ditetapkan ke nol, baik secara langsung maupun selama penghitungan tata letak, misalnya, penghitunganSpatialRow/SpatialColumn
. Panel kini akan disembunyikan. Perhatikan bahwa perbaikan ini secara khusus mengatasi error selama fase tata letak; mengubah ukuran panel menjadi nol melalui interaksi pengguna akan ditangani secara terpisah. Panel tersembunyi tidak memiliki kemampuan UI. - Memperbaiki masalah terkait
maintainAspectRatio
dari pengubah yang dapat diubah ukurannya. Rasio aspek akan dipertahankan sekarang. - Memperbaiki masalah pada Subruang bertingkat yang salah diposisikan untuk satu frame.
- Memperbaiki masalah saat sudut membulat terkadang tidak diterapkan saat seharusnya.
NestedSubspaces
tidak akan muncul lagi untuk satu frame di lokasi yang salah.
Versi 1.0.0-alpha03
26 Februari 2025
androidx.xr.compose:compose:1.0.0-alpha03
dan androidx.xr.compose:compose-testing:1.0.0-alpha03
dirilis tanpa perubahan penting sejak versi alfa terakhir. Versi 1.0.0-alpha03 berisi commit ini
Versi 1.0.0-alpha02
12 Februari 2025
androidx.xr.compose:compose:1.0.0-alpha02
dan androidx.xr.compose:compose-testing:1.0.0-alpha02
dirilis. Versi 1.0.0-alpha02 berisi commit ini.
Fitur Baru
- Panel Aktivitas kini dapat menyamarkan kontennya saat Dialog Spasial diaktifkan.
Orbiter
API kini dapat digunakan dalam konteksSubspaceComposable
dan akan melampirkan Orbiter ke induk composable berbasisSubspaceLayout
terdekat.- Memperkenalkan
LayoutCoordinatesAwareModifierNode
untuk mengizinkan pengubah berbasis penentuan posisi kustom. - Menambahkan metode siklus proses attach/detach ke
SubspaceModifier.Node
. - Menambahkan
scaleWithDistance
ke pengubah yang dapat dipindahkan. JikascaleWithDistance
diaktifkan, elemen subspace yang dipindahkan akan membesar atau menyusut. Tindakan ini juga akan mempertahankan skala eksplisit yang dimiliki sebelum gerakan.
Perubahan API
- Menghapus
SessionCallbackProvider
dan menggantinya denganSpatialCapabilities
.
Perubahan lainnya
- Mengurangi
minSDK
menjadi 24. Semua Jetpack XR API terus memerlukan API 34 saat runtime. - Konstruktor
Orbiter
EdgeOffset.inner
,EdgeOffset.outer
, danEdgeOffset.overlap
bukan lagi metode@Composable
, yang memungkinkannya digunakan dalam konteks non-composable. - Memperbarui Tingkat Elevasi Spasial agar sesuai dengan spesifikasi UX terbaru.
- Terapkan antarmuka
SubspaceSemanticsInfo
keMeasurableLayout
. - Mengganti nama
SubspaceModifierElement
menjadiSubspaceModifierNodeElement
.
Perbaikan bug
- Perbaikan untuk menstabilkan pengurutan
SubspaceModifier
.SubspaceModifier
akan berperilaku lebih andal. Pengubah offset, putar, skala, dapat dipindahkan, dan dapat diubah ukurannya kini dapat digunakan dalam urutan apa pun.
Versi 1.0.0-alpha01
12 Desember 2024
androidx.xr.compose:compose-*1.0.0-alpha01
dirilis.
Fitur Rilis Awal
Rilis developer awal Jetpack Compose untuk XR. Gunakan konsep Compose yang sudah dikenal seperti baris dan kolom untuk membuat tata letak UI spasial di XR, baik Anda mem-porting aplikasi 2D yang ada ke XR atau membuat aplikasi XR baru dari awal. Library ini menyediakan composable subruang dan spasial: seperti panel spasial dan orbiter, yang memungkinkan Anda menempatkan UI berbasis Compose 2D atau View yang ada dalam tata letak spasial. Versi ini memperkenalkan composable Volume subspace, yang memungkinkan Anda menempatkan entity SceneCore, seperti model 3D, relatif terhadap UI. Pelajari lebih lanjut di panduan developer ini:
Subspace
: Composable ini dapat ditempatkan di mana saja dalam hierarki UI aplikasi, sehingga Anda dapat mempertahankan tata letak untuk UI 2D dan spasial tanpa kehilangan konteks antar-file. Hal ini memudahkan Anda untuk berbagi hal-hal seperti arsitektur aplikasi yang ada antara XR dan faktor bentuk lainnya tanpa perlu mengangkat status melalui seluruh hierarki UI atau mendesain ulang aplikasi.SpatialPanel: Panel spasial adalah composable subspace yang memungkinkan Anda menampilkan konten aplikasi–misalnya, Anda dapat menampilkan pemutaran video, gambar diam, atau konten lainnya di panel spasial.
Orbiter: Orbiter adalah komponen UI spasial. Panel ini dirancang untuk dilampirkan ke panel spasial yang sesuai, dan berisi navigasi serta item tindakan kontekstual yang terkait dengan panel spasial tersebut. Misalnya, jika telah membuat panel spasial untuk menampilkan konten video, Anda dapat menambahkan kontrol pemutaran video di dalam orbiter.
Volume: Menempatkan entity SceneCore, seperti model 3D, relatif terhadap UI Anda.
Tata Letak Spasial: Anda dapat membuat beberapa panel spasial dan menempatkannya dalam Tata Letak Spasial menggunakan
SpatialRow
,SpatialColumn
,SpatialBox
, danSpatialLayoutSpacer
. GunakanSubspaceModifier
untuk menyesuaikan tata letak Anda.Komponen UI spasial: Elemen ini dapat digunakan kembali di UI 2D Anda, dan atribut spasialnya hanya akan terlihat saat kemampuan spasial diaktifkan.
SpatialDialog
: Panel akan sedikit mendorong kedalaman z untuk menampilkan dialog yang ditinggikan.SpatialPopUp
: Panel akan sedikit didorong kembali dalam kedalaman z untuk menampilkan pop-up yang ditinggikanSpatialElevation
:SpatialElevationLevel
dapat disetel untuk menambahkan elevasi.
SpatialCapabilities: Kemampuan spasial dapat berubah saat pengguna berinteraksi dengan aplikasi atau sistem Anda, atau bahkan dapat diubah oleh aplikasi Anda sendiri—misalnya, berpindah ke Ruang Rumah atau Ruang Penuh. Untuk menghindari masalah, aplikasi Anda perlu memeriksa
LocalSpatialCapabilities.current
untuk menentukan API mana yang didukung di lingkungan saat ini.isSpatialUiEnabled
: Elemen UI spasial (misalnya, SpatialPanel)isContent3dEnabled
: Objek 3DisAppEnvironmentEnabled
: LingkunganisPassthroughControlEnabled
: Apakah aplikasi dapat mengontrol status passthrough atau tidakisSpatialAudioEnabled
: Audio spasial
Masalah Umum
- Saat ini, minSDK 30 diperlukan untuk menggunakan Jetpack Compose untuk XR. Sebagai solusi, Anda dapat menambahkan entri manifes
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>
berikut agar dapat mem-build dan menjalankan dengan minSDK 23. - Aplikasi Jetpack XR saat ini memerlukan permintaan izin
android.permission.SCENE_UNDERSTANDING
di AndroidManifest. - Saat aplikasi diluncurkan langsung ke Ruang Penuh menggunakan properti
PROPERTY_XR_ACTIVITY_START_MODE
dalam manifesnya, Aktivitas/Aplikasi awalnya dibuka di Ruang Rumah sebelum bertransisi ke Ruang Penuh. - glTF di Volume Composables pada awalnya mungkin berkedip di lokasi yang salah.
- Menggunakan SpatialDialog di panel yang telah dipindahkan secara signifikan akan mendorong konten ke arah yang salah.