Jetpack Compose untuk XR

Buat tata letak UI spasial secara deklaratif yang memanfaatkan kemampuan spasial Android XR.
Update Terbaru Rilis Stabil Kandidat Rilis Rilis Beta Rilis Alfa
12 Februari 2025 - - - 1.0.0-alpha02

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

    // Use to write unit tests
    testImplementation "androidx.xr.compose:compose-testing:1.0.0-alpha01"
}

Kotlin

dependencies {
    implementation("androidx.xr.compose:compose:1.0.0-alpha01")

    // Use to write unit tests
    testImplementation("androidx.xr.compose:compose-testing:1.0.0-alpha01")
}

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.

Laporkan masalah baru

Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.

Versi 1.0

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 konteks SubspaceComposable dan akan melampirkan Orbiter ke induk composable berbasis SubspaceLayout 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. Jika scaleWithDistance 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 dengan SpatialCapabilities.

Perubahan lainnya

  • Mengurangi minSDK menjadi 24. Semua Jetpack XR API terus memerlukan API 34 saat runtime.
  • Konstruktor Orbiter EdgeOffset.inner, EdgeOffset.outer, dan EdgeOffset.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 ke MeasurableLayout.
  • Mengganti nama SubspaceModifierElement menjadi SubspaceModifierNodeElement.

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 subruang dan composable 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, dan SpatialLayoutSpacer. Gunakan SubspaceModifier 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 ditinggikan
    • SpatialElevation: SpatialElevationLevel dapat ditetapkan 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 3D isAppEnvironmentEnabled: Lingkungan isPassthroughControlEnabled: Apakah aplikasi dapat mengontrol status passthrough atau tidak isSpatialAudioEnabled: 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 Layar Utama 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.