Jetpack SceneCore

Membangun dan memanipulasi grafik scene Android XR dengan konten 3D.
Update Terbaru Rilis Stabil Kandidat Rilis Rilis Beta Rilis Alfa
21 Oktober 2026 1.0.0 - - 1.1.0-alpha01

Mendeklarasikan dependensi

Untuk menambahkan dependensi pada XR SceneCore, 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.scenecore:scenecore:1.1.0-alpha01"

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

Kotlin

dependencies {
    implementation("androidx.xr.scenecore:scenecore:1.1.0-alpha01")

    // Use to write unit tests
    testImplementation("androidx.xr.scenecore:scenecore-testing:1.1.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.1

Versi 1.1.0-alpha01

21 Oktober 2026

androidx.xr.scenecore:scenecore-*:1.1.0-alpha01 dirilis. Versi 1.1.0-alpha01 berisi commit ini.

Perubahan API

  • Menambahkan API update mesh dinamis (MeshBuffer.createDynamic, MeshBuffer.updateVertexData, MeshBuffer.updateIndexData, dan konstruktor CustomMesh.BuilderFromMeshData dinamis) untuk mendukung update data verteks dan indeks saat runtime. (Ia1ecb)
  • Menambahkan metode bantuan VertexLayout.getBufferIndex untuk mengambil indeks buffering dengan mudah untuk VertexAttribute atau VertexBufferLayout tertentu. (I1a9e3)
  • Membuat CustomMesh.bounds menjadi var sehingga kotak pembatas dapat diperbarui secara dinamis saat runtime. (Ib0397)
  • Mempromosikan Animation API glTF (GltfAnimation, GltfModelEntity.getAnimations, dan GltfModelEntity.stopAllAnimations) ke publik/stabil sambil mempertahankan penyetel GltfAnimation.loop sebagai eksperimental, serta GltfAnimationStartOptions dan start(options) sebagai eksperimental dan tidak digunakan lagi. (Iacdae)
  • Menambahkan stopAllAnimations() ke GltfModelEntity, membuat GltfAnimation.start() tanpa parameter, menambahkan properti loop dan speed ke GltfAnimation, serta menghentikan penggunaan GltfAnimationStartOptions, start(options), dan seekTo(Duration). (I53105)
  • Mengupdate API GltfModelEntity untuk mendokumentasikan IllegalStateException (khususnya Entity.DisposedException) saat dipanggil pada entity yang dibuang. I65a76f

Perbaikan Bug

  • Dependensi androidx.lifecycle:lifecycle-runtime diupdate ke 2.10.0. Versi ini diperlukan agar pemeriksaan lint runtime siklus proses yang dipaketkan dapat berjalan dengan AGP versi 9.5.0-alpha04 atau yang lebih baru. (I99bfd, b/556807521)
  • Meningkatkan kdoc terkait AudioOutputProvider untuk menekankan bahwa kdoc tidak boleh digunakan kembali dengan beberapa instance ExoPlayer (I6b18e)
  • Menghapus dependensi yang tidak diperlukan pada impress dari berbagai modul XR. I84636c

Versi 1.0

Versi 1.0.0

21 Oktober 2026

androidx.xr.scenecore:scenecore-*:1.0.0 dirilis. Versi 1.0.0 berisi commit ini.

Fitur utama 1.0.0:

  • Jetpack XR SceneCore kini stabil. SceneCore memungkinkan Anda menempatkan dan mengatur konten 3D, yang ditentukan oleh entity, secara relatif satu sama lain dan lingkungan Anda. Dengan SceneCore, Anda dapat membuat, menempatkan, dan memanipulasi panel 2D dan model 3D dalam scene virtual dan mixed reality; menentukan lingkungan spasial dan sumber audio spasial; serta menambatkan konten virtual ke dunia nyata.
  • Untuk mengetahui informasi selengkapnya, lihat Halaman Ringkasan dan Referensi API kami.

Versi 1.0.0-rc02

7 Oktober 2026

androidx.xr.scenecore:scenecore-*:1.0.0-rc02 dirilis. Versi 1.0.0-rc02 berisi commit ini.

Perbaikan Bug

  • Memperbaiki potensi kebocoran memori dengan menghapus perceptionRuntimeCache di SessionExt dan memfaktorkan ulangnya untuk mengambil PerceptionRuntime langsung dari instance Session. (Ie35b1)
  • Memperbaiki potensi kebocoran konteks dengan menggunakan applicationContext untuk handle native OpenXR guna memastikan runtime native tidak menyimpan referensi ke konteks Activity. (Ie35b1)
  • Memperbaiki kondisi race di XrInstanceManager dengan memperkenalkan penguncian sinkronisasi dan inisialisasi yang tepat. (Ie35b1)
  • Memperbaiki ReferenceCleaner untuk mendukung pembatalan pendaftaran tindakan pembersihan dan memastikan tindakan pembersihan Entity dijalankan secara eksplisit selama dispose(), sehingga mencegah eksekusi duplikat saat pembersihan sampah memori. (Ie35b1)
  • Memperbaiki kebocoran memori di Scene dengan menghapus sceneCache di SessionExt dan melakukan refaktorisasi Scene untuk mengambil instance langsung dari sessionConnectors. (Ie35b1)

Versi 1.0.0-rc01

9 September 2026

androidx.xr.scenecore:scenecore-*:1.0.0-rc01 dirilis. Versi 1.0.0-rc01 berisi commit ini.

Perubahan API

  • Library xr:scenecore:scenecore-openxr ditambahkan. (Ic49f2)
  • Menghapus beberapa API yang tidak digunakan lagi sebelum rilis stabil 1.0.0.

Perbaikan Bug

  • Menyelesaikan bug kebocoran memori yang menyebabkan referensi Aktivitas dapat dipertahankan oleh sistem saat Aktivitas dihancurkan. (I6dcd7)

Perubahan Perilaku

  • Menghapus output logcat dari SceneCore. (I10c3c)

Versi 1.0.0-beta02

12 Agustus 2026

androidx.xr.scenecore:scenecore-*:1.0.0-beta02 dirilis. Versi 1.0.0-beta02 berisi commit ini.

Perbaikan bug

  • toMoveEvent() akan menampilkan null jika parent entity telah dibersihkan oleh pembersih sampah memori. (Ia7a1b)

Versi 1.0.0-beta01

15 Juli 2026

androidx.xr.scenecore:scenecore-*:1.0.0-beta01 dirilis. Versi 1.0.0-beta01 berisi commit ini.

Perubahan API

  • API GltfAnimation dan SpatialGltfModelAnimation telah ditandai sebagai eksperimental. Beberapa properti diubah menjadi pengambil. (I8d689, b/524771027)
  • Menghapus metode factory MovableComponent.createTrackingMovable publik. (I00912, b/477169015)
  • Mengonversi Session.create menjadi fungsi penangguhan. (I5d27f)
  • ActivitySpace dan AnchorSpace kini memperluas class SpaceEntity umum yang berisi perilaku umum untuk entity yang posisinya dikontrol oleh sistem (I506ec, b/513619219)
  • Memperbarui AnchorEntity menjadi AnchorSpace (Ifa95e, b/513619219)
  • Menyediakan API pengujian publik SoundEffectPoolComponentTester. (I87df7, b/498104417)
  • Menambahkan parameter cornerRadius opsional ke konstruktor SurfaceEntity.Shape.Quad dan menjadikan properti cornerRadius publik. Developer kini dapat menentukan radius sudut saat membuat bentuk Quad untuk merender kanvas SurfaceEntity dengan sudut membulat, dan mengkueri radius Quad yang ada. (Ia7809, b/474681085)
  • Menyediakan overload SpatialAudioTrackBuilderTester, SpatialAudioTrackTester, dan SceneCoreTestRule.getTester API pengujian publik. (I378c6, b/496333938)
  • Menambahkan penggantian khusus toString() untuk sejumlah jenis ARCore. Jenis ini dimaksudkan untuk memberikan informasi tambahan kepada developer untuk tujuan proses debug dan tidak dimaksudkan untuk digunakan dalam produksi atau aplikasi yang dikirimkan.

Versi 1.0.0-alpha16

17 Juni 2026

androidx.xr.scenecore:scenecore-*:1.0.0-alpha16 dirilis. Versi 1.0.0-alpha16 berisi commit ini.

Perubahan API

  • Menambahkan overload untuk addVertexData, setIndexData, dan addSubset ke CustomMesh.BuilderFromMeshData dan CustomMesh.BuilderFromMeshBuffer. Overload ini memungkinkan developer meneruskan data mentah dan parameter secara langsung (misalnya, ByteBuffer, offset, size, topology, indexOffset, indexCount) tanpa perlu menggabungkannya dalam objek perantara seperti ByteBufferRegion atau MeshSubset. (I84d5c)
  • Scene.requestFullSpaceMode() dan Scene.requestHomeSpaceMode() masing-masing telah diganti namanya menjadi requestFullSpace() dan requestHomeSpace(). Metode dan dokumentasi lain yang merujuk pada "Mode Ruang Rumah" dan "Mode Ruang Penuh" juga telah diperbarui. (I45751)
  • Menyediakan API pengujian publik PanelEntityTester dan MainPanelEntityTester (I961e4)
  • Menambahkan properti pointSourceParams ke SoundEffectPoolComponent (I4a750)
  • Menyediakan API pengujian publik MovableComponentTester (I0c972)
  • Menyediakan API pengujian publik PointerCaptureComponentTester (Ic0d4f)
  • Menyediakan API pengujian publik ActivityPanelEntityTester (I837c4)
  • Menyediakan API pengujian publik ResizableComponentTester (I0a3a4)
  • Menyediakan API pengujian publik BoundsComponentTester. (Iefd53)
  • Menyediakan API pengujian publik SpatialMediaPlayerTester (Ia3e09)
  • Menyediakan API pengujian publik SpatialEnvironmentTester (Icf60f)
  • Menyediakan API pengujian publik GltfModelTester dan SceneCoreTestRule.getGltfModelTester. (I33fcb)
  • Menyediakan API pengujian publik InteractableComponentTester. (Ia7096)
  • Menyediakan API pengujian publik SurfaceEntityTester. (Ic0740)
  • Menyediakan API pengujian publik GltfModelEntityTester, TestGltfModelNode, dan TestGltfAnimation. (I72c4d)
  • Menyediakan API pengujian publik SceneTester dan SceneCoreTestRule.sceneTester. (Ib4ec5)
  • Menyediakan API pengujian publik PerceptionSpaceTester dan SceneCoreTestRule.perceptionSpaceTester. (Icf739)
  • Menyediakan API pengujian publik MeshEntityTester. (I63801)
  • Menyediakan overload ImageBasedLightingAssetTester dan SceneCoreTestRule.getTester API pengujian publik. (I57ec4)
  • Menyediakan API pengujian publik TextureTester (Ia865b)
  • Menyediakan API pengujian publik PositionalAudioComponentTester (Icd96e)
  • Menyediakan API pengujian publik SpatialSoundPoolTester (Ia3531)
  • Menyediakan API pengujian publik SoundEffectPoolTester (If349a)
  • Menyediakan API pengujian publik ActivitySpaceTester dan SceneCoreTestRule.activitySpaceTester. (I2d5c2)
  • Menyediakan API pengujian publik SpatialWindowTester (I41837)
  • Menyediakan API pengujian publik AnchorEntityTester (I68404)
  • Menyediakan antarmuka API pengujian publik SceneCoreTestRule. (Ic72d3)
  • Menambahkan class PixelDensity dan mengeksposnya melalui Scene#virtualPixelDensity untuk memberikan rasio piksel per meter berbasis hardware untuk pemetaan dimensi fisik yang akurat di ActivitySpace. (I0e3ac)
  • Menambahkan API publik untuk membuat dan merender Mesh Kustom. (I7ad2f)
  • VertexLayout API telah diupdate untuk menggunakan daftar VertexBufferLayout, dengan setiap VertexBufferLayout menjelaskan atribut dalam satu buffer vertex. Hal ini memungkinkan pengaturan data vertex yang lebih fleksibel, termasuk atribut yang disisipkan dengan langkah dan offset kustom. (Ic426b)
  • Menyediakan MovableComponent.createTrackingMovable untuk mengubah Trackable ARCore menjadi pose yang relatif terhadap Ruang Aktivitas. (I12249)
  • Nilai default untuk induk di Entity.create telah diperbarui menjadi null. (Ic3145)
  • Entity telah diupdate menjadi class, bukan antarmuka, dan kini menjadi class dasar untuk semua jenis Entity. Sebagai bagian dari perubahan ini, BaseEntity telah dihapus. (I7fbc9)
  • GltfModel, ExrImage, dan ImageBasedLightingAsset kini mengimplementasikan AutoCloseable untuk memungkinkan pengelolaan resource idiomatis menggunakan blok use Kotlin. (I1ac79)
  • Memperkenalkan class ImageBasedLightingAsset untuk menggantikan ExrImage dalam menentukan pencahayaan lingkungan spasial. ExrImage tidak digunakan lagi dan dihapus dari API publik. SpatialEnvironmentPreference telah diperbarui untuk menggunakan ImageBasedLightingAsset. (I6c92a)
  • Mengganti nama parameter skybox di SpatialEnvironment menjadi imageBasedLightingAsset agar lebih mencerminkan tujuannya, dan mengklarifikasi bahwa tekstur skybox visual harus disertakan dalam parameter geometri. (I24d4a)
  • Entity spasial kini menggunakan kepadatan perangkat yang stabil untuk penghitungan piksel ke meter di Spatial API level 1 dan 2, sehingga memastikan ukuran yang konsisten terlepas dari perubahan kepadatan tampilan sistem. (I37051)

Versi 1.0.0-alpha15

19 Mei 2026

androidx.xr.scenecore:scenecore-*:1.0.0-alpha15 dirilis. Versi 1.0.0-alpha15 berisi commit ini.

Perubahan API

  • Entity.dispose() kini dihapus sebagai API publik. Alih-alih memanggil dispose() pada instance Entity, aplikasi dapat membuat instance dapat dibersihkan dengan menetapkan parent ke null dan dengan menghapus referensi kuat ke instance tersebut. (I396c9)
  • Metode set/clearOnLoadCompleteListener SoundEffectPool telah dihapus. Gunakan add/removeLoadCompleteListener sebagai gantinya. (Iae78d)
  • set/clearSpatialVisibilityChangedListener Scene diganti dengan add/removeSpatialVisibilityChangedListener. (I67dff)
  • Semua metode add/removeOnFooListener SceneCore telah diganti namanya menjadi add/removeFooListener, dengan menghapus On dari nama. (Ibe50b)
  • Metode AnchorEntity.setOnOriginChangedListener dan AnchorEntity.setOnStateChangedListener telah diganti dengan metode add/removeFooListener, untuk mendukung beberapa Pemroses secara bersamaan. (I13749)
  • Mengganti nama AnchorEntity.State.TIMEDOUT menjadi State.TIMED_OUT. (Id2b8d)
  • Component API telah direfaktorisasi untuk meningkatkan keamanan dan ekstensibilitas. Component kini menjadi class abstrak. Metode onAttach() dan onDetach() kini menjadi protected untuk mencegah panggilan langsung. Gunakan Entity.addComponent() dan Entity.removeComponent() untuk mengelola siklus proses komponen. (Id04e8)
  • Konstanta PlaneSemanticType PlaneOrientation SceneCore telah dimigrasikan dari Int ke jenis kustom. Konstanta ANY-nya akan dihapus, klien harus secara eksplisit menghitung semua konstanta yang diinginkan, atau menggunakan konstanta Set yang tidak dapat diubah .ALL yang baru. Metode factory AnchorEntity kini menerima Set jenis ini, bukan nilai tunggal. (Ib1033)
  • Menambahkan dukungan untuk animasi skeletal (skinning) ke Custom Mesh API eksperimental. Developer kini dapat menganimasikan mesh kustom dengan menentukan boneCount saat membuat MeshEntity dan memperbarui animasi secara real-time menggunakan MeshEntity.setBoneTransforms(). (Id8ba2, b/496692490)
  • Memperkenalkan CustomMesh API eksperimental. Developer kini dapat membuat dan merender geometri 3D secara terprogram dalam scene mereka menggunakan CustomMesh, MeshBuffer, dan MeshEntity. (I94617)
  • androidx.xr.scenecore.SpatializerConstants.SourceType.SOURCE_TYPE_SOUND_FIELD dihapus. Sebagai gantinya, gunakan SourceType.SOUND_FIELD. (Ia68b9)
  • Menambahkan komponen audio spasial: PositionalAudioComponent, SoundEffectPoolComponent, dan SoundFieldAudioComponent (Ieda89)
  • AnchorEntity.getAnchor diganti dengan AnchorEntity.anchor dan kini akan menampilkan Anchor saat AnchorEntity dibuat dari Anchor ARCore (I5c7c8)
  • Nilai default untuk parameter parent dalam metode factory ActivityPanelEntity, GltfModelEntity, GroupEntity, PanelEntity, dan SurfaceEntity telah diubah dari ActivitySpace menjadi null. Untuk melampirkan entity ke grafik tampilan dan merendernya agar terlihat, developer kini harus secara eksplisit menetapkan induknya selama pembuatan instance atau melalui Entity.parent = ... (Ie7cc1)

Perbaikan Bug

  • SceneCore kini otomatis mengklaim kembali instance Entity saat instance tersebut menjadi dapat dijangkau secara semu, sehingga developer tidak perlu memanggil dispose() secara eksplisit untuk mengosongkan resource. Untuk memastikan instance [Entity] diklaim kembali dengan benar, developer harus:
    • Lepaskan dari grafik tampilan dengan menetapkan parent-nya ke null.
    • Melepaskan semua referensi kuat ke instance dalam kode mereka.
    • Catatan tentang Jenis Entity Khusus: Untuk entity yang tidak dapat dijadikan induk (seperti AnchorEntity), developer harus mempertahankan referensi yang kuat saat instance sedang digunakan. Jika semua referensi dirilis, instance ini akan menjadi phantom reachable dan akan otomatis diklaim kembali. (I83fe4)
  • Mempersempit aturan keep Proguard untuk semua library SceneCore. (I98447)

Masalah Umum

  • Memasang PositionalAudioComponent ke Entity dengan instance ExoPlayer yang tidak aktif akan menyebabkan error. Jangan panggil setPointSourceParams atau pasang/lepas komponen audio spasial saat ExoPlayer dihentikan. Masalah ini akan diperbaiki dalam rilis berikutnya.

Versi 1.0.0-alpha14

6 Mei 2026

androidx.xr.scenecore:scenecore-*:1.0.0-alpha14 dirilis. Versi 1.0.0-alpha14 berisi commit ini.

Perubahan API

  • TrackingState dan VpsAvailabilityResult telah dipindahkan ke androidx.xr.arcore package, dan jenis di androidx.xr.runtime kini tidak digunakan lagi. (Ic7930, b/480462213)
  • Mengganti nama Plane.Type menjadi PlaneType. (I8c90c, b/482675376)
  • Mengganti nama Plane.Label menjadi PlaneLabel. (Ic6b67, b/482675376)
  • androidx.xr.runtime.FieldOfView tidak digunakan lagi. Sebagai gantinya, gunakan androidx.xr.runtime.math.FieldOfView. (Ia01a0, b/480233045)
  • Matrix4.pose diganti namanya menjadi Matrix4.toPose(). Properti pose kini tidak digunakan lagi. (I329b4, b/493383490)
  • Mengganti nama nilai enum HandJointType. (Ifbc83, b/482670596)
  • Mengekspos Component.onAttach dan onDetach sebagai API publik untuk memungkinkan implementasi Component kustom. (I0ca1f)
  • Menambahkan komponen audio spasial (I39ddd, b/489421980, b/436642086, b/436642499)
  • Hapus Entity dari PointSourceParams. Sebagai gantinya, Entity akan digunakan langsung dengan SpatialAudioTrack, SpatialSoundPool, dan SpatialMediaPlayer (Ib3685, b/489421980, b/436634048)
  • Mengganti nama DeviceTrackingMode.LAST_KNOWN menjadi SPATIAL_LAST_KNOWN (dengan fallback yang tidak digunakan lagi), menambahkan INERTIAL_LAST_KNOWN untuk pelacakan 3DoF, dan menambahkan TRACKING_DEGRADED ke TrackingState. (Ie661c, b/445466590)
  • GroupEntity tidak digunakan lagi. Untuk memiliki Entity yang hanya memiliki fungsi Entity dasar, panggil Entity.create yang akan menampilkan antarmuka Entity. (I4c450, b/473867483)
  • Menambahkan XrLog API. Tetapkan XrLog.isEnabled ke true untuk mengaktifkan logging di JetpackXR, dan gunakan XrLog.Level untuk menetapkan level log. (I76a1f, b/463460895, b/487378441)

Perbaikan Bug

  • Scene.keyEntity kini ditetapkan secara default ke mainPanelEntity. (I6a3ef)

Versi 1.0.0-alpha13

25 Maret 2025

androidx.xr.scenecore:scenecore-*:1.0.0-alpha13 dirilis. Versi 1.0.0-alpha13 berisi commit ini.

Perubahan API

  • Menghapus flag unscaledGravityAlignedActivitySpace dari Session.create. ActivitySpace kini selalu tidak diskalakan dan sejajar dengan gravitasi. (If6f11, b/458173423)
  • Menghapus fungsi setMaterialOverride dan clearMaterialOverride yang tidak digunakan lagi dari GltfModelEntity yang kini dipanggil pada setiap GltfModelNode. (I2e5d2)
  • Menambahkan transformPixelCoordinatesToLocalPosition dan transformNormalizedCoordinatesToLocalPosition ke PanelEntity dan menghapus metode eksperimental setara yang sebelumnya menampilkan pose, bukan posisi Vector3. (Ib6960, b/460123106, b/458333591)
  • Menambahkan GltfAnimation API untuk mengontrol animasi glTF di SceneCore. (I2c172, b/466065486, b/465819070, b/465818617)
  • Mengganti nama ScenePose.activitySpacePose menjadi ScenePose.poseInActivitySpace (I8f175, b/427822261)
  • Menambahkan Implementasi Runtime yang Diproyeksikan Scenecore (I9c4ab, b/476440158)
  • Saat mengubah ukuran entity panel utama, entity tersebut dapat mengubah posisinya sendiri ke origin ActivitySpace. Tidak ada solusi lain selain memosisikan ulang panel secara manual atau terprogram kembali ke lokasi aslinya. Bug ini akan diperbaiki dalam rilis mendatang. (b/489427007).
  • Dalam beberapa kasus, affordance untuk MovableComponent mungkin tidak muncul untuk SurfaceEntity dan jenis entitas non-Panel lainnya. Menetapkan MovableComponent.size secara eksplisit akan menyebabkan affordance muncul. Bug ini akan diperbaiki dalam rilis mendatang (b/490983469).

Versi 1.0.0-alpha12

25 Februari 2026

androidx.xr.scenecore:scenecore-*:1.0.0-alpha12 dirilis. Versi 1.0.0-alpha12 berisi commit ini.

Masalah Umum

  • Entitas yang ditambatkan dapat berpindah dari posisi tertambatnya ke titik asal ruang aktivitas setelah beberapa detik.
  • Aplikasi mungkin error saat membuat instance SurfaceEntity. Masalah ini telah diselesaikan di androidx.xr.scenecore:scenecore-*:1.0.0-alpha13 dan rilis berikutnya. Aplikasi yang terpengaruh harus diupdate ke versi terbaru.

Perubahan API

  • ActivitySpace.addOnSpaceUpdatedListener dan ActivitySpace.removeOnSpaceUpdatedListener telah diganti namanya menjadi addOnOriginChangedListener dan removeOnOriginChangedListener. AnchorEntity.setOnSpaceUpdatedListener diganti namanya menjadi setOnOriginChangedListener. (I5d8fb)
  • Menambahkan properti nama publik ke FakeEntity dan membuat tampilan menjadi publik di FakePanelEntity. (Ifa1f9)

Perbaikan Bug

  • Memperbaiki penghitungan kepadatan piksel pada image sistem yang lebih baru (I57d04)

Versi 1.0.0-alpha11

28 Januari 2026

androidx.xr.scenecore:scenecore-*:1.0.0-alpha11 dirilis. Versi 1.0.0-alpha11 berisi commit ini.

Perubahan API

  • Mengganti nama PerceivedResolutionResult.InvalidCameraView menjadi PerceivedResolutionResult.InvalidRenderViewpoint karena API getPerceivedResolution kini mengandalkan API RenderViewpoint ARCore, bukan CameraViewScenePose. Nama ini lebih mencerminkan penerapan baru. (I8c967, b/446989745, b/419311998)
  • Metode PanelEntity/SurfaceEntity.getPerceivedResolution kini menggunakan RenderViewpoint yang disediakan oleh developer sebagai argumen. Sebelumnya, runtime memilih RenderViewpoint yang digunakan dalam penghitungan resolusi yang terlihat secara arbitrer. (I8c967, b/446989745, b/419311998)
  • Menghapus SpatialUser, ScenePose.Head, dan ScenePose.CameraView. Fungsi API ini tercakup dalam API ArDevice dan RenderViewpoint dalam ARCore untuk Jetpack XR. Untuk mendapatkan ScenePose yang sesuai dengan kepala atau mata kiri atau kanan pengguna, developer dapat menggunakan PerceptionSpace.getScenePoseFromPerceptionPose dengan pose yang sesuai yang diperoleh menggunakan ARCore API. (I2f69c, b/446989745)

Versi 1.0.0-alpha10

03 Desember 2025

androidx.xr.scenecore:scenecore-*:1.0.0-alpha10 dirilis. Versi 1.0.0-alpha10 berisi commit ini.

Perubahan API

  • Menambahkan transformPixelCoordinatesToPose dan transformNormalizedCoordinatesToPose ke PanelEntity (I462b3)
  • Menambahkan class helper, Utils, ke Runtime SceneCore berdasarkan logika di SceneCore (I570b9)

Perbaikan Bug

  • Memperbaiki potensi error yang dapat terjadi saat Sesi dihancurkan dan SpatialModeChangeEvent diterima (If44e8)
  • Memperbaiki bug yang dapat menyebabkan IllegalStateException ditampilkan saat keluar atau masuk kembali ke Aktivitas. (Ibff1c)

Versi 1.0.0-alpha09

19 November 2025

androidx.xr.scenecore:scenecore-*:1.0.0-alpha09 dirilis. Versi 1.0.0-alpha09 berisi commit ini.

Fitur Baru

  • Menambahkan API untuk mengambil ScenePose yang mewakili komposisi pose asal ruang persepsi dan pose sehubungan dengan asal ruang persepsi. (I5b50a)
  • Menambahkan fungsi getGravityAlignedPose. Pose yang diselaraskan dengan gravitasi mengabaikan Pitch dan Roll rotasi. (I5ae21)
  • Jenis konstanta AnchorEntity.State telah diubah dari Int menjadi subjenis State. (Ib0c49)
  • Menambahkan getChildren() ke antarmuka Entity. Siklus proses MainPanelEntity diperbarui. (Ia69d6)

Perubahan API

  • Jenis konstanta PointerCaptureComponent.PointerCaptureState telah diubah dari Int menjadi subjenis PointerCaptureState. (Ic888a)
  • Scene.spatialCapabilities kini berjenis Set<SpatialCapability>, bukan kolom Int. Konstanta SpatialCapability telah diganti namanya. (I9c109)
  • Jenis konstanta SurfaceEntity telah diganti namanya dan diubah dari Int menjadi subjenis SurfaceEntity. (I419ed)
  • Jenis konstanta SpatializerConstant telah diganti namanya dan diubah dari Int menjadi subjenis SpatializerConstant. (Ia0e18)
  • Jenis konstanta TextureSampler telah diganti namanya dan diubah dari Int menjadi subjenis TextureSampler. (I44078)
  • Jenis konstanta SpatialVisibility telah diubah dari Int menjadi subjenis SpatialVisibility. (I70739)
  • Jenis konstanta ResizeEvent.ResizeState telah diganti namanya dan diubah dari Int menjadi subjenis ResizeState. (I384d5)
  • Jenis konstanta InputEvent telah diganti namanya dan diubah dari Int untuk diwarisi dari jenis penutupnya masing-masing. (I82817)
  • Jenis konstanta GltfModelEntity.AnimationState telah diubah dari Int menjadi subjenis AnimationState. (I24f4e)
  • Jenis konstanta AlphaMode telah diganti namanya dan diubah dari Int menjadi subjenis AlphaMode. (I27b56)
  • Jenis konstanta Space telah diubah dari Int menjadi subjenis Space. (I9255b)
  • ScenePose.hitTest dan metode terkait kini menampilkan null jika tidak ada persimpangan yang ditemukan, bukan HitTestResult dengan hitPosition null. HitTestResult.hitPosition tidak lagi nullable. (I1400a)
  • Mengubah referensi ActivityPose menjadi ScenePose. (I7fe43)

Versi 1.0.0-alpha08

22 Oktober 2025

androidx.xr.scenecore:scenecore-*:1.0.0-alpha08 dirilis. Versi 1.0.0-alpha08 berisi commit ini.

Perubahan API

  • Mengganti nama ActivityPanelEntity.moveActivity menjadi transferActivity (I273c5, b/430332856)

Perbaikan Bug

  • :xr:scenecore:scenecore-spatial-rendering dan :xr:scenecore:scenecore-spatial-core ditambahkan sebagai dependensi implementasi :xr:scenecore:scenecore (I6ab65, b/447000520)
  • Pengecualian ditampilkan jika session.scene diakses setelah penghancuran sesi. (I77e6f)

Versi 1.0.0-alpha07

24 September 2025

androidx.xr.scenecore:scenecore:1.0.0-alpha07, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha07, dan androidx.xr.scenecore:scenecore-testing:1.0.0-alpha07 dirilis. Versi 1.0.0-alpha07 berisi commit ini.

Perubahan API

  • Mengganti nama fixedAspectRatio menjadi isFixedAspectRatioEnabled dan menjadikannya properti boolean (I5c4e8, b/440588971)
  • Scenecore Fake kini berada dalam modul xr:scenecore:scenecore-testing. (Idd951)
  • Mengganti nama shouldAutoHideContent menjadi isAutoHideContentWhileResizingEnabled dan shouldAlwaysShowOverlay menjadi isAlwaysShowOverlayEnabled (I97c36, b/432335421)
  • Memperbarui konstanta SceneCore TextureSampler agar lebih mudah dibaca, misalnya TextureSampler.MinFilter.LINEAR kini menjadi TextureSampler.MIN_FILTER_LINEAR (Ib159c)
  • Setter setKeyEntity Scene telah digabungkan ke dalam variabel keyEntity. Menetapkan keyEntity ke Entity yang tidak dapat dipindahkan seperti AnchorEntity akan menampilkan IllegalArgumentException, bukan menampilkan boolean false. (I62080, b/428721695, b/422215745)
  • Variabel SpatialModeChangeListener Scene diganti dengan setSpatialModeChangedListener. Fungsi ini menggunakan Consumer<SpatialModeChangeEvent>, bukan SpatialModeChangedListener. setSpatialModeChangedListener kini dapat secara opsional menggunakan Executor. (I62080, b/428721695, b/422215745)
  • Menghapus parameter bundle dari ActivityPanelEntity.startActivity (I64344, b/430332856, b/430333040)
  • Mengganti nama SpatializerConstants.SOURCE_TYPE_BYPASS menjadi SpatializerConstants.SOURCE_TYPE_DEFAULT. (Ifc7fe, b/422215565)
  • Menambahkan konstanta SpatialSoundPool.PLAY_FAILED. (Ifc7fe, b/422215565)
  • Menambahkan argumen default ke metode SpatialSoundPool.play. (Ifc7fe, b/422215565)
  • Menghapus nilai yang ditampilkan dari penyetel di SpatialAudioTrackBuilder. (Ifc7fe, b/422215565)
  • Perubahan SurfaceEntity
    • SurfaceEntity.CanvasShape mengganti nama Shape
    • SurfaceEntity.CanvasShape.Vr180Hemisphere mengganti nama Hemisphere
    • SurfaceEntity.CanvasShape.Vr360Sphere mengganti nama Sphere
    • SurfaceEntity.EdgeFeatheringParams.SmoothFeather mengganti nama RectangleFeather
    • SurfaceEntity.EdgeFeathingParams.SolidEdge mengganti nama NoFeathering
    • SurfaceEntity.ContentSecurityLevel mengganti nama SurfaceProtection
    • SurfaceEntity.ContentSecurityLevel.{values} menambahkan awalan SURFACE_PROTECTION_.
    • SurfaceEntity.SuperSampling.{$values} menambahkan awalan SUPER_SAMPLING_
    • SurfaceEntity.StereoMode.{values} menambahkan awalan STEREO_MODE_
    • SurfaceEntity.ContentColorMetadata.maxCLL diganti namanya menjadi maxContentLightLevel (I7eb5f, b/422216050, b/427529950)
  • Mengganti nama launchActivity menjadi startActivity (I7db90, b/430332856)
  • Scene.activitySpaceRoot dihapus. Sebagai gantinya, gunakan Scene.activitySpace. (I05ee8, b/378706624, b/422215745)
  • configureBundleForFullSpaceModeLaunch dan configureBundleForFullSpaceModeLaunchWithEnvironmentInherited diganti namanya masing-masing menjadi createBundleForFullSpaceModeLaunch dan createBundleForFullSpaceModeLaunchWithEnvironmentInherited, serta dipindahkan ke file LaunchUtils.kt sebagai metode tingkat teratas dan menggunakan Session sebagai parameter pertama (I64a2c, b/437186050)
  • Factory GroupEntity kini menampilkan jenis GroupEntity, bukan Entity. (I66042)

Perbaikan Bug

Versi 1.0.0-alpha06

13 Agustus 2025

androidx.xr.scenecore:scenecore:1.0.0-alpha06, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha06, dan androidx.xr.scenecore:scenecore-testing:1.0.0-alpha06 dirilis. Versi 1.0.0-alpha06 berisi commit ini.

Perubahan API

  • Membatalkan pembatasan API BaseEntity dan BaseScenePose milik SceneCore (88c0ff6)

Versi 1.0.0-alpha05

30 Juli 2025

androidx.xr.scenecore:scenecore-guava:1.0.0-alpha05, androidx.xr.scenecore:scenecore-testing:1.0.0-alpha05, dan androidx.xr.scenecore:scenecore:1.0.0-alpha05 dirilis. Versi 1.0.0-alpha05 berisi commit ini.

Fitur Baru

  • API Resolusi yang Dipersepsikan ditambahkan ke Entity Panel dan SurfaceEntities. (I118f6)
  • Metode callback PerceivedResolution ditambahkan ke Scene.kt untuk memantau resolusi yang terlihat dari panel utama aktivitas di HSM. (I58084)
  • SurfaceEntity - Dukungan ditambahkan untuk Aplikasi guna meminta super sampling pada waktu pembuatan. Hal ini memungkinkan aplikasi menggunakan filter super sampling untuk anti-aliasing. (I06913)
  • Menambahkan properti recommendedContentBoxInFullSpace ke ActivitySpace. Fungsi ini menampilkan kotak yang direkomendasikan untuk menempatkan konten saat dalam Mode Ruang Penuh. (I4cd6f)
  • Menyediakan konstruktor kelebihan muatan untuk pengubah yang dapat dipindahkan yang memungkinkan penautan. (Ic0c70)

Perubahan API

Perubahan API yang ekstensif dilakukan pada SceneCore untuk rilis ini. Beberapa class telah diganti namanya dan/atau dipindahkan ke modul yang berbeda, dan sebagian besar metode pengambil/penyetel telah diganti dengan properti Kotlin. Meskipun kami mengantisipasi perubahan API yang dapat menyebabkan gangguan pada masa mendatang hingga rilis Beta pertama kami, perubahan tersebut tidak akan terlalu mengganggu atau banyak.

  • Mengganti nama dan/atau memindahkan class & antarmuka berikut: androidx.xr.scenecore.PixelDimensions menjadi androidx.xr.runtime.math.IntSize2d; androidx.xr.scenecore.Dimensions menjadi androidx.xr.runtime.math.FloatSize3d; androidx.xr.scenecore.ActivityPose menjadi ScenePose, androidx.xr.scenecore.ContentlessEntity menjadi GroupEntity, androidx.xr.scenecore.PlaneType menjadi PlaneOrientation; androidx.xr.scenecore.PlaneSemantic menjadi PlaneSemanticType. (Ifd405)(I3b622) (If534d)
  • Sejumlah penyetel untuk properti Scene telah dibuat pribadi; properti tersebut tidak dimaksudkan untuk diubah oleh klien SceneCore: activitySpace, activitySpaceRoot, mainPanelEntity, perceptionSpace, spatialCapabilities, spatialEnvironment, dan spatialUser. (I2f506)
  • Di Entity: Mengubah hal berikut menjadi properti: get/setParent(), setContentDescription; Entity.is/setHidden() tidak digunakan lagi, gunakan Entity.is/setEnabled sebagai gantinya. (Ibc4c6)
  • Menghapus class androidx.xr.scenecore.BasePanelEntity, gunakan PanelEntity secara langsung. Mengganti pengambil dan penyetel untuk PanelEntity dengan properti. Mengubah properti PanelEntity.size dari Float3dSize menjadi Float2dSize. Menghapus metode androidx.xr.scenecore.PanelEntity.getPixelDimensions yang tidak digunakan lagi, gunakan getSizeInPixels sebagai gantinya. (Icc174)
  • androidx.xr.scenecore.OnSpaceUpdatedListener diganti dengan Runnable. (I19308)
  • SpatialUser.getCameraViews() diganti dengan properti. (Ib0cc5) Untuk ExrImage dan GltfModel:, mengubah metode create menjadi fungsi penangguhan; mengubah parameter pembuatan untuk menerima Uri atau Path, bukan String. (Id8883) (I0d247), (I25706)
  • Memindahkan SpatialEnvironment.requestFullSpaceMode dan SpatialEnvironment.requestHomeSpaceMode ke Scene, misalnya menggunakan session.scene.requestFullSpaceMode(), bukan session.scene.spatialEnvironment.requestFullSpaceMode(). addOnPassthroughOpacityChangedListener dan addOnSpatialEnvironmentChangedListener kini memiliki penggantian yang menerima Executor opsional. (I12fe0) (I6b21e)
  • Menghapus metode SpatialEnvironment yang tidak digunakan lagi berikut: togglePassthrough, setPassthrough, setPassthroughOpacity, getPassthroughMode, getPassthroughOpacity, setSkybox, dan setGeometry. Juga menghapus class SpatialEnvironment.PassthroughMode yang tidak digunakan lagi (I927bd) (I927bd) (I927bd)
  • Mengganti pengambil dan penyetel SpatialEnvironment berikut dengan properti Kotlin: getCurrentPassthroughOpacity(), get/setPassthroughOpacityPreference(), get/setSpatialEnvironmentPreference(), isSpatialEnvironmentPreferenceActive() (I33a7b) (Ie06e2) (Ie06e2)
  • Jenis SpatialEnvironmentPreference.preferredPassthroughOpacity diubah dari Float? menjadi Float. Kolom ini tidak lagi menerima nilai null. Sebagai gantinya, SpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCE digunakan untuk memberi sinyal bahwa tidak ada preferensi opasitas. (I40107)
  • Memperbarui parameter windowBoundsPx ke pixelDimensions dan jenisnya dari Rect ke IntSize2d dalam metode create. (I1926e)
  • Konstruktor SpatialEnvironment kini bersifat internal (I75a51)
  • Mengganti class SpatialPointerIconNone dan SpatialPointerIconCircle dengan objek pendamping SpatialPointerIcon.NONE dan SpatialPointerIcon.CIRCLE (I416d2)
  • SpatialPointerIcon di SpatialPointerComponent tidak lagi nullable. Gunakan SpatialPointerIcon.DEFAULT, bukan null, untuk menunjukkan bahwa ikon pointer default sistem harus digunakan. (I416d2)
  • Mengganti androidx.xr.scenecore.AnchorEntity.getState() dengan properti hanya baca. Mengganti nama parameter pada metode AnchorEntity.create() agar lebih jelas. Dalam metode AnchorEntity untuk menyetel dan menambahkan pemroses, pemroses telah dipindahkan ke argumen akhir untuk mengaktifkan lambda akhir. androidx.xr.scenecore.OnStateChangedListener untuk AnchorEntity diganti dengan Consumer<AnchorEntity.State>. (I472e0)
  • GltfModelEntity.getAnimationState() kini menjadi properti. (I10b29)
  • ActivitySpace.getBounds() diganti dengan properti. ActivitySpace.addBoundsChangedListener telah diganti namanya menjadi ActivitySpace.addOnBoundsChangedListener. Mengganti ActivitySpace.setOnSpaceUpdatedListener dengan metode add/remove. (I4c956)
  • Untuk AnchorPlacement: planeTypeFilter diganti namanya menjadi anchorablePlaneOrientations, planeSemanticFilter diganti namanya menjadi anchorablePlaneSemanticTypes. Menambahkan MovableComponent ke AnchorEntity atau ActivitySpace akan menampilkan nilai salah (false), MoveListener diganti namanya menjadi EntityMoveListener shouldDisposeParentAnchor diganti namanya menjadi disposeParentOnReAnchor systemMovable dihapus dari fungsi create dan digantikan dengan creeateCustomMovable, createSystemMovable, dan createAnchorable (If11c4)
  • Menghapus SurfaceEntity.featherRadiusX/Y dan menambahkan konsep class EdgeFeatheringParams. (Ic78fc)
  • Metode PanelEntity.enablePanelDepthTest() diganti dengan properti panelClippingConfig. Tetapkan Scene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true) untuk mengaktifkan pengujian kedalaman atau tetapkan ke PanelClippingConfig(isDepthTestEnabled = false) untuk menonaktifkannya. (I0cbe0)
  • Scene.mainPanelEntity kini berjenis MainPanelEntity, bukan PanelEntity (I7125a)
  • Mengganti nama metode setFullSpaceMode Scene menjadi configureBundleForFullSpaceModeLaunch dan metode setFullSpaceModeWithEnvironmentInherited menjadi configureBundleForFullSpaceModeLaunchWithEnvironmentInherited. (I0cbe0) (I0cbe0)
  • Mengganti nama nilai UNKNOWN, OUTSIDE_FOV, PARTIALLY_WITHIN_FOV, dan WITHIN_FOV SpatialVisibility menjadi SPATIAL_VISIBILITY_UNKNOWN, SPATIAL_VISIBILITY_OUTSIDE_FIELD_OF_VIEW, SPATIAL_VISIBILITY_PARTIALLY_WITHIN_FIELD_OF_VIEW, dan SPATIAL_VISIBILITY_WITHIN_FIELD_OF_VIEW (Ie7e8c)
  • Class SpatialVisibility diganti dengan objek publik dengan nilai Int const. setSpatialVisibilityChangedListener kini menerima Consumer<Int>, bukan Consumer<SpatialVisibility> (Ie7e8c)
  • Konstanta PointerCaptureComponent diganti namanya dan dipindahkan ke objek PointerCaptureComponent.PointerCaptureState (I9c7ac)
  • PointerCaptureComponents' StateListener diganti dengan Consumer<Int>. (I9c7ac)
  • InputEventListener diganti dengan Consumer<InputEvent> (I9c7ac)
  • setPreferredAspectRatio dipindahkan dari class Scene ke objek SpatialWindow dan menggunakan Session sebagai parameter pertama. (I7b717)
  • Entity.setHidden() diganti dengan Entity.setEnabled() dan Entity.isHidden() diganti dengan Entity.isEnabled(). setHidden(false) sama dengan setEnabled(true) dan isHidden() == !isEnabled(). (Icf0de)
  • Jenis Entity.contentDescription diubah dari String menjadi CharSequence. (Ie59be)
  • Session.create dan Session.configure kini menampilkan SecurityException jika izin yang memadai belum diberikan, bukan menampilkan SessionCreatePermissionsNotGranted atau SessionConfigurePermissionsNotGranted. (I7c488)
  • ResizableComponent.create kini memerlukan Consumer<ResizeEvent> ResizeEventListener diganti dengan Consumer<ResizeEvent> ResizableComponent.size diganti namanya menjadi ResizableComponent.affordanceSize ResizableComponent.minimumSize diganti namanya menjadi ResizableComponent.minimumEntitySize ResizableComponent.maximumSize diganti namanya menjadi ResizableComponent.maximumEntitySize, ResizableComponent.autoHideContent diganti namanya menjadi ResizableComponent.shouldAutoHideContent ResizableComponent.forceShowResizeOverlay diganti namanya menjadi ResizableComponent.shouldAlwaysShowOverlay (I97a2d)
  • minSDK dikurangi menjadi 24 untuk androidx.xr.scenecore dan androidx.xr.compose. Paket XR masih memerlukan API 34 saat runtime. (I17224)
  • Menghapus batasan RequiresApi(34) di semua paket Jetpack XR. Pembatasan ini berlebihan karena Jetpack XR saat ini hanya tersedia di perangkat dengan level API 34+. (Iae0f8)
  • Artefak SceneCore utama (xr:scenecore:scenecore) hanya akan berisi API asinkron bergaya Kotlin. Developer Java dapat mengandalkan library xr:scenecore:scenecore-guava untuk mengakses API yang kompatibel. (If221b)
  • Project yang dirilis dengan Kotlin 2.0 memerlukan KGP 2.0.0 atau yang lebih baru untuk digunakan (Idb6b5)
  • Library ini sekarang menggunakan anotasi nullness JSpecify, yang merupakan penggunaan jenis. Developer Kotlin harus menggunakan argumen compiler berikut untuk menerapkan penggunaan yang benar: -Xjspecify-annotations=strict (ini adalah default yang dimulai dengan compiler Kotlin versi 2.1.0) (Ia8420)
  • Semua metode asinkron yang menampilkan ListenableFuture telah diganti dengan fungsi penangguhan Kotlin. Developer Java yang ingin menggunakan metode asinkron berbasis ListenableFuture, bukan fungsi penangguhan Kotlin, kini harus menggunakan fungsi ekstensi di :xr:scenecore-scenecore-guava. Misalnya, GuavaExrImage berisi fungsi asinkron ExrImage yang setara dengan Guava, GuavaScenePose berisi fungsi asinkron ScenePose yang setara dengan Guava, GuavaGltfModel berisi fungsi asinkron Guava-equivalent GltfModel, dll. (If7283) (I0af60) (If7283) (Ia8515) (I4efdf) (I54bbf) (I3467a) (I82a33)

Perbaikan Bug

  • Memperbarui aturan Jetpack XR Scenecore ProGuard untuk mencegah AbstractMethodError bagi klien yang diminifikasi. (I91a01)
  • Perbaikan tambahan untuk mendukung minifikasi Proguard untuk Jetpack XR SceneCore (I4f47e)
  • Memperbaiki bug yang menyebabkan InteractableComponent mengalami error jika hitPosition pada HitInfo InputEvent mengalami error jika hitPosition yang ditampilkan dari sistem bernilai null (I7a695)
  • Nilai *Mode konfigurasi telah diganti namanya untuk mencerminkan perilakunya. (I6d247)
  • Memperbaiki masalah terkait FOV dan HitTest di TestApp SceneCore. (I2c51e)
  • Memperbaiki bug di SpatialCapabilities.hasCapability() yang akan menampilkan true jika salah satu kemampuan yang diteruskan dengan bitwise OR bernilai true, bukan hanya menampilkan true jika semuanya bernilai true. (I2cd40)
  • SurfaceEntity.StereoMode.TOP_BOTTOM diperbarui agar peta atas ditampilkan ke mata kiri dan peta bawah ditampilkan ke mata kanan. (I4ae68)

Versi 1.0.0-alpha04

7 Mei 2025

androidx.xr.scenecore:scenecore:1.0.0-alpha04 dan androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04 dirilis. Versi 1.0.0-alpha04 berisi commit ini.

Fitur Baru

  • Penanganan tombol kembali kini akan berfungsi pada entity panel tanpa aktivitas tersemat. Agar penanganan tombol kembali berfungsi, Anda harus menentukan android:enableOnBackInvokedCallback= "true" dalam manifes Android.
  • StereoSurfaceEntity kini mendukung pemutaran MV-HEVC melalui dua nilai StereoMode baru: MULTIVIEW_LEFT_PRIMARY dan MULTIVIEW_RIGHT_PRIMARY.
  • PanelEntity.setSize dan PanelEntity.getSize kini menampilkan ukuran dalam ruang induk.
  • Entity.setPose, Entity.getPose, Entity.setScale, Entity.getScale, Entity.setAlpha, dan Entity.getAlpha kini menggunakan parameter baru relativeTo, yang memungkinkan nilai get/set relatif terhadap ruang yang berbeda. Nilai yang didukung adalah Parent, Activity, dan Real World, dan nilai default untuk parameter ini adalah Parent.
  • Metode ekstensi Callback Visibilitas Spasial ditambahkan ke SessionExt.kt untuk memantau kapan konten scene bergerak di dalam atau di luar ruang pandang pengguna.
  • setPointSourceParams telah ditambahkan ke SpatialAudioTrack, sehingga parameter dapat diperbarui setelah trek dibuat.
  • Menambahkan class baru, Scene, dengan referensi ke Scenecore API. Scene akan dapat diakses sebagai properti ekstensi Session. Fungsi di dalam SessionExt telah dipindahkan ke Scene sehingga impor perlu disesuaikan; misalnya, SessionExt.getScene(session).addSpatialCapababilitiesChangedListener versus SessionExt.addSpatialCapabilitiesChangedListener.
  • ActivityPose.hitTestAsync ditambahkan, sehingga memungkinkan hitTest terhadap konten virtual.
  • Menambahkan jenis Komponen baru SpatialPointerComponent, yang memungkinkan klien menentukan ikon yang dirender untuk pointer, atau menonaktifkan ikon. Komponen ini saat ini hanya dapat dipasang ke instance PanelEntity.
  • Memperkenalkan factory PanelEntity baru, yang menggunakan dimensi panel dalam meter atau piksel. Factory PanelEntity lama yang menggunakan dua parameter jenis Dimension untuk panel telah dihapus.

Perubahan API

  • Menghapus batasan RequiresApi(34) di semua paket Jetpack XR. Pembatasan ini berlebihan karena Jetpack XR saat ini hanya tersedia di perangkat dengan level API 34+. (Iae0f8)
  • Project yang dirilis dengan Kotlin 2.0 memerlukan KGP 2.0.0 atau yang lebih baru untuk digunakan (Idb6b5)
  • Class PermissionHelper telah dihapus.
  • PanelEntity.getPixelDensity tidak digunakan lagi.
  • PanelEntity.setPixelDimensions dan PanelEntity.getPixelDimension dihapus, diganti dengan setSizeInPixels dan getSizeInPixels.
  • Entity.getActivitySpaceAlpha dihapus. Dapat diganti dengan Entity.getAlpha(Space.Activity).
  • Entity.getWorldSpaceScale dihapus. Dapat diganti dengan Entity.getScale(Space.REAL\_WORLD).
  • Class Session di SceneCore telah dihapus dan digantikan oleh Session di XR Runtime.
  • StereoSurfaceEntity diganti namanya menjadi SurfaceEntity.
  • Entity.setSize dan Entity.getSize dihapus, dan metode yang sama ditambahkan ke PanelEntity.
  • PointSourceAttributes diganti namanya menjadi PointSourceParams.
  • SpatializerConstants.SOURCE\_TYPE\_BYPASS diganti namanya menjadi SpatializerConstants.SOURCE\_TYPE\_DEFAULT.
  • Entity PointSourceParams telah diubah dari akses publik menjadi internal.
  • AnchorEntity.create kini mengharuskan PlaneTrackingMode dikonfigurasi di Session.configure().
  • SpatialUser API kini memerlukan HeadTrackingMode untuk dikonfigurasi di Session.configure().
  • Jika ResizableComponent tidak dilampirkan, log level INFO akan diberikan, bukan log level ERROR.
  • Class Fov kini menjadi class Kotlin reguler.
  • Pisahkan Entity.kt untuk menempatkan setiap jenis entity konkret ke dalam filenya sendiri.
  • Saat membuat PanelEntity baru, sebagian besar Tampilan akan diubah induknya menjadi FrameLayout. Hal ini memfasilitasi penggunaan LayoutInspector dengan Panel Spasial.
  • Instance XrExtensions yang saat ini digunakan kini terdaftar di platform, dengan upaya terbaik, untuk membantu proses debug aplikasi.

Perbaikan Bug

  • Perbaikan telah ditambahkan untuk mencegah error yang dapat terjadi saat PanelEntity dengan MovableComponent dan AnchorPlacement dipindahkan
  • Memperbaiki masalah saat ResizableComponent memberikan ukuran yang tidak berlaku dalam callback onResizeStart.
  • Memperbaiki error saat dispose() JxrPlatformAdapterAxr dipanggil beberapa kali.

Versi 1.0.0-alpha03

26 Februari 2025

androidx.xr.scenecore:scenecore:1.0.0-alpha03 dan androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03 dirilis. Versi 1.0.0-alpha03 berisi commit ini.

Fitur Baru

  • Minifikasi Proguard kini didukung untuk kode Jetpack XR

Perbaikan Bug

  • Perbaikan tambahan untuk mendukung minifikasi Proguard untuk Jetpack XR SceneCore (I4f47e)
  • Memperbarui aturan Jetpack XR Scenecore ProGuard untuk mencegah AbstractMethodError bagi klien yang diminifikasi. (I91a01)

Versi 1.0.0-alpha02

12 Februari 2025

androidx.xr.scenecore:scenecore:1.0.0-alpha02 dan androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02 dirilis. Versi 1.0.0-alpha02 berisi commit ini.

Perubahan yang dapat menyebabkan gangguan mendatang yang memengaruhi aplikasi yang di-build sebelum 1.0.0-alpha02

  • Metode factory telah dipindahkan dari class Session ke metode pendamping pada setiap jenis masing-masing:
    • Session.createActivityPanelEntity(Dimensions, String, Activity, Pose) telah dihapus dan diganti dengan ActivityPanelEntity.create(Session, Dimensions, String, Pose)
    • Session.createAnchorEntity(Anchor) telah dihapus dan diganti dengan AnchorEntity.create(Session, Anchor)
    • Session.createAnchorEntity(Dimensions, Int, Int, Duration) telah dihapus dan diganti dengan AnchorEntity.create(Session, Dimensions, Int, Int, Duration)
    • Session.createEntity(String, Pose) telah dihapus dan diganti dengan ContentlessEntity.create(Session, String, Pose)
    • Session.createExrImageResource(String) telah dihapus dan diganti dengan ExrImage.create(Session, String)
    • Session.createGltfEntity(GltfModel, Pose) telah dihapus dan diganti dengan GltfModelEntity.create(Session, GltfModel, Pose)
    • Session.createGltfModelResource(String) telah dihapus dan diganti dengan GltfModel.create(Session, String)
    • Session.createInteractableComponent(Executor, InputEventListener) telah dihapus dan diganti dengan InteractableComponent.create(Session, Executor, InputEventListener)
    • Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean) telah dihapus dan diganti dengan MovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)
    • Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose) telah dihapus dan diganti dengan PanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)
    • Session.createResizableComponent(Dimensions, Dimensions) telah dihapus dan diganti dengan ResizableComponent.create(Session, Dimensions, Dimensions)
    • Session.createStereoSurfaceEntity(Int, Dimensions, Pose) telah dihapus dan diganti dengan StereoSurface.create(Session, Int, Dimensions, Pose)
  • Metode yang tidak digunakan lagi berikut telah dihapus:
    • Session.canEmbedActivityPanel(Activity) telah dihapus. Sebagai gantinya, gunakan getSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY).
    • Session.hasSpatialCapability(Int) telah dihapus. Metode ini telah diganti dengan penggunaan getSpatialCapabilities().hasCapability() sebagai cara yang lebih terkotak-kotak untuk memeriksa keberadaan kemampuan spasial karena getSpatialCapabilities() menampilkan objek SpatialCapabilities.
    • Session.requestFullSpaceMode() telah dihapus dan diganti dengan SpatialEnvironment.requestFullSpaceMode()
    • Session.requestHomeSpaceMode() telah dihapus dan diganti dengan SpatialEnvironment.requestHomeSpaceMode()
  • Session.setFullSpaceMode(Bundle) dan Session.setFullSpaceModeWithEnvironmentInherited(Bundle) telah dipindahkan ke fungsi ekstensi. File developer harus menambahkan impor baru untuk akses:
    • import androidx.xr.scenecore.setFullSpaceMode
    • import androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
  • Session.setPreferredAspectRatio(Activity, Float) telah dipindahkan ke fungsi ekstensi. File developer harus menambahkan impor baru untuk akses:
    • import androidx.xr.scenecore.setPreferredAspectRatio
  • Session.getEntitiesOfType(Class<out T>) dan Session.getEntityForRtEntity(RtEntity) telah dipindahkan ke fungsi ekstensi. File developer harus menambahkan impor baru untuk akses:
    • import androidx.xr.scenecore.getEntitiesOfType
    • import androidx.xr.scenecore.getEntityForRtEntity
  • Session.unpersistAnchor(Anchor) telah dihapus
  • Session.createPersistedAnchorEntity(UUID) telah dihapus

Masalah umum

  • PanelEntity.setCornerRadius() dan ActivityPanelEntity.setCornerRadius() mungkin tidak akan diterapkan hingga panel dipindahkan lagi. Hal ini dapat diatasi dengan memindahkan panel ke posisinya saat ini
  • Saat BoundsChanged dipanggil di ActivitySpace, beberapa ActivityPose mungkin belum diperbarui dengan benar. Status ini akan diperbarui pada panggilan OnSpaceUpdated berikutnya pada ActivitySpace

Perubahan yang dapat menyebabkan gangguan & perubahan perilaku

  • PanelEntity dan ActivityPanelEntity akan memiliki radius sudut default 32 dp atau lebih kecil jika panel memiliki lebar atau tinggi yang lebih kecil dari 32 dp

API dan kemampuan baru

  • Memperkenalkan StereoSurface.CanvasShape, yang memungkinkan pembuatan kanvas Spherical dan Hemispherical untuk merender media imersif.
  • StereoSurfaceEntity.create() kini menerima parameter CanvasShape. (Parameter ini saat ini diabaikan, tetapi akan digunakan dalam rilis mendatang)
  • StereoSurfaceEntity.create() tidak lagi menggunakan parameter Dimensions. Aplikasi harus mengontrol ukuran kanvas dengan menyetel CanvasShape
  • StereoSurfaceEntity memiliki anggota CanvasShape yang dapat ditetapkan secara dinamis.
  • StereoSurfaceEntity.dimensions kini menjadi properti hanya baca; aplikasi harus menetapkan CanvasShape untuk mengubah dimensi.
  • StereoSurfaceEntity kini memungkinkan StereoMode disetel ulang setelah konstruksi.

Perubahan lain

  • Mengurangi minSDK waktu kompilasi menjadi 24. Semua Jetpack XR API terus memerlukan API 34 saat runtime.
  • Factory sesi SceneCore (Session.create) tidak lagi meluncurkan intent untuk mendapatkan izin SCENE_UNDERSTANDING. Sebagai gantinya, aplikasi klien harus secara eksplisit meminta izin dari pengguna, sebelum mencoba membuat anchor. Pembuatan anchor akan gagal jika izin tidak diberikan oleh pengguna.

Perbaikan bug

  • getActivitySpacePose() telah diperbaiki untuk memperhitungkan skala ActivitySpace dengan menampilkan nilai terjemahan dalam meter berskala, bukan selalu menampilkan meter yang tidak berskala. transformPoseTo kini juga menggunakan unit yang tepat untuk menghitung perubahan koordinat saat ActivitySpace terlibat dalam sumber atau tujuan.
  • Skybox kini akan ditetapkan ke skybox serba hitam setiap kali preferensi skybox null diteruskan menggunakan setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom)). Untuk kembali ke skybox dan geometri default sistem, gunakan setSpatialEnvironmentPreference(null).

Versi 1.0.0-alpha01

12 Desember 2024

androidx.xr.scenecore:scenecore-* 1.0.0-alpha01 dirilis.

Fitur Rilis Awal Rilis developer awal Jetpack SceneCore, library grafik scene 3D untuk membuat dan memanipulasi scene dan lingkungan imersif. Library ini memungkinkan Anda menempatkan dan mengatur model 3D dan panel konten secara relatif satu sama lain dan lingkungan virtual atau dunia nyata Anda.

  • SpatialEnvironment: Buat pengalaman yang sepenuhnya imersif dengan gambar skybox dan/atau geometri model 3D sebagai latar belakang untuk scene XR lingkungan Anda. Atau aktifkan passthrough, sehingga adegan virtual Anda dapat berintegrasi dengan lingkungan dunia nyata pengguna.
  • PanelEntity: Tambahkan konten 2D ke scene 3D Anda dengan menyematkan tata letak dan Aktivitas Android standar ke panel spasial yang dapat mengambang atau ditambatkan ke permukaan dunia nyata.
  • GltfModelEntity: Menempatkan, menganimasikan, dan berinteraksi dengan model 3D di tampilan Anda. SceneCore mendukung format file glTF untuk memudahkan integrasi dengan model yang ada.
  • SpatialAudio: Tambahkan sumber audio ambien dan titik ke dalam adegan 3D Anda untuk suara spasial yang sepenuhnya imersif.
  • StereoSurfaceEntity: SceneCore mendukung perutean mata kiri/kanan untuk konten yang dirender ke Android Surface. Hal ini dapat digunakan untuk merender konten stereoskopis dalam format berdampingan atau atas-bawah, seperti foto stereo, video 3D, atau UI lain yang dirender secara dinamis. Aplikasi harus menggunakan MediaPlayer atau ExoPlayer untuk decoding video.
  • Sistem Komponen: SceneCore menawarkan sistem komponen yang andal dan fleksibel untuk menambahkan kemampuan ke konten XR Anda, termasuk affordance bagi pengguna untuk memindahkan, mengubah ukuran, serta berinteraksi dengan model dan panel.
  • Anchor: Dengan mengaktifkan passthrough, Anda dapat memasang panel dan model ke permukaan sebenarnya, sehingga memberikan integrasi konten virtual yang lancar kepada pengguna di lingkungan dunia nyata mereka.
  • Pose Pengguna: Akses lokasi pengguna dalam tampilan virtual, untuk mengarahkan konten Anda di sekitar posisi pengguna.
  • SpatialCapabilities: Buat aplikasi yang sepenuhnya adaptif dan memanfaatkan kemampuan spasial jika tersedia, seperti penempatan 3D konten UI. Tidak hanya itu, aplikasi Anda dapat memantau perubahan kemampuan saat aplikasi dijalankan, untuk mengubah pengalaman berdasarkan cara pengguna menggunakan perangkat Android XR mereka.

Masalah Umum

  • Saat ini, minSDK 30 diperlukan untuk menggunakan Jetpack SceneCore. Sebagai solusinya, tambahkan entri manifes <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> berikut agar dapat di-build dan dijalankan dengan minSDK 23.
  • Sesi dapat menjadi tidak valid dalam berbagai situasi yang otomatis membuat ulang Aktivitas, termasuk mengubah ukuran panel utama, menghubungkan periferal, dan beralih antara mode terang dan gelap. Jika Anda mengalami masalah pembatalan sesi, solusinya mencakup membuat panel utama tidak dapat diubah ukurannya, menggunakan entity panel dinamis, menonaktifkan pembuatan ulang aktivitas untuk perubahan konfigurasi tertentu, atau menonaktifkan perubahan tema mode terang/gelap.
  • Komponen yang Dapat Dipindahkan dan Dapat Diubah Ukurannya tidak didukung di GltfEntity.
  • Entity.getSize() tidak didukung di GltfEntity.
  • Aplikasi Jetpack XR harus meminta izin android.permission.SCENE_UNDERSTANDING di AndroidManifest.
  • Pembuatan sesi hanya didukung di perangkat Android XR. Saat ini, jika Anda membuat Sesi dan mencoba menggunakannya di perangkat non-Android XR, Anda akan mendapatkan RuntimeException.
  • Menetapkan skybox ke null melalui `SpatialEnvironment.setSpatialEnvironmentPreference() tidak menghasilkan skybox hitam pekat seperti yang didokumentasikan. Hal ini dapat menghasilkan skybox default sistem atau tidak ada perubahan pada skybox saat ini.
  • Klien SceneCore harus menambahkan implementation(“com.google.guava:listenablefuture-1.0”) ke konfigurasi Gradle untuk dependensi aplikasi mereka. Dalam rilis mendatang, scenecore akan menyertakan library ini sebagai dependensi api sehingga klien tidak perlu mendeklarasikannya secara eksplisit.
  • SceneCore secara keliru menyertakan com.google.guava:guava-31.1-android dan com.google.protobuf:protobuf-javalite sebagai dependensi transitif. Jika hal ini menyebabkan error class duplikat dalam build Anda, kedua dependensi ini dapat dikecualikan dengan aman.
  • Jika aplikasi Anda menggunakan SceneCore dan mengaktifkan ProGuard, aplikasi akan error saat Anda membuat Sesi. Sebagai solusinya, nonaktifkan ProGuard. Lihat panduan ini untuk mengetahui informasi selengkapnya tentang cara mengaktifkan ProGuard.