Jetpack SceneCore

Twórz i modyfikuj graf sceny Androida XR za pomocą treści 3D.
Najnowsza aktualizacja Wersja stabilna Wersja kandydująca do publikacji Wersja beta Wersja alfa
7 października 2026 r. - 1.0.0-rc02 - -

Deklarowanie zależności

Aby dodać zależność od XR SceneCore, musisz dodać do projektu repozytorium Maven Google. Więcej informacji znajdziesz w repozytorium Maven Google.

Dodaj zależności dotyczące potrzebnych artefaktów w pliku build.gradle aplikacji lub modułu:

Odlotowe

dependencies {
    implementation "androidx.xr.scenecore:scenecore:1.0.0-rc02"

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

Kotlin

dependencies {
    implementation("androidx.xr.scenecore:scenecore:1.0.0-rc02")

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

Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.

Prześlij opinię

Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli odkryjesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nową kartę, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz oddać głos na istniejący problem, klikając przycisk gwiazdki.

Tworzenie nowego problemu

Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.

Wersja 1.0

Wersja 1.0.0-rc02

7 października 2026 r.

Publikacja androidx.xr.scenecore:scenecore-*:1.0.0-rc02 Wersja 1.0.0-rc02 zawiera te zmiany.

Poprawki błędów

  • Usunięto potencjalny wyciek pamięci przez usunięcie perceptionRuntimeCache w SessionExt i przeprowadzenie refaktoryzacji w celu pobrania PerceptionRuntime bezpośrednio z instancji Session. (Ie35b1)
  • Naprawiono potencjalny wyciek kontekstu przez użycie applicationContext w przypadku natywnych uchwytów OpenXR, aby zapewnić, że środowisko wykonawcze natywne nie przechowuje odwołań do kontekstu Activity. (Ie35b1)
  • Usunęliśmy warunki wyścigu w XrInstanceManager, wprowadzając odpowiednią synchronizację i blokowanie inicjowania. (Ie35b1)
  • Naprawiono ReferenceCleaner, aby obsługiwać wyrejestrowywanie działań czyszczących, i zapewniono, że działania czyszczące Entity są wykonywane jawnie podczas dispose(), co zapobiega duplikowaniu wykonania podczas odśmiecania pamięci. (Ie35b1)
  • Usunięto wyciek pamięci w Scene przez usunięcie sceneCache w SessionExt i przeprowadzenie refaktoryzacji Scene w celu pobierania instancji bezpośrednio z sessionConnectors. (Ie35b1)

Wersja 1.0.0-rc01

9 września 2026 r.

Publikacja androidx.xr.scenecore:scenecore-*:1.0.0-rc01 Wersja 1.0.0-rc01 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodano bibliotekę xr:scenecore:scenecore-openxr. (Ic49f2)
  • Usunęliśmy kilka wycofanych interfejsów API przed wydaniem wersji stabilnej 1.0.0.

Poprawki błędów

  • Rozwiązano problem z wyciekiem pamięci, w którym odwołanie do aktywności mogło być zachowywane przez system po zniszczeniu aktywności. (I6dcd7)

Zmiany w zachowaniu

  • Usunięto dane wyjściowe logcat z SceneCore. (I10c3c)

Wersja 1.0.0-beta02

12 sierpnia 2026 r.

Publikacja androidx.xr.scenecore:scenecore-*:1.0.0-beta02 Wersja 1.0.0-beta02 zawiera te zmiany.

Poprawki błędów

  • toMoveEvent() zwróci wartość null, jeśli element nadrzędny został usunięty. (Ia7a1b)

Wersja 1.0.0-beta01

15 lipca 2026 r.

Publikacja androidx.xr.scenecore:scenecore-*:1.0.0-beta01 Wersja 1.0.0-beta01 zawiera te zmiany.

Zmiany w interfejsie API

  • Interfejsy API GltfAnimation i SpatialGltfModelAnimation zostały oznaczone jako eksperymentalne. Niektóre właściwości zostały przekształcone w funkcje pobierające. (I8d689, b/524771027)
  • Usunęliśmy publiczną metodę fabryczną MovableComponent.createTrackingMovable. (I00912, b/477169015)
  • Zmieniliśmy funkcję Converted Session.create na funkcję zawieszającą. (I5d27f)
  • ActivitySpace i AnchorSpace rozszerzają teraz wspólną klasę SpaceEntity, która zawiera wspólne zachowania w przypadku elementów, których pozycje są kontrolowane przez system (I506ec, b/513619219).
  • Zmieniono nazwę AnchorEntity na AnchorSpace (Ifa95e, b/513619219)
  • Udostępnia publiczny interfejs API do testowania SoundEffectPoolComponentTester. (I87df7, b/498104417)
  • Dodaliśmy opcjonalny parametr cornerRadius do konstruktora SurfaceEntity.Shape.Quad i udostępniliśmy właściwość cornerRadius. Deweloperzy mogą teraz określać promień zaokrąglenia rogu podczas tworzenia kształtu Quad, aby renderować SurfaceEntity płótna z zaokrąglonymi rogami, i wysyłać zapytania o promień istniejących kształtów Quad. (Ia7809, b/474681085)
  • Udostępnia przeciążenia publicznego interfejsu API testu SpatialAudioTrackBuilderTester, SpatialAudioTrackTester i SceneCoreTestRule.getTester. (I378c6, b/496333938)
  • Dodaj specjalistyczne zastąpienia toString() dla wielu typów ARCore. Te typy mają na celu dostarczanie deweloperom dodatkowych informacji na potrzeby debugowania i nie są przeznaczone do używania w aplikacjach produkcyjnych ani w aplikacjach dostarczanych użytkownikom.

Wersja 1.0.0-alpha16

17 czerwca 2026 r.

Publikacja androidx.xr.scenecore:scenecore-*:1.0.0-alpha16 Wersja 1.0.0-alpha16 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodano przeciążenia dla funkcji addVertexData, setIndexData i addSubset do funkcji CustomMesh.BuilderFromMeshData i CustomMesh.BuilderFromMeshBuffer. Te przeciążenia umożliwiają programistom przekazywanie surowych danych i parametrów bezpośrednio (np. ByteBuffer, offset, size, topology, indexOffset, indexCount) bez konieczności umieszczania ich w obiektach pośrednich, takich jak ByteBufferRegion czy MeshSubset. (I84d5c)
  • Scene.requestFullSpaceMode() i Scene.requestHomeSpaceMode() zostały zmienione odpowiednio na requestFullSpace() i requestHomeSpace(). Podobnie zaktualizowaliśmy inne metody i dokumentację, w których pojawiają się terminy „tryb obszaru domowego” i „tryb pełnego obszaru”. (I45751)
  • Udostępnia publiczny interfejs API do testowania PanelEntityTester i MainPanelEntityTester (I961e4)
  • Dodawanie usługi pointSourceParams do usługi SoundEffectPoolComponent (I4a750)
  • Udostępnia publiczny interfejs API do testowania MovableComponentTester (I0c972)
  • Udostępnia publiczny interfejs API testu PointerCaptureComponentTester (Ic0d4f)
  • Udostępnia publiczny interfejs API do testowania ActivityPanelEntityTester (I837c4)
  • Udostępnia publiczny interfejs API do testowania ResizableComponentTester (I0a3a4)
  • Udostępnia publiczny interfejs API testu BoundsComponentTester. (Iefd53)
  • Udostępnia publiczny interfejs API do testowania SpatialMediaPlayerTester (Ia3e09)
  • Udostępnia publiczny interfejs API do testowania SpatialEnvironmentTester (Icf60f)
  • Udostępnia publiczne interfejsy API do testowania GltfModelTester i SceneCoreTestRule.getGltfModelTester. (I33fcb)
  • Udostępnia publiczny interfejs API do testowania InteractableComponentTester. (Ia7096)
  • Udostępnia publiczny interfejs API do testowania SurfaceEntityTester. (Ic0740)
  • Udostępnia publiczne interfejsy API do testowania GltfModelEntityTester, TestGltfModelNode i TestGltfAnimation. (I72c4d)
  • Udostępnia publiczne interfejsy API do testowania SceneTester i SceneCoreTestRule.sceneTester. (Ib4ec5)
  • Udostępnia publiczne interfejsy API do testowania PerceptionSpaceTester i SceneCoreTestRule.perceptionSpaceTester. (Icf739)
  • Udostępnia publiczny interfejs API do testowania MeshEntityTester. (I63801)
  • Udostępnia publiczne przeciążenia interfejsu API testu ImageBasedLightingAssetTester i SceneCoreTestRule.getTester. (I57ec4)
  • Udostępnia publiczny interfejs API do testowania TextureTester (Ia865b)
  • Udostępnia publiczny interfejs API testu PositionalAudioComponentTester (Icd96e)
  • Udostępnia publiczny interfejs API do testowania SpatialSoundPoolTester (Ia3531)
  • Udostępnia publiczny interfejs API do testowania SoundEffectPoolTester (If349a)
  • Udostępnia publiczne interfejsy API do testowania ActivitySpaceTester i SceneCoreTestRule.activitySpaceTester. (I2d5c2)
  • Udostępnia publiczny interfejs API do testowania SpatialWindowTester (I41837)
  • Udostępnia publiczny interfejs API do testowania AnchorEntityTester (I68404)
  • Udostępnia publiczny interfejs API testu SceneCoreTestRule. (Ic72d3)
  • Dodano klasę PixelDensity i udostępniono ją za pomocą Scene#virtualPixelDensity, aby zapewnić sprzętowy stosunek pikseli na metr na potrzeby dokładnego mapowania wymiarów fizycznych w ActivitySpace. (I0e3ac)
  • Dodano publiczne interfejsy API do tworzenia i renderowania niestandardowych siatek. (I7ad2f)
  • Interfejs VertexLayout API został zaktualizowany, aby używać listy VertexBufferLayout, gdzie każdy element VertexBufferLayout opisuje atrybuty w jednym buforze wierzchołków. Umożliwia to bardziej elastyczne rozmieszczenie danych wierzchołków, w tym przeplatane atrybuty z niestandardowymi krokami i przesunięciami. (Ic426b)
  • Udostępnia MovableComponent.createTrackingMovable do przekształcania obiektu ARCore Trackable w pozycję względem przestrzeni aktywności. (I12249)
  • Wartość domyślna elementu nadrzędnego w Entity.create została zmieniona na null. (Ic3145)
  • Entity została zaktualizowana i jest teraz klasą, a nie interfejsem. Jest to teraz klasa bazowa dla wszystkich typów encji. W ramach tej zmiany usunięto BaseEntity. (I7fbc9)
  • Biblioteki GltfModel, ExrImage i ImageBasedLightingAsset implementują teraz AutoCloseable, aby umożliwić idiomatyczne zarządzanie zasobami za pomocą bloku use w Kotlinie. (I1ac79)
  • Wprowadzono klasę ImageBasedLightingAsset, która zastępuje klasę ExrImage w przypadku definiowania oświetlenia przestrzennego. Interfejs ExrImage został wycofany i usunięty z publicznego interfejsu API. SpatialEnvironmentPreference zostało zaktualizowane, aby korzystać z ImageBasedLightingAsset. (I6c92a)
  • Zmieniliśmy nazwę parametru skybox w SpatialEnvironment na imageBasedLightingAsset, aby lepiej odzwierciedlała jego przeznaczenie, i wyjaśniliśmy, że tekstury wizualnego skyboxa powinny być uwzględnione w parametrze geometry. (I24d4a)
  • Obiekty przestrzenne używają teraz stałej gęstości urządzenia do obliczeń pikseli na metry na poziomach 1 i 2 interfejsu Spatial API, co zapewnia spójne rozmiary niezależnie od zmian gęstości wyświetlania systemu. (I37051)

Wersja 1.0.0-alpha15

19 maja 2026 r.

Publikacja androidx.xr.scenecore:scenecore-*:1.0.0-alpha15 Wersja 1.0.0-alpha15 zawiera te zmiany.

Zmiany w interfejsie API

  • Interfejs Entity.dispose() został usunięty jako publiczny interfejs API. Zamiast wywoływać dispose() w przypadku instancji Entity, aplikacje mogą sprawić, że instancje będą mogły zostać usunięte, ustawiając parent na null i usuwając wszystkie silne odwołania do tych instancji. (I396c9)
  • Metody set/clearOnLoadCompleteListener użytkownika SoundEffectPool zostały usunięte. Zamiast niej użyj zasady add/removeLoadCompleteListener. (Iae78d)
  • Scena set/clearSpatialVisibilityChangedListener została zastąpiona sceną add/removeSpatialVisibilityChangedListener. (I67dff)
  • Nazwy wszystkich metod SceneCore add/removeOnFooListener zostały zmienione na add/removeFooListener, a z nazw usunięto On. (Ibe50b)
  • Metody AnchorEntity.setOnOriginChangedListener i AnchorEntity.setOnStateChangedListener zostały zastąpione metodami add/removeFooListener, aby obsługiwać wielu słuchaczy jednocześnie. (I13749)
  • Zmieniono nazwę AnchorEntity.State.TIMEDOUT na State.TIMED_OUT. (Id2b8d)
  • Interfejs Component API został zrefaktoryzowany, aby zwiększyć bezpieczeństwo i rozszerzalność. Component jest teraz klasą abstrakcyjną. Metody onAttach() i onDetach() są teraz protected, aby zapobiec bezpośrednim połączeniom. Do zarządzania cyklami życia komponentów używaj Entity.addComponent() i Entity.removeComponent(). (Id04e8)
  • Stałe PlaneSemanticType PlaneOrientation w SceneCore zostały przeniesione z liczb całkowitych do typów niestandardowych. Ich stałe ANY zostaną usunięte. Klienci powinni zamiast tego jawnie wyliczyć wszystkie żądane stałe lub użyć nowych stałych .ALL typu Set. Metoda fabryczna AnchorEntity akceptuje teraz zbiór tych typów zamiast pojedynczej wartości. (Ib1033)
  • Dodaliśmy obsługę animacji szkieletowej (skinning) do eksperymentalnego interfejsu Custom Mesh API. Deweloperzy mogą teraz animować niestandardowe siatki, określając boneCount podczas tworzenia MeshEntity i aktualizując animację w czasie rzeczywistym za pomocą MeshEntity.setBoneTransforms(). (Id8ba2, b/496692490)
  • Wprowadziliśmy eksperymentalny interfejs API CustomMesh. Deweloperzy mogą teraz programowo tworzyć i renderować geometrię 3D w scenach za pomocą CustomMesh, MeshBuffer i MeshEntity. (I94617)
  • Kontakt androidx.xr.scenecore.SpatializerConstants.SourceType.SOURCE_TYPE_SOUND_FIELD został usunięty. Użyj w zamian zasady SourceType.SOUND_FIELD. (Ia68b9)
  • Dodanie komponentów dźwięku przestrzennego: PositionalAudioComponent, SoundEffectPoolComponent i SoundFieldAudioComponent (Ieda89)
  • AnchorEntity.getAnchor zostało zastąpione przez AnchorEntity.anchor i będzie teraz zwracać Anchor, gdy AnchorEntity zostanie utworzone na podstawie Anchor ARCore (I5c7c8).
  • Wartość domyślna parametru parent w metodach fabrycznych ActivityPanelEntity, GltfModelEntity, GroupEntity, PanelEntity i SurfaceEntity została zmieniona z ActivitySpace na null. Aby dołączyć obiekt do wykresu sceny i uczynić go widocznym, deweloperzy muszą teraz wyraźnie ustawić jego element nadrzędny podczas tworzenia instancji lub za pomocą Entity.parent = ... (Ie7cc1).

Poprawki błędów

  • SceneCore automatycznie odzyskuje teraz instancje Entity, gdy stają się one niedostępne, co eliminuje konieczność jawnego wywoływania przez deweloperów funkcji dispose() w celu zwolnienia zasobów. Aby mieć pewność, że instancja [Entity] została prawidłowo odzyskana, deweloperzy powinni:
    • Odłącz go od grafu sceny, ustawiając jego wartość parent na null.
    • Usunąć z kodu wszystkie silne odwołania do instancji.
    • Uwaga dotycząca specjalnych typów elementów: w przypadku elementów, które nie mogą mieć elementów nadrzędnych (np. AnchorEntity), deweloperzy muszą zachować silne odwołanie, gdy instancja jest używana. Jeśli wszystkie odwołania zostaną zwolnione, te instancje staną się dostępne w sposób fantomowy i zostaną automatycznie odzyskane. (I83fe4)
  • Zawężone reguły zachowywania ProGuard dla wszystkich bibliotek SceneCore. (I98447)

Znane problemy

  • Dołączenie PositionalAudioComponent do Entity z nieaktywną instancją ExoPlayer spowoduje awarię. Nie wywołuj funkcji setPointSourceParams ani nie dołączaj/odłączaj komponentów dźwięku przestrzennego, gdy ExoPlayer jest zatrzymany. Naprawimy to w kolejnej wersji.

Wersja 1.0.0-alpha14

6 maja 2026 r.

Publikacja androidx.xr.scenecore:scenecore-*:1.0.0-alpha14 Wersja 1.0.0-alpha14 zawiera te zmiany.

Zmiany w interfejsie API

  • TrackingState i VpsAvailabilityResult zostały przeniesione do androidx.xr.arcore package, a typy w androidx.xr.runtime są teraz wycofane. (Ic7930, b/480462213)
  • Zmieniono nazwę Plane.Type na PlaneType. (I8c90c, b/482675376)
  • Zmieniono nazwę Plane.Label na PlaneLabel. (Ic6b67, b/482675376)
  • Środowisko wykonawcze androidx.xr.runtime.FieldOfView zostało wycofane. Użyj w zamian zasady androidx.xr.runtime.math.FieldOfView. (Ia01a0, b/480233045)
  • Nazwę konta usługi Matrix4.pose zmieniono na Matrix4.toPose(). Właściwość pose została wycofana. (I329b4, b/493383490)
  • Zmieniono nazwy wartości typu wyliczeniowego HandJointType. (Ifbc83, b/482670596)
  • Udostępniliśmy interfejsy Component.onAttach i onDetach jako publiczne interfejsy API, aby umożliwić niestandardowe implementacje Component. (I0ca1f)
  • Dodawanie komponentów dźwięku przestrzennego (I39ddd, b/489421980, b/436642086, b/436642499)
  • Usuń encję z usługi PointSourceParams. Zamiast tego jednostka będzie używana bezpośrednio z SpatialAudioTrack, SpatialSoundPool i SpatialMediaPlayer (Ib3685, b/489421980, b/436634048).
  • Zmieniono nazwę DeviceTrackingMode.LAST_KNOWN na SPATIAL_LAST_KNOWN (z wycofanym elementem zastępczym), dodano INERTIAL_LAST_KNOWN do śledzenia 3DoF i dodano TRACKING_DEGRADED do TrackingState. (Ie661c, b/445466590)
  • Wycofano GroupEntity. Aby mieć obiekt z samą podstawową funkcjonalnością, wywołaj funkcję Entity.create, która zwróci interfejs obiektu. (I4c450, b/473867483)
  • Dodano interfejs API XrLog. Ustaw wartość XrLog.isEnabled na true, aby włączyć rejestrowanie w JetpackXR, i użyj XrLog.Level, aby ustawić poziom rejestrowania. (I76a1f, b/463460895, b/487378441)

Poprawki błędów

  • Scene.keyEntity jest teraz domyślnie ustawiona na mainPanelEntity. (I6a3ef)

Wersja 1.0.0-alpha13

25 marca 2026 r.

Publikacja androidx.xr.scenecore:scenecore-*:1.0.0-alpha13 Wersja 1.0.0-alpha13 zawiera te zmiany.

Zmiany w interfejsie API

  • Usunięto flagę unscaledGravityAlignedActivitySpace z konta Session.create. ActivitySpace jest teraz zawsze nieskalowany i wyrównany do grawitacji. (If6f11, b/458173423)
  • Usunięto z GltfModelEntity wycofane funkcje setMaterialOverride i clearMaterialOverride, które są teraz wywoływane w poszczególnych GltfModelNode. (I2e5d2)
  • Dodano transformPixelCoordinatesToLocalPosition i transformNormalizedCoordinatesToLocalPosition do PanelEntity oraz usunięto równoważne metody eksperymentalne, które zwracały pozy zamiast pozycji Vector3. (Ib6960, b/460123106, b/458333591)
  • Dodano interfejsy API GltfAnimation do sterowania animacjami glTF w SceneCore. (I2c172, b/466065486, b/465819070, b/465818617)
  • Zmieniono nazwę ScenePose.activitySpacePose na ScenePose.poseInActivitySpace (I8f175, b/427822261)
  • Dodano implementację przewidywanego czasu działania Scenecore (I9c4ab, b/476440158)
  • Podczas zmiany rozmiaru elementu w panelu głównym może on zmienić położenie na punkt początkowy ActivitySpace. Nie ma innego rozwiązania niż ręczne lub programowe przywrócenie panelu do pierwotnej lokalizacji. Ten błąd zostanie naprawiony w kolejnej wersji. (b/489427007).
  • W niektórych przypadkach afordancja dla MovableComponent może się nie pojawiać w przypadku SurfaceEntity i innych typów encji innych niż panel. Wyraźne ustawienie wartości MovableComponent.size spowoduje wyświetlenie elementu interfejsu. Ten błąd zostanie naprawiony w przyszłej wersji (b/490983469).

Wersja 1.0.0-alpha12

25 lutego 2026 r.

Publikacja androidx.xr.scenecore:scenecore-*:1.0.0-alpha12 Wersja 1.0.0-alpha12 zawiera te zmiany.

Znane problemy

  • Zakotwiczone obiekty mogą po kilku sekundach przeskoczyć z zakotwiczonej pozycji do początku przestrzeni aktywności.
  • Aplikacje mogą ulegać awarii podczas tworzenia instancji SurfaceEntity. Ten problem został rozwiązany w wersji androidx.xr.scenecore:scenecore-*:1.0.0-alpha13 i w kolejnych wersjach. Aplikacje, których dotyczy problem, powinny zostać zaktualizowane do najnowszych wersji.

Zmiany w interfejsie API

  • Nazwy ActivitySpace.addOnSpaceUpdatedListener i ActivitySpace.removeOnSpaceUpdatedListener zostały zmienione na addOnOriginChangedListener i removeOnOriginChangedListener. Nazwa notatnika AnchorEntity.setOnSpaceUpdatedListener została zmieniona na setOnOriginChangedListener. (I5d8fb)
  • Dodaliśmy właściwość nazwy publicznej do FakeEntity i udostępniliśmy widok w FakePanelEntity. (Ifa1f9)

Poprawki błędów

  • Poprawiono obliczenia gęstości pikseli w nowszych obrazach systemu (I57d04).

Wersja 1.0.0-alpha11

28 stycznia 2026 r.

Publikacja androidx.xr.scenecore:scenecore-*:1.0.0-alpha11 Wersja 1.0.0-alpha11 zawiera te zmiany.

Zmiany w interfejsie API

  • Zmienia nazwę PerceivedResolutionResult.InvalidCameraView na PerceivedResolutionResult.InvalidRenderViewpoint, ponieważ interfejsy API getPerceivedResolution korzystają teraz z interfejsu API RenderViewpoint ARCore zamiast CameraViewScenePose. Ta nazwa lepiej odzwierciedla nową implementację. (I8c967, b/446989745, b/419311998)
  • Metody PanelEntity/SurfaceEntity.getPerceivedResolution przyjmują teraz jako argument wartość RenderViewpoint podaną przez dewelopera. Wcześniej środowisko wykonawcze arbitralnie wybierało wartość RenderViewpoint używaną w obliczeniach postrzeganej rozdzielczości. (I8c967, b/446989745, b/419311998)
  • Usunięto: SpatialUser, ScenePose.Head i ScenePose.CameraView. Funkcje tych interfejsów API są objęte interfejsami ArDevice i RenderViewpoint w ARCore dla Jetpack XR. Aby uzyskać ScenePose odpowiadający głowie użytkownika lub jego lewemu lub prawemu oku, deweloperzy mogą użyć PerceptionSpace.getScenePoseFromPerceptionPose z odpowiednią pozycją uzyskaną za pomocą interfejsów API ARCore. (I2f69c, b/446989745)

Wersja 1.0.0-alpha10

3 grudnia 2025 r.

Publikacja androidx.xr.scenecore:scenecore-*:1.0.0-alpha10 Wersja 1.0.0-alpha10 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodano transformPixelCoordinatesToPose i transformNormalizedCoordinatesToPose do PanelEntity (I462b3)
  • Dodano klasę pomocniczą Utils do SceneCore środowiska wykonawczego na podstawie logiki w SceneCore (I570b9)

Poprawki błędów

  • Rozwiązaliśmy problem, który mógł powodować awarię po zniszczeniu sesji i otrzymaniu SpatialModeChangeEvent (If44e8).
  • Naprawiliśmy błąd, który mógł powodować wyświetlanie komunikatu IllegalStateException podczas opuszczania lub ponownego wchodzenia na kartę Aktywność. (Ibff1c)

Wersja 1.0.0-alpha09

19 listopada 2025 r.

Publikacja androidx.xr.scenecore:scenecore-*:1.0.0-alpha09 Wersja 1.0.0-alpha09 zawiera te zmiany.

Nowe funkcje

  • Dodaje interfejs API do pobierania ScenePose, który reprezentuje kompozycję pozycji początkowej przestrzeni percepcji i pozycji względem pozycji początkowej przestrzeni percepcji. (I5b50a)
  • Dodano funkcję getGravityAlignedPose. Pozycja wyrównana z grawitacją ignoruje obrót w płaszczyźnie pionowej i poprzecznej. (I5ae21)
  • Typy stałych AnchorEntity.State zostały zmienione z Ints na podtypy State. (Ib0c49)
  • Dodano getChildren() do interfejsu Entity. Zaktualizowano cykl życia MainPanelEntity. (Ia69d6)

Zmiany w interfejsie API

  • Typy stałych PointerCaptureComponent.PointerCaptureState zostały zmienione z liczb całkowitych na podtypy PointerCaptureState. (Ic888a)
  • Scene.spatialCapabilities jest teraz typu Set<SpatialCapability> zamiast pola Int. Zmieniono nazwy stałych SpatialCapability. (I9c109)
  • Typy stałych SurfaceEntity zostały zmienione z liczb całkowitych na podtypy SurfaceEntity. (I419ed)
  • Typy stałych SpatializerConstant zostały zmienione z liczb całkowitych na podtypy SpatializerConstant. (Ia0e18)
  • Typy stałych TextureSampler zostały zmienione z liczb całkowitych na podtypy TextureSampler. (I44078)
  • Typy stałych SpatialVisibility zostały zmienione z liczb całkowitych na podtypy SpatialVisibility. (I70739)
  • Typy stałych ResizeEvent.ResizeState zostały zmienione z liczb całkowitych na podtypy ResizeState. (I384d5)
  • Typy stałych InputEvent zostały zmienione i zamiast typu Ints dziedziczą teraz odpowiedni typ otaczający. (I82817)
  • Typy stałych GltfModelEntity.AnimationState zostały zmienione z liczb całkowitych na podtypy AnimationState. (I24f4e)
  • Typy stałych AlphaMode zostały zmienione z liczb całkowitych na podtypy AlphaMode. (I27b56)
  • Typy stałych Space zostały zmienione z liczb całkowitych na podtypy przestrzeni. (I9255b)
  • ScenePose.hitTest i powiązane metody zwracają teraz wartość null, jeśli nie znaleziono przecięcia, zamiast wartości HitTestResult z wartością null hitPosition. HitTestResult.hitPosition nie może już mieć wartości null. (I1400a)
  • Zmieniono odwołania do ActivityPose na ScenePose. (I7fe43)

Wersja 1.0.0-alpha08

22 października 2025 r.

Publikacja androidx.xr.scenecore:scenecore-*:1.0.0-alpha08 Wersja 1.0.0-alpha08 zawiera te zmiany.

Zmiany w interfejsie API

  • Nazwa ActivityPanelEntity.moveActivity została zmieniona na transferActivity (I273c5, b/430332856)

Poprawki błędów

  • Dodano :xr:scenecore:scenecore-spatial-rendering i :xr:scenecore:scenecore-spatial-core jako zależności implementacji :xr:scenecore:scenecore (I6ab65, b/447000520)
  • Jeśli po zniszczeniu sesji nastąpi próba dostępu do session.scene, zostanie zgłoszony wyjątek. (I77e6f)

Wersja 1.0.0-alpha07

24 września 2025 r.

androidx.xr.scenecore:scenecore:1.0.0-alpha07, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha07 i androidx.xr.scenecore:scenecore-testing:1.0.0-alpha07 są udostępnione. Wersja 1.0.0-alpha07 zawiera te zmiany.

Zmiany w interfejsie API

  • Zmieniliśmy nazwę interfejsu fixedAspectRatio na isFixedAspectRatioEnabled i uczyniliśmy go właściwością logiczną (I5c4e8, b/440588971).
  • Scenecore Fałszywe informacje znajdują się teraz w module xr:scenecore:scenecore-testing. (Idd951)
  • Zmieniono nazwę shouldAutoHideContent na isAutoHideContentWhileResizingEnabled i shouldAlwaysShowOverlay na isAlwaysShowOverlayEnabled (I97c36, b/432335421)
  • Zaktualizowano stałe SceneCore TextureSampler, aby były bardziej czytelne. Na przykład TextureSampler.MinFilter.LINEAR to teraz TextureSampler.MIN_FILTER_LINEAR (Ib159c).
  • Funkcja ustawiająca setKeyEntity sceny została scalona ze zmienną keyEntity. Ustawienie keyEntity na nieruchomy element, np. AnchorEntity, spowoduje zgłoszenie IllegalArgumentException zamiast zwrócenia wartości logicznej false. (I62080, b/428721695, b/422215745)
  • Zmienna SpatialModeChangeListener sceny została zastąpiona zmienną setSpatialModeChangedListener. Zamiast SpatialModeChangedListener przyjmuje Consumer<SpatialModeChangeEvent>. setSpatialModeChangedListener może teraz opcjonalnie przyjmować wykonawcę. (I62080, b/428721695, b/422215745)
  • Usunięto parametr bundle z ActivityPanelEntity.startActivity (I64344, b/430332856, b/430333040)
  • Zmieniono nazwę SpatializerConstants.SOURCE_TYPE_BYPASS na SpatializerConstants.SOURCE_TYPE_DEFAULT. (Ifc7fe, b/422215565)
  • Dodano stałą SpatialSoundPool.PLAY_FAILED. (Ifc7fe, b/422215565)
  • Dodaliśmy argumenty domyślne do metod SpatialSoundPool.play. (Ifc7fe, b/422215565)
  • Usunięto wartość zwracaną setterów w SpatialAudioTrackBuilder. (Ifc7fe, b/422215565)
  • Zmiany w SurfaceEntity
    • SurfaceEntity.CanvasShape zmienił(a) nazwę Shape
    • SurfaceEntity.CanvasShape.Vr180Hemisphere zmienił(a) nazwę Hemisphere
    • SurfaceEntity.CanvasShape.Vr360Sphere zmienił(a) nazwę Sphere
    • SurfaceEntity.EdgeFeatheringParams.SmoothFeather zmienił(a) nazwę RectangleFeather
    • SurfaceEntity.EdgeFeathingParams.SolidEdge zmienił(a) nazwę NoFeathering
    • SurfaceEntity.ContentSecurityLevel zmienił(a) nazwę SurfaceProtection
    • SurfaceEntity.ContentSecurityLevel.{values} dodał(a) prefiks SURFACE_PROTECTION_.
    • SurfaceEntity.SuperSampling.{$values} dodał(a) prefiks SUPER_SAMPLING_
    • SurfaceEntity.StereoMode.{values} dodał(a) prefiks STEREO_MODE_
    • SurfaceEntity.ContentColorMetadata.maxCLL zmienił(a) nazwę maxContentLightLevel (I7eb5f, b/422216050, b/427529950)
  • Zmieniono nazwę launchActivity na startActivity (I7db90, b/430332856)
  • Kontakt Scene.activitySpaceRoot został usunięty. Użyj w zamian zasady Scene.activitySpace. (I05ee8, b/378706624, b/422215745)
  • configureBundleForFullSpaceModeLaunch i configureBundleForFullSpaceModeLaunchWithEnvironmentInherited zmieniono odpowiednio na createBundleForFullSpaceModeLaunch i createBundleForFullSpaceModeLaunchWithEnvironmentInherited oraz przeniesiono do pliku LaunchUtils.kt jako metody najwyższego poziomu, a jako pierwszy parametr przyjmują one Session (I64a2c, b/437186050).
  • Funkcja GroupEntity factory zwraca teraz typ GroupEntity zamiast typu Entity. (I66042)

Poprawki błędów

Wersja 1.0.0-alpha06

13 sierpnia 2025 r.

androidx.xr.scenecore:scenecore:1.0.0-alpha06, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha06 i androidx.xr.scenecore:scenecore-testing:1.0.0-alpha06 są udostępnione. Wersja 1.0.0-alpha06 zawiera te zmiany.

Zmiany w interfejsie API

  • Usunięto ograniczenia dotyczące interfejsów API SceneCore, BaseEntity i BaseScenePose (88c0ff6)

Wersja 1.0.0-alpha05

30 lipca 2025 r.

androidx.xr.scenecore:scenecore-guava:1.0.0-alpha05, androidx.xr.scenecore:scenecore-testing:1.0.0-alpha05 i androidx.xr.scenecore:scenecore:1.0.0-alpha05 są udostępnione. Wersja 1.0.0-alpha05 zawiera te zmiany.

Nowe funkcje

  • Interfejs Perceived Resolution API został dodany do jednostek panelu i SurfaceEntities. (I118f6)
  • PerceivedResolution Dodano metody wywołania zwrotnego do pliku Scene.kt, aby monitorować postrzeganą rozdzielczość głównego panelu aktywności w HSM. (I58084)
  • SurfaceEntity – dodano obsługę aplikacji, która może prosić o nadpróbkowanie w momencie tworzenia. Umożliwia to aplikacjom używanie filtra nadpróbkowania do wygładzania krawędzi. (I06913)
  • Dodaliśmy właściwość recommendedContentBoxInFullSpace do elementu ActivitySpace. Zwraca zalecane pole, w którym można umieścić treści w trybie pełnej przestrzeni. (I4cd6f)
  • Dodano przeciążony konstruktor dla modyfikatora przenoszonego, który umożliwia zakotwiczenie. (Ic0c70)

Zmiany w interfejsie API

W tej wersji wprowadziliśmy w SceneCore wiele zmian w interfejsie API. Kilka klas zostało zmienionych lub przeniesionych do innych modułów, a większość metod pobierających i ustawiających została zastąpiona właściwościami Kotlin. Do czasu pierwszej wersji beta spodziewamy się kolejnych zmian w interfejsie API, ale nie będą one tak liczne ani tak bardzo zakłócające.

  • Zmieniono nazwy i/lub przeniesiono te klasy i interfejsy: androidx.xr.scenecore.PixelDimensions na androidx.xr.runtime.math.IntSize2d, androidx.xr.scenecore.Dimensions na androidx.xr.runtime.math.FloatSize3d, androidx.xr.scenecore.ActivityPose na ScenePose, androidx.xr.scenecore.ContentlessEntity na GroupEntity, androidx.xr.scenecore.PlaneType na PlaneOrientation, androidx.xr.scenecore.PlaneSemantic na PlaneSemanticType. (Ifd405)(I3b622) (If534d)
  • Niektóre metody ustawiające właściwości klasy Scene zostały ustawione jako prywatne. Nie miały być zmieniane przez klientów SceneCore: activitySpace, activitySpaceRoot, mainPanelEntity, perceptionSpace, spatialCapabilities, spatialEnvironment i spatialUser. (I2f506)
  • W przypadku jednostki zmieniono te właściwości: get/setParent(), setContentDescription; wycofano właściwość Entity.is/setHidden(), zamiast niej używaj właściwości Entity.is/setEnabled. (Ibc4c6)
  • Usunięto klasę androidx.xr.scenecore.BasePanelEntity. Zamiast niej używaj bezpośrednio klasy PanelEntity. Zastąpiono metody pobierające i ustawiające dla PanelEntity właściwościami. Zmieniono usługę PanelEntity.size z Float3dSize na Float2dSize. Usunięto wycofaną metodę androidx.xr.scenecore.PanelEntity.getPixelDimensions. Zamiast niej używaj metody getSizeInPixels. (Icc174)
  • Tekst androidx.xr.scenecore.OnSpaceUpdatedListener został zastąpiony tekstem Runnable. (I19308)
  • Zastąpiono SpatialUser.getCameraViews() usługą. (Ib0cc5) W przypadku interfejsów ExrImage i GltfModel: zmieniliśmy metody create na funkcje zawieszania; zmodyfikowaliśmy parametry tworzenia, aby akceptowały Uri lub Path zamiast String. (Id8883) (I0d247), (I25706)
  • Przeniesiono elementy SpatialEnvironment.requestFullSpaceMode i SpatialEnvironment.requestHomeSpaceMode do sekcji Scena, np. zamiast session.scene.spatialEnvironment.requestFullSpaceMode() używaj session.scene.requestFullSpaceMode(). addOnPassthroughOpacityChangedListener i addOnSpatialEnvironmentChangedListener mają teraz zastąpienia, które akceptują opcjonalne obiekty Executor. (I12fe0) (I6b21e)
  • Usunięto te wycofane metody SpatialEnvironment: togglePassthrough, setPassthrough, setPassthroughOpacity, getPassthroughMode, getPassthroughOpacity, setSkybox i setGeometry. Usunięto też wycofaną klasę SpatialEnvironment.PassthroughMode (I927bd) (I927bd) (I927bd)
  • Zastąpiliśmy te metody pobierające i ustawiające SpatialEnvironment właściwościami Kotlin: getCurrentPassthroughOpacity(), get/setPassthroughOpacityPreference(), get/setSpatialEnvironmentPreference(), isSpatialEnvironmentPreferenceActive() (I33a7b) (Ie06e2) (Ie06e2)
  • Typ SpatialEnvironmentPreference.preferredPassthroughOpacity zmieniono z Float? na Float. Nie akceptuje już wartości null. Zamiast tego wartość SpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCE służy do sygnalizowania braku preferencji dotyczących krycia. (I40107)
  • Zaktualizowano parametr windowBoundsPx na pixelDimensions, a jego typ z Rect na IntSize2d w metodzie create. (I1926e)
  • Konstruktor SpatialEnvironment jest teraz wewnętrzny (I75a51)
  • Zastąpiono klasy SpatialPointerIconNone i SpatialPointerIconCircle obiektami towarzyszącymi SpatialPointerIcon.NONE i SpatialPointerIcon.CIRCLE (I416d2)
  • Pole SpatialPointerIcon w tabeli SpatialPointerComponent nie może już mieć wartości null. Użyj wartości SpatialPointerIcon.DEFAULT zamiast wartości null, aby wskazać, że należy użyć domyślnej ikony wskaźnika systemu. (I416d2)
  • Zastąpiliśmy androidx.xr.scenecore.AnchorEntity.getState() właściwością tylko do odczytu. Zmieniliśmy nazwy parametrów w metodzie AnchorEntity.create(), aby były bardziej zrozumiałe. W metodach AnchorEntity służących do ustawiania i dodawania detektorów detektor został przeniesiony na ostatni argument, aby umożliwić stosowanie lambd końcowych. Zastąpiono androidx.xr.scenecore.OnStateChangedListener na AnchorEntity tekstem Consumer<AnchorEntity.State>. (I472e0)
  • GltfModelEntity.getAnimationState() to teraz usługa. (I10b29)
  • Zastąpiono ActivitySpace.getBounds() usługą. Zmieniono nazwę ActivitySpace.addBoundsChangedListener na ActivitySpace.addOnBoundsChangedListener. Zastąpiono ActivitySpace.setOnSpaceUpdatedListener metodami dodawania i usuwania. (I4c956)
  • AnchorPlacement: planeTypeFilter zmieniono na anchorablePlaneOrientations, a planeSemanticFilter zmieniono na anchorablePlaneSemanticTypes. Dodanie MovableComponent do AnchorEntity lub ActivitySpace zwróci wartość fałsz. Funkcja MoveListener została zmieniona na EntityMoveListener shouldDisposeParentAnchor, a funkcja disposeParentOnReAnchor systemMovable została usunięta z funkcji create na rzecz funkcji creeateCustomMovable, createSystemMovable i createAnchorable (If11c4).
  • Usuwa SurfaceEntity.featherRadiusX/Y i dodaje koncepcję zajęć EdgeFeatheringParams. (Ic78fc)
  • Metoda PanelEntity.enablePanelDepthTest() została zastąpiona właściwością panelClippingConfig. Ustaw wartość Scene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true), aby włączyć testowanie głębi, lub PanelClippingConfig(isDepthTestEnabled = false), aby je wyłączyć. (I0cbe0)
  • Scene.mainPanelEntity ma teraz typ MainPanelEntity zamiast PanelEntity (I7125a)
  • Zmieniono nazwę metody setFullSpaceMode w scenie na configureBundleForFullSpaceModeLaunch, a metody setFullSpaceModeWithEnvironmentInherited na configureBundleForFullSpaceModeLaunchWithEnvironmentInherited. (I0cbe0) (I0cbe0)
  • Zmiana nazw SpatialVisibilitywartości UNKNOWN, OUTSIDE_FOV, PARTIALLY_WITHIN_FOV i WITHIN_FOV na SPATIAL_VISIBILITY_UNKNOWN, SPATIAL_VISIBILITY_OUTSIDE_FIELD_OF_VIEW, SPATIAL_VISIBILITY_PARTIALLY_WITHIN_FIELD_OF_VIEW i SPATIAL_VISIBILITY_WITHIN_FIELD_OF_VIEW (Ie7e8c).
  • Klasa SpatialVisibility została zastąpiona obiektem publicznym z wartościami const Int. setSpatialVisibilityChangedListener akceptuje teraz Consumer<Int> zamiast Consumer<SpatialVisibility> (Ie7e8c)
  • Stałe PointerCaptureComponent zostały przeniesione do obiektu PointerCaptureComponent.PointerCaptureState i zmieniono ich nazwy (I9c7ac).
  • Tekst PointerCaptureComponents' StateListener został zastąpiony tekstem Consumer<Int>. (I9c7ac)
  • Tekst „InputEventListener” został zamieniony na „Consumer<InputEvent>” (I9c7ac)
  • setPreferredAspectRatio został przeniesiony z klasy Scene do obiektu SpatialWindow i jako pierwszy parametr przyjmuje Session. (I7b717)
  • Entity.setHidden() zastąpiono przez Entity.setEnabled(), a Entity.isHidden() zastąpiono przez Entity.isEnabled(). setHidden(false) jest równe setEnabled(true) i isHidden() == !isEnabled(). (Icf0de)
  • Typ Entity.contentDescription został zmieniony z ciągu znaków na CharSequence. (Ie59be)
  • Funkcje Session.create i Session.configure zgłaszają teraz błąd SecurityException, gdy nie przyznano wystarczających uprawnień, zamiast zwracać wartości SessionCreatePermissionsNotGranted lub SessionConfigurePermissionsNotGranted. (I7c488)
  • ResizableComponent.create now requires a Consumer<ResizeEvent> ResizeEventListener was replaced with Consumer<ResizeEvent> ResizableComponent.size was renamed to ResizableComponent.affordanceSize ResizableComponent.minimumSize was renamed to ResizableComponent.minimumEntitySize ResizableComponent.maximumSize was renamed to ResizableComponent.maximumEntitySize, ResizableComponent.autoHideContent was renamed to ResizableComponent.shouldAutoHideContent ResizableComponent.forceShowResizeOverlay was renamed to ResizableComponent.shouldAlwaysShowOverlay (I97a2d)
  • Zmniejszono wartość minSDK do 24 w przypadku androidx.xr.scenecore i androidx.xr.compose. Pakiety XR nadal wymagają interfejsu API w wersji 34 w czasie działania. (I17224)
  • Usunięto ograniczenie RequiresApi(34) we wszystkich pakietach Jetpack XR. To ograniczenie było zbędne, ponieważ Jetpack XR jest obecnie dostępny tylko na urządzeniach z interfejsem API na poziomie 34 lub wyższym. (Iae0f8)
  • Główny artefakt SceneCore (xr:scenecore:scenecore) będzie zawierać tylko asynchroniczne interfejsy API w stylu Kotlin. Programiści Java mogą korzystać z biblioteki xr:scenecore:scenecore-guava, aby uzyskiwać dostęp do zgodnych interfejsów API. (If221b)
  • Projekty wydane w Kotlinie 2.0 wymagają użycia KGP 2.0.0 lub nowszego (Idb6b5).
  • Ta biblioteka używa teraz adnotacji o wartości null JSpecify, które są używane w typie. Aby wymusić prawidłowe użycie, deweloperzy Kotlin powinni użyć tego argumentu kompilatora: -Xjspecify-annotations=strict (jest to domyślne ustawienie od wersji 2.1.0 kompilatora Kotlin) (Ia8420)
  • Wszystkie metody asynchroniczne, które zwracają ListenableFuture, zostały zastąpione funkcjami zawieszającymi w Kotlinie. Deweloperzy Java, którzy chcą używać metod asynchronicznych opartych na ListenableFuture zamiast funkcji zawieszających Kotlin, muszą teraz używać funkcji rozszerzeń w :xr:scenecore-scenecore-guava. Na przykład GuavaExrImage zawiera asynchroniczne funkcje ExrImage, które są odpowiednikami funkcji Guava, GuavaScenePose zawiera asynchroniczne funkcje ScenePose, które są odpowiednikami funkcji Guava, GuavaGltfModel zawiera asynchroniczne funkcje Guava-equivalent GltfModel itd. (If7283) (I0af60) (If7283) (Ia8515) (I4efdf) (I54bbf) (I3467a) (I82a33)

Poprawki błędów

  • Zaktualizowano regułę Jetpack XR Scenecore ProGuard, aby zapobiec AbstractMethodError w przypadku zminimalizowanych klientów. (I91a01)
  • Dodatkowe poprawki obsługi minifikacji Proguard w przypadku Jetpack XR SceneCore (I4f47e)
  • Usunęliśmy błąd, w którym InteractableComponent może powodować awarię, jeśli hitPosition w obiekcie HitInfo InputEvent może powodować awarię, jeśli hitPosition zwrócony przez system miał wartość null (I7a695).
  • Nazwy wartości trybu konfiguracji zostały zmienione, aby odzwierciedlały ich działanie. (I6d247)
  • Rozwiązaliśmy problemy z polem widzenia i HitTest w SceneCore TestApp. (I2c51e)
  • Naprawiono błąd w funkcji SpatialCapabilities.hasCapability(), która zwracała wartość true, jeśli którykolwiek z możliwości przekazanych za pomocą operatora bitowego OR był prawdziwy, zamiast zwracać wartość true tylko wtedy, gdy wszystkie były prawdziwe. (I2cd40)
  • SurfaceEntity.StereoMode.TOP_BOTTOM zaktualizowano, aby górna mapa była widoczna dla lewego oka, a dolna – dla prawego. (I4ae68)

Wersja 1.0.0-alpha04

7 maja 2025 r.

androidx.xr.scenecore:scenecore:1.0.0-alpha04 i androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04 zostały opublikowane. Wersja 1.0.0-alpha04 zawiera te zmiany.

Nowe funkcje

  • Funkcja obsługi wstecznej będzie teraz działać w przypadku elementów panelu bez osadzonych aktywności. Aby działało cofanie, musisz określić android:enableOnBackInvokedCallback= "true" w manifeście Androida.
  • StereoSurfaceEntity obsługuje teraz odtwarzanie MV-HEVC dzięki 2 nowym wartościom StereoMode: MULTIVIEW_LEFT_PRIMARY i MULTIVIEW_RIGHT_PRIMARY.
  • Funkcje PanelEntity.setSize i PanelEntity.getSize zwracają teraz rozmiary w przestrzeni nadrzędnej.
  • Funkcje Entity.setPose, Entity.getPose, Entity.setScale, Entity.getScale, Entity.setAlpha i Entity.getAlpha przyjmują teraz nowy parametr relativeTo, który umożliwia pobieranie i ustawianie wartości względem różnych przestrzeni. Obsługiwane wartości to Parent, Activity i Real World. Wartością domyślną tego parametru jest Parent.
  • Dodano metody rozszerzenia wywołania zwrotnego widoczności przestrzennej do SessionExt.kt, aby monitorować, kiedy zawartość sceny przesuwa się wewnątrz lub na zewnątrz pola widzenia użytkownika.
  • Do setPointSourceParams dodano SpatialAudioTrack, co umożliwia aktualizowanie parametrów po utworzeniu ścieżki.
  • Dodaliśmy nową klasę Scene z odwołaniami do interfejsów Scenecore API. Scena będzie dostępna jako właściwość rozszerzenia sesji. Funkcje w SessionExt zostały przeniesione do sceny, więc importy trzeba będzie dostosować, np. SessionExt.getScene(session).addSpatialCapababilitiesChangedListener – SessionExt.addSpatialCapabilitiesChangedListener
  • Dodano emotikon ActivityPose.hitTestAsync, który umożliwia hitTest w przypadku treści wirtualnych.
  • Dodano nowy typ komponentu SpatialPointerComponent, który umożliwia klientom określenie ikony renderowanej dla wskaźnika lub wyłączenie ikony. Ten komponent można obecnie dołączać tylko do instancji PanelEntity.
  • Wprowadzamy nową PanelEntity fabrykę, która przyjmuje wymiary panelu w metrach lub pikselach. Starsza fabryka PanelEntity, która przyjmowała 2 parametry typu Dimension dla panelu, została usunięta.

Zmiany w interfejsie API

  • Usunięto ograniczenie RequiresApi(34) we wszystkich pakietach Jetpack XR. To ograniczenie było zbędne, ponieważ Jetpack XR jest obecnie dostępny tylko na urządzeniach z interfejsem API na poziomie 34 lub wyższym. (Iae0f8)
  • Projekty wydane w Kotlinie 2.0 wymagają użycia KGP 2.0.0 lub nowszego (Idb6b5).
  • Zajęcia PermissionHelper zostały usunięte.
  • Interfejs PanelEntity.getPixelDensity został wycofany.
  • PanelEntity.setPixelDimensions i PanelEntity.getPixelDimension zostały usunięte i zastąpione przez setSizeInPixels i getSizeInPixels.
  • Element Entity.getActivitySpaceAlpha został usunięty. Można go zastąpić elementem Entity.getAlpha(Space.Activity).
  • Element Entity.getWorldSpaceScale został usunięty. Można go zastąpić elementem Entity.getScale(Space.REAL\_WORLD).
  • Klasa Session w SceneCore została usunięta na rzecz klasy Session w środowisku wykonawczym XR.
  • Nazwę konta usługi StereoSurfaceEntity zmieniono na SurfaceEntity.
  • Entity.setSize i Entity.getSize zostaną usunięte, a te same metody zostaną dodane do PanelEntity.
  • Nazwę konta usługi PointSourceAttributes zmieniono na PointSourceParams.
  • Nazwę konta usługi SpatializerConstants.SOURCE\_TYPE\_BYPASS zmieniono na SpatializerConstants.SOURCE\_TYPE\_DEFAULT.
  • PointSourceParams został zmieniony z dostępu publicznego na wewnętrzny.
  • AnchorEntity.create wymaga teraz skonfigurowania PlaneTrackingMode w Session.configure().
  • Interfejsy API SpatialUser wymagają teraz skonfigurowania HeadTrackingMode w Session.configure().
  • Jeśli nie jest dołączony znak ResizableComponent, zamiast logu na poziomie ERROR zostanie wyświetlony log na poziomie INFO.
  • Klasa Fov jest teraz zwykłą klasą Kotlin.
  • Podziel Entity.kt, aby umieścić każdy typ konkretnego elementu w osobnym pliku.
  • Podczas tworzenia nowego PanelEntity większość widoków zostanie przeniesiona do FrameLayout. Ułatwia to korzystanie z LayoutInspector w przypadku paneli przestrzennych.
  • Obecnie używana instancja XrExtensions jest teraz zarejestrowana na platformie w sposób możliwie najlepszy, aby ułatwić debugowanie aplikacji.

Poprawki błędów

  • Dodaliśmy poprawkę, która zapobiega awarii, do której mogło dojść podczas przenoszenia PanelEntity z MovableComponent i AnchorPlacement.
  • Rozwiązaliśmy problem, który powodował, że interfejs ResizableComponent zwracał nieaktualne rozmiary w wywołaniu zwrotnym onResizeStart.
  • Naprawiono awarię, która występowała, gdy funkcja JxrPlatformAdapterAxrdispose() była wywoływana wielokrotnie.

Wersja 1.0.0-alpha03

26 lutego 2025 r.

androidx.xr.scenecore:scenecore:1.0.0-alpha03 i androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03 zostały opublikowane. Wersja 1.0.0-alpha03 zawiera te zmiany.

Nowe funkcje

  • Minimalizacja Proguard jest teraz obsługiwana w przypadku kodu Jetpack XR

Poprawki błędów

  • Dodatkowe poprawki obsługi minifikacji Proguard w przypadku Jetpack XR SceneCore (I4f47e)
  • Zaktualizowano regułę Jetpack XR Scenecore ProGuard, aby zapobiec AbstractMethodError w przypadku zminimalizowanych klientów. (I91a01)

Wersja 1.0.0-alpha02

12 lutego 2025 r.

androidx.xr.scenecore:scenecore:1.0.0-alpha02 i androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02 zostały opublikowane. Wersja 1.0.0-alpha02 zawiera te zmiany.

Nadchodząca zmiana powodująca niezgodność wsteczną, która będzie miała wpływ na aplikacje utworzone przed wersją 1.0.0-alpha02

  • Metody fabryczne zostały przeniesione z klasy Session do metody towarzyszącej w przypadku każdego typu:
    • Usługa Session.createActivityPanelEntity(Dimensions, String, Activity, Pose) została usunięta i zastąpiona usługą ActivityPanelEntity.create(Session, Dimensions, String, Pose)
    • Usługa Session.createAnchorEntity(Anchor) została usunięta i zastąpiona usługą AnchorEntity.create(Session, Anchor)
    • Usługa Session.createAnchorEntity(Dimensions, Int, Int, Duration) została usunięta i zastąpiona usługą AnchorEntity.create(Session, Dimensions, Int, Int, Duration)
    • Usługa Session.createEntity(String, Pose) została usunięta i zastąpiona usługą ContentlessEntity.create(Session, String, Pose)
    • Usługa Session.createExrImageResource(String) została usunięta i zastąpiona usługą ExrImage.create(Session, String)
    • Usługa Session.createGltfEntity(GltfModel, Pose) została usunięta i zastąpiona usługą GltfModelEntity.create(Session, GltfModel, Pose)
    • Usługa Session.createGltfModelResource(String) została usunięta i zastąpiona usługą GltfModel.create(Session, String)
    • Usługa Session.createInteractableComponent(Executor, InputEventListener) została usunięta i zastąpiona usługą InteractableComponent.create(Session, Executor, InputEventListener)
    • Usługa Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean) została usunięta i zastąpiona usługą MovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)
    • Usługa Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose) została usunięta i zastąpiona usługą PanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)
    • Usługa Session.createResizableComponent(Dimensions, Dimensions) została usunięta i zastąpiona usługą ResizableComponent.create(Session, Dimensions, Dimensions)
    • Usługa Session.createStereoSurfaceEntity(Int, Dimensions, Pose) została usunięta i zastąpiona usługą StereoSurface.create(Session, Int, Dimensions, Pose)
  • Usunęliśmy te wycofane metody:
    • Zbiór kolumn Session.canEmbedActivityPanel(Activity) został usunięty. Użyj w zamian zasady getSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY).
    • Zbiór kolumn Session.hasSpatialCapability(Int) został usunięty. Została zastąpiona przez getSpatialCapabilities().hasCapability(), ponieważ jest to bardziej podzielony sposób sprawdzania obecności funkcji przestrzennych, ponieważ getSpatialCapabilities() zwraca obiekt SpatialCapabilities.
    • Usługa Session.requestFullSpaceMode() została usunięta i zastąpiona usługą SpatialEnvironment.requestFullSpaceMode()
    • Usługa Session.requestHomeSpaceMode() została usunięta i zastąpiona usługą SpatialEnvironment.requestHomeSpaceMode()
  • Funkcje Session.setFullSpaceMode(Bundle) i Session.setFullSpaceModeWithEnvironmentInherited(Bundle) zostały przeniesione do funkcji rozszerzeń. Do plików dewelopera trzeba będzie dodać nowe instrukcje importu, aby uzyskać dostęp:
    • import androidx.xr.scenecore.setFullSpaceMode
    • import androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
  • Session.setPreferredAspectRatio(Activity, Float) została przeniesiona do funkcji rozszerzenia. Do plików dewelopera trzeba będzie dodać nowy import na potrzeby dostępu:
    • import androidx.xr.scenecore.setPreferredAspectRatio
  • Funkcje Session.getEntitiesOfType(Class<out T>) i Session.getEntityForRtEntity(RtEntity) zostały przeniesione do funkcji rozszerzeń. Do plików dewelopera trzeba będzie dodać nowe instrukcje importu, aby uzyskać dostęp:
    • import androidx.xr.scenecore.getEntitiesOfType
    • import androidx.xr.scenecore.getEntityForRtEntity
  • Strefa Session.unpersistAnchor(Anchor) została usunięta
  • Strefa Session.createPersistedAnchorEntity(UUID) została usunięta

Znane problemy

  • PanelEntity.setCornerRadius() i ActivityPanelEntity.setCornerRadius() mogą zacząć obowiązywać dopiero po następnym przesunięciu panelu. Można temu zapobiec, przesuwając panel do jego bieżącej pozycji.
  • Gdy funkcja BoundsChanged jest wywoływana w przypadku elementu ActivitySpace, niektóre elementy ActivityPose mogą nie zostać poprawnie zaktualizowane. Zostanie ona zaktualizowana podczas następnej rozmowy OnSpaceUpdated, która odbędzie się ActivitySpace.

Zmiany powodujące niezgodność i zmiany w działaniu

  • PanelEntity i ActivityPanelEntity będą miały domyślny promień zaokrąglenia wynoszący 32 dp lub mniej, jeśli panel ma szerokość lub wysokość mniejszą niż 32 dp.

Nowe interfejsy API i możliwości

  • Wprowadzamy StereoSurface.CanvasShape, które umożliwia tworzenie obszarów roboczych Spherical i Hemispherical do renderowania multimediów immersyjnych.
  • StereoSurfaceEntity.create() akceptuje teraz parametr CanvasShape. (Ten parametr jest obecnie ignorowany, ale będzie używany w przyszłej wersji)
  • StereoSurfaceEntity.create() nie przyjmuje już parametru Dimensions. Aplikacje powinny kontrolować rozmiar obszaru roboczego, ustawiając wartość CanvasShape.
  • StereoSurfaceEntity ma element CanvasShape, który można ustawić dynamicznie.
  • StereoSurfaceEntity.dimensions jest teraz właściwością tylko do odczytu. Aplikacje powinny ustawiać CanvasShape, aby zmieniać wymiary.
  • StereoSurfaceEntity umożliwia teraz ponowne ustawienie StereoMode po zakończeniu budowy.

Inne zmiany

  • Zmniejszono minimalną wersję pakietu SDK w czasie kompilacji do 24. Wszystkie interfejsy API Jetpack XR nadal wymagają poziomu API 34 w czasie działania.
  • Fabryka sesji SceneCore (Session.create) nie uruchamia już intencji uzyskania uprawnień SCENE_UNDERSTANDING. Zamiast tego aplikacja kliencka musi wyraźnie poprosić użytkownika o uprawnienia przed próbą utworzenia kotwic. Tworzenie kotwicy nie powiedzie się, jeśli użytkownik nie przyzna uprawnień.

Poprawki błędów

  • getActivitySpacePose() zostało poprawione, aby uwzględniać skalę ActivitySpace, zwracając wartości tłumaczenia w skalowanych metrach, a nie zawsze w metrach bez skali. transformPoseTo używa teraz też odpowiednich jednostek do obliczania zmian współrzędnych, gdy ActivitySpace jest uwzględniony w źródle lub miejscu docelowym.
  • Gdy za pomocą parametru setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom)) zostanie przekazane ustawienie pustego skyboxa, będzie on ustawiany na czarny. Aby przywrócić domyślne ustawienia systemu dotyczące tła i geometrii, użyj setSpatialEnvironmentPreference(null).

Wersja 1.0.0-alpha01

12 grudnia 2024 r.

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

Funkcje pierwszej wersji Pierwsza wersja biblioteki Jetpack SceneCore dla deweloperów. Jest to biblioteka grafu sceny 3D do tworzenia i manipulowania wciągającymi scenami i środowiskami. Ta biblioteka umożliwia umieszczanie i aranżowanie modeli 3D oraz paneli treści względem siebie i środowisk wirtualnych lub rzeczywistych.

  • SpatialEnvironment: twórz w pełni immersyjne środowiska z obrazem skybox lub geometrią modelu 3D jako tłem dla sceny XR. Możesz też włączyć tryb passthrough, aby wirtualna scena mogła integrować się z otoczeniem użytkownika.
  • PanelEntity: dodawaj treści 2D do scen 3D, osadzając standardowe układy i aktywności Androida w przestrzennych panelach, które mogą unosić się w powietrzu lub być przymocowane do powierzchni w świecie rzeczywistym.
  • GltfModelEntity: umieszczaj, animuj i wykorzystuj w scenie modele 3D. SceneCore obsługuje format plików glTF, co ułatwia integrację z dotychczasowymi modelami.
  • SpatialAudio: dodaj do sceny 3D źródła dźwięku otoczenia i punktowe, aby uzyskać w pełni przestrzenny dźwięk.
  • StereoSurfaceEntity: SceneCore obsługuje kierowanie treści renderowanych na platformie Android Surface do lewego i prawego oka. Można go używać do renderowania treści stereoskopowych w formacie obok siebie lub góra-dół, np. zdjęć stereo, filmów 3D lub innych dynamicznie renderowanych interfejsów. Aplikacje powinny używać do dekodowania wideo odtwarzacza MediaPlayer lub ExoPlayer.
  • System komponentów: SceneCore oferuje solidny i elastyczny system komponentów do dodawania funkcji do treści XR, w tym możliwości przesuwania, zmiany rozmiaru i interakcji z modelami i panelami.
  • Zakotwiczenie: po włączeniu trybu passthrough możesz przyczepiać panele i modele do rzeczywistych powierzchni, zapewniając użytkownikom płynną integrację treści wirtualnych z ich otoczeniem.
  • Pozycja użytkownika: dostęp do lokalizacji użytkownika w scenie wirtualnej, aby dostosować treści do jego pozycji.
  • SpatialCapabilities: twórz w pełni adaptacyjne aplikacje, które wykorzystują możliwości przestrzenne, takie jak pozycjonowanie treści interfejsu w 3D. Co więcej, aplikacja może monitorować zmiany w możliwościach podczas działania, aby modyfikować sposób korzystania z niej w zależności od tego, jak użytkownik korzysta z urządzenia z Androidem XR.

Znane problemy

  • Obecnie do korzystania z Jetpack SceneCore wymagany jest pakiet SDK w wersji co najmniej 30. Aby obejść ten problem, dodaj ten wpis w pliku manifestu <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>, aby móc tworzyć i uruchamiać aplikację z wersją minSDK 23.
  • Sesja może stać się nieważna w różnych sytuacjach, które automatycznie powodują ponowne utworzenie aktywności, np. podczas zmiany rozmiaru panelu głównego, podłączania urządzeń peryferyjnych czy przełączania między trybem jasnym a ciemnym. Jeśli napotkasz problemy z unieważnianiem sesji, możesz zastosować obejścia, takie jak ustawienie głównego panelu jako nierozmiarowego, użycie dynamicznego panelu, wyłączenie ponownego tworzenia aktywności w przypadku określonych zmian konfiguracji lub wyłączenie zmian motywu w trybie jasnym/ciemnym.
  • Komponenty Movable i Resizable nie są obsługiwane w przypadku komponentu GltfEntity.
  • Metoda Entity.getSize() nie jest obsługiwana w przypadku elementu GltfEntity.
  • Aplikacje Jetpack XR muszą prosić o uprawnienie android.permission.SCENE_UNDERSTANDING w pliku AndroidManifest.
  • Tworzenie sesji jest obsługiwane tylko na urządzeniach z Androidem XR. Obecnie, jeśli utworzysz sesję i spróbujesz użyć jej na urządzeniu z Androidem XR, otrzymasz wyjątek RuntimeException.
  • Ustawienie skyboxa na wartość null za pomocą funkcji `SpatialEnvironment.setSpatialEnvironmentPreference()` nie powoduje wyświetlenia jednolitego czarnego skyboxa, jak podano w dokumentacji. Może to spowodować przywrócenie domyślnego skyboxa lub brak zmian w obecnym skyboxie.
  • Klienci SceneCore powinni dodać implementation(“com.google.guava:listenablefuture-1.0”) do konfiguracji Gradle w przypadku zależności aplikacji. W przyszłej wersji scenecore będzie zawierać tę bibliotekę jako zależność api, więc klienci nie będą musieli jej jawnie deklarować.
  • Biblioteka SceneCore błędnie uwzględnia biblioteki com.google.guava:guava-31.1-android i com.google.protobuf:protobuf-javalite jako zależności przechodnie. Jeśli spowoduje to błędy duplikowania klas w kompilacji, te 2 zależności można bezpiecznie wykluczyć.
  • Jeśli Twoja aplikacja korzysta z SceneCore i ma włączony ProGuard, ulegnie awarii podczas tworzenia sesji. Aby obejść ten problem, wyłącz ProGuard. Więcej informacji o włączaniu ProGuarda znajdziesz w tym przewodniku.