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
17 czerwca 2026 r. - - - 1.0.0-alpha16

Deklarowanie zależności

Aby dodać zależność od XR SceneCore, musisz dodać do projektu repozytorium Maven Google. Więcej informacji znajdziesz w artykule 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-alpha16"

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

Kotlin

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

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

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-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 bezpośrednie przekazywanie surowych danych i parametrów (np. ByteBuffer, offset, size, topology, indexOffset, indexCount) bez konieczności umieszczania ich w obiektach pośrednich, takich jak ByteBufferRegion czy MeshSubset. (I84d5c)
  • Scene.requestFullSpaceMode()Scene.requestHomeSpaceMode() zostały zmienione odpowiednio na requestFullSpace()requestHomeSpace(). Podobnie zaktualizowaliśmy inne metody i dokumentację, w których pojawiały się terminy „Tryb obszaru domowego” i „Tryb pełnego obszaru”. (I45751)
  • Udostępnia publiczne interfejsy API do testowania PanelEntityTesterMainPanelEntityTester (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 testu ActivityPanelEntityTester (I837c4)
  • Udostępnia publiczny interfejs API do testowania ResizableComponentTester (I0a3a4)
  • Udostępnia publiczny interfejs API testu BoundsComponentTester. (Iefd53)
  • Udostępnia publiczny interfejs API testu SpatialMediaPlayerTester (Ia3e09)
  • Udostępnia publiczny interfejs API testu SpatialEnvironmentTester (Icf60f)
  • Udostępnia publiczne interfejsy API do testowania GltfModelTesterSceneCoreTestRule.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, TestGltfModelNodeTestGltfAnimation. (I72c4d)
  • Udostępnia publiczne interfejsy API do testowania SceneTesterSceneCoreTestRule.sceneTester. (Ib4ec5)
  • Udostępnia publiczne interfejsy API do testowania PerceptionSpaceTesterSceneCoreTestRule.perceptionSpaceTester. (Icf739)
  • Udostępnia publiczny interfejs API do testowania MeshEntityTester. (I63801)
  • Udostępnia publiczne interfejsy API testów ImageBasedLightingAssetTesterSceneCoreTestRule.getTester. (I57ec4)
  • Udostępnia publiczny interfejs API testu TextureTester (Ia865b)
  • Udostępnia publiczny interfejs API do testowania 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 ActivitySpaceTesterSceneCoreTestRule.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 współczynnik 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 obiektów VertexBufferLayout, gdzie każdy obiekt 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 funkcję MovableComponent.createTrackingMovable, która przekształca obiekt ARCore Trackable w pozycję względną względem przestrzeni aktywności. (I12249)
  • Wartość domyślna elementu nadrzędnego w Entity.create została zmieniona na null. (Ic3145)
  • Entity został zaktualizowany i jest teraz klasą, a nie interfejsem. Jest to teraz klasa bazowa dla wszystkich typów encji. W ramach tej zmiany usunęliśmy BaseEntity. (I7fbc9)
  • Biblioteki GltfModel, ExrImageImageBasedLightingAsset implementują teraz AutoCloseable, aby umożliwić idiomatyczne zarządzanie zasobami za pomocą bloku use w języku Kotlin. (I1ac79)
  • Wprowadzono klasę ImageBasedLightingAsset, która zastępuje klasę ExrImage w przypadku definiowania oświetlenia otoczenia 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 skyboxSpatialEnvironment 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 w przypadku SoundEffectPool zostały usunięte. Zamiast niej używaj zasady add/removeLoadCompleteListener. (Iae78d)
  • Scena set/clearSpatialVisibilityChangedListener została zastąpiona sceną add/removeSpatialVisibilityChangedListener. (I67dff)
  • Wszystkie metody SceneCore add/removeOnFooListener zostały zmienione na add/removeFooListener, a z nazwy usunięto On. (Ibe50b)
  • Metody AnchorEntity.setOnOriginChangedListenerAnchorEntity.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ł zmodyfikowany, aby zwiększyć bezpieczeństwo i możliwości rozbudowy. Component jest teraz klasą abstrakcyjną. Metody onAttach()onDetach() są teraz protected, aby zapobiec bezpośrednim połączeniom. Do zarządzania cyklami życia komponentów używaj Entity.addComponent()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, MeshBufferMeshEntity. (I94617)
  • Kontakt androidx.xr.scenecore.SpatializerConstants.SourceType.SOURCE_TYPE_SOUND_FIELD został usunięty. Użyj w zamian zasady SourceType.SOUND_FIELD. (Ia68b9)
  • Dodawanie 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ć wartość Anchor, gdy AnchorEntity zostanie utworzone na podstawie Anchor ARCore (I5c7c8).
  • Wartość domyślna parametru parent w metodach fabrycznych ActivityPanelEntity, GltfModelEntity, GroupEntity, PanelEntitySurfaceEntity została zmieniona z ActivitySpace na null. Aby dołączyć obiekt do wykresu sceny i sprawić, że będzie widoczny, 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 staną 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] zostanie prawidłowo odzyskana, deweloperzy powinni:
    • Odłącz go od grafu sceny, ustawiając jego wartość parent na null.
    • usunąć wszystkie silne odwołania do instancji w kodzie;
    • Uwaga dotycząca specjalnych typów elementów: w przypadku elementów, które nie mogą mieć elementów nadrzędnych (np. AnchorEntity), programiści muszą zachować silne odwołanie, gdy instancja jest używana. Jeśli wszystkie odwołania zostaną zwolnione, te instancje staną się niedostępne 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)
  • 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ępnij Component.onAttachonDetach jako publiczny interfejs API, aby umożliwić niestandardowe implementacje Component. (I0ca1f)
  • Dodawanie komponentów dźwięku przestrzennego (I39ddd, b/489421980, b/436642086, b/436642499)
  • Usuń element z PointSourceParams. Zamiast tego element będzie używany bezpośrednio z SpatialAudioTrack, SpatialSoundPoolSpatialMediaPlayer (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 XrLog API. 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 ma teraz domyślnie wartość 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 wycofane funkcje setMaterialOverrideclearMaterialOverrideGltfModelEntity, które są teraz wywoływane w poszczególnych GltfModelNode. (I2e5d2)
  • Dodano transformPixelCoordinatesToLocalPositiontransformNormalizedCoordinatesToLocalPosition 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)
  • Nazwa ScenePose.activitySpacePose została zmieniona 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 ActivitySpace. Nie ma innego rozwiązania niż ręczne lub programowe przywrócenie panelu do pierwotnej lokalizacji. Ten błąd zostanie naprawiony w przyszłej 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. Jawne 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

  • ActivitySpace.addOnSpaceUpdatedListener i ActivitySpace.removeOnSpaceUpdatedListener zostały zmienione na addOnOriginChangedListener i removeOnOriginChangedListener. Nazwa AnchorEntity.setOnSpaceUpdatedListener została zmieniona na setOnOriginChangedListener. (I5d8fb)
  • Dodaliśmy właściwość nazwy publicznej do FakeEntity i udostępniliśmy widok publiczny 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

  • Zmieniliśmy nazwę PerceivedResolutionResult.InvalidCameraView na PerceivedResolutionResult.InvalidRenderViewpoint, ponieważ interfejsy getPerceivedResolution API korzystają teraz z interfejsu RenderViewpoint API ARCore zamiast z 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ą do obliczania postrzeganej rozdzielczości. (I8c967, b/446989745, b/419311998)
  • Usunięto: SpatialUser, ScenePose.HeadScenePose.CameraView. Funkcje tych interfejsów API są objęte interfejsami ArDeviceRenderViewpoint w ARCore dla Jetpack XR. Aby uzyskać ScenePose odpowiadający głowie użytkownika lub jego lewemu lub prawemu oku, programiści 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 liczb całkowitych na podtypy stanu. (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. Zmieniliśmy 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 liczb całkowitych dziedziczą teraz po odpowiednim typie otaczającym. (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 żadnego przecięcia, zamiast HitTestResult z wartością null hitPosition. Pole 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:xr:scenecore:scenecore-spatial-core jako zależności implementacji :xr:scenecore:scenecore (I6ab65, b/447000520)
  • Wyjątek jest zgłaszany, jeśli session.scene jest dostępny po zniszczeniu sesji. (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-alpha07androidx.xr.scenecore:scenecore-testing:1.0.0-alpha07 są zwalniane. Wersja 1.0.0-alpha07 zawiera te zmiany.

Zmiany w interfejsie API

  • Zmiana nazwy fixedAspectRatio na isFixedAspectRatioEnabled i przekształcenie jej we właściwość logiczną (I5c4e8, b/440588971)
  • Scenecore Fałszywe informacje znajdują się teraz w module xr:scenecore:scenecore-testing. (Idd951)
  • Zmieniono nazwę shouldAutoHideContent na isAutoHideContentWhileResizingEnabledshouldAlwaysShowOverlay 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 obiekt, taki jak AnchorEntity, spowoduje zgłoszenie IllegalArgumentException zamiast zwrócenia wartości logicznej „fałsz”. (I62080, b/428721695, b/422215745)
  • Zmienna SpatialModeChangeListener sceny została zastąpiona zmienną setSpatialModeChangedListener. Przyjmuje on wartość Consumer<SpatialModeChangeEvent> zamiast SpatialModeChangedListener. setSpatialModeChangedListener może teraz opcjonalnie przyjmować obiekt Executor. (I62080, b/428721695, b/422215745)
  • Usunięto parametr bundleActivityPanelEntity.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ł prefiks SURFACE_PROTECTION_.
    • SurfaceEntity.SuperSampling.{$values} dodał(a) SUPER_SAMPLING_ prefiks
    • SurfaceEntity.StereoMode.{values} dodał(a) STEREO_MODE_ prefiks
    • SurfaceEntity.ContentColorMetadata.maxCLL zmieniono nazwę maxContentLightLevel (I7eb5f, b/422216050, b/427529950)
  • Nazwa launchActivity została zmieniona na startActivity (I7db90, b/430332856)
  • Kontakt Scene.activitySpaceRoot został usunięty. Użyj w zamian zasady Scene.activitySpace. (I05ee8, b/378706624, b/422215745)
  • configureBundleForFullSpaceModeLaunchconfigureBundleForFullSpaceModeLaunchWithEnvironmentInherited zostały zmienione na createBundleForFullSpaceModeLaunchcreateBundleForFullSpaceModeLaunchWithEnvironmentInherited oraz przeniesione do pliku LaunchUtils.kt jako metody najwyższego poziomu. Jako pierwszy parametr przyjmują Session (I64a2c, b/437186050).
  • Funkcja GroupEntity zwraca teraz typ GroupEntity zamiast 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-alpha06androidx.xr.scenecore:scenecore-testing:1.0.0-alpha06 są zwalniane. Wersja 1.0.0-alpha06 zawiera te zmiany.

Zmiany w interfejsie API

  • Usuń ograniczenia dotyczące interfejsów API SceneCore, BaseEntityBaseScenePose (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-alpha05androidx.xr.scenecore:scenecore:1.0.0-alpha05 są zwalniane. Wersja 1.0.0-alpha05 zawiera te zmiany.

Nowe funkcje

  • Dodano interfejs API Perceived Resolution do jednostek panelu i SurfaceEntities. (I118f6)
  • PerceivedResolution Metody wywołania zwrotnego dodane do pliku Scene.kt w celu monitorowania postrzeganej rozdzielczości głównego panelu aktywności w HSM. (I58084)
  • SurfaceEntity – dodano obsługę aplikacji, która może prosić o supersampling w momencie tworzenia. Umożliwia to aplikacjom używanie filtra nadpróbkowania do wygładzania krawędzi. (I06913)
  • Dodano właściwość recommendedContentBoxInFullSpace do usługi ActivitySpace. W trybie pełnego ekranu zwraca rekomendowane pole, w którym mają się znajdować treści. (I4cd6f)
  • Dodano przeciążony konstruktor modyfikatora przenośnego, który umożliwia zakotwiczenie. (Ic0c70)

Zmiany w interfejsie API

W tej wersji wprowadziliśmy wiele zmian w interfejsie API SceneCore. Zmieniliśmy nazwy kilku klas lub przenieśliśmy je do innych modułów, a większość metod pobierających i ustawiających zastąpiliśmy właściwościami Kotlin. Do czasu pierwszej wersji beta przewidujemy przyszłe zmiany interfejsu API, które mogą spowodować problemy, ale nie będą one tak uciążliwe ani liczne.

  • Zmiana nazwy lub przeniesienie tych klas i interfejsów: 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, ponieważ nie miały być zmieniane przez klientów SceneCore: activitySpace, activitySpaceRoot, mainPanelEntity, perceptionSpace, spatialCapabilities, spatialEnvironmentspatialUser. (I2f506)
  • W sekcji Element 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 właściwość PanelEntity.sizeFloat3dSize na Float2dSize. Usunęliśmy 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 ExrImageGltfModel: zmieniono metody create na funkcje zawieszania; zmodyfikowano parametry tworzenia, aby akceptowały Uri lub Path zamiast String. (Id8883) (I0d247), (I25706)
  • Przeniesiono SpatialEnvironment.requestFullSpaceModeSpatialEnvironment.requestHomeSpaceMode do sceny, np. użyj session.scene.requestFullSpaceMode() zamiast session.scene.spatialEnvironment.requestFullSpaceMode(). addOnPassthroughOpacityChangedListeneraddOnSpatialEnvironmentChangedListener 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 używa się SpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCE, aby zasygnalizować, że nie ma 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 SpatialPointerIconNoneSpatialPointerIconCircle obiektami towarzyszącymi SpatialPointerIcon.NONESpatialPointerIcon.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 w przypadku AnchorEntity tekstem Consumer<AnchorEntity.State>. (I472e0)
  • GltfModelEntity.getAnimationState() jest teraz usługą. (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ść „false”, MoveListener została zmieniona na EntityMoveListener shouldDisposeParentAnchor, EntityMoveListener shouldDisposeParentAnchor została zmieniona na disposeParentOnReAnchor systemMovable, disposeParentOnReAnchor systemMovable została usunięta z funkcji create na rzecz 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 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 klasie Scene na configureBundleForFullSpaceModeLaunch, a metody setFullSpaceModeWithEnvironmentInherited na configureBundleForFullSpaceModeLaunchWithEnvironmentInherited. (I0cbe0) (I0cbe0)
  • Zmiana nazw wartoś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)SpatialVisibility
  • Klasa SpatialVisibility została zastąpiona publicznym obiektem ze stałymi wartościami Int. setSpatialVisibilityChangedListener akceptuje teraz Consumer<Int> zamiast Consumer<SpatialVisibility> (Ie7e8c)
  • PointerCaptureComponent stałych zmieniono nazwy i przeniesiono do obiektu PointerCaptureComponent.PointerCaptureState (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)isHidden() == !isEnabled(). (Icf0de)
  • Typ Entity.contentDescription został zmieniony z ciągu znaków na CharSequence. (Ie59be)
  • Session.createSession.configure zgłaszają teraz SecurityException, gdy nie przyznano wystarczających uprawnień, zamiast zwracać SessionCreatePermissionsNotGranted lub SessionConfigurePermissionsNotGranted. (I7c488)
  • ResizableComponent.create wymaga teraz Consumer<ResizeEvent> ResizeEventListener został zastąpiony przez Consumer<ResizeEvent> ResizableComponent.size został zmieniony na ResizableComponent.affordanceSize ResizableComponent.minimumSize został zmieniony na ResizableComponent.minimumEntitySize ResizableComponent.maximumSize został zmieniony na ResizableComponent.maximumEntitySize, ResizableComponent.autoHideContent został zmieniony na ResizableComponent.shouldAutoHideContent ResizableComponent.forceShowResizeOverlay został zmieniony na 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 poziomem API 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 w wersji 2.0.0 lub nowszej (Idb6b5).
  • Ta biblioteka korzysta teraz z 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ślny argument począwszy od wersji 2.1.0 kompilatora Kotlin) (Ia8420)
  • Wszystkie metody asynchroniczne, które zwracają ListenableFuture, zostały zastąpione funkcjami zawieszania w Kotlinie. Deweloperzy Javy, którzy chcą używać metod asynchronicznych opartych na ListenableFuture zamiast funkcji zawieszających Kotlina, muszą teraz używać funkcji rozszerzeń w :xr:scenecore-scenecore-guava. Na przykład GuavaExrImage zawiera asynchroniczne funkcje ExrImage odpowiadające funkcjom Guavy, GuavaScenePose zawiera asynchroniczne funkcje ScenePose odpowiadające funkcjom Guavy, 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, który mógł powodować awarię, jeśli InteractableComponenthitPositionInputEvent zwracał wartość null (I7a695).hitPosition
  • Nazwy wartości trybu konfiguracji zostały zmienione, aby odzwierciedlały ich działanie. (I6d247)
  • Rozwiązaliśmy problemy z polem widzenia i HitTestSceneCore TestApp. (I2c51e)
  • Naprawiono błąd w funkcji SpatialCapabilities.hasCapability(), która zwracała wartość „prawda”, jeśli którykolwiek z przekazanych argumentów z operatorem bitowym OR miał wartość „prawda”, zamiast zwracać wartość „prawda” tylko wtedy, gdy wszystkie argumenty miały wartość „prawda”. (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.

Publikacja androidx.xr.scenecore:scenecore:1.0.0-alpha04androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04 Wersja 1.0.0-alpha04 zawiera te zmiany.

Nowe funkcje

  • Funkcja obsługi powrotu 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 za pomocą 2 nowych StereoMode wartości: MULTIVIEW_LEFT_PRIMARY i MULTIVIEW_RIGHT_PRIMARY.
  • PanelEntity.setSize i PanelEntity.getSize zwracają teraz rozmiary w przestrzeni nadrzędnej.
  • Entity.setPose, Entity.getPose, Entity.setScale, Entity.getScale, Entity.setAlphaEntity.getAlpha przyjmują teraz nowy parametr relativeTo, który umożliwia pobieranie i ustawianie wartości w różnych przestrzeniach. Obsługiwane wartości to Parent, Activity i Real World spaces, a domyślna wartość tego parametru to Parent.
  • Do SessionExt.kt dodano metody rozszerzenia wywołania zwrotnego widoczności przestrzennej, aby monitorować, kiedy zawartość sceny przesuwa się w obrębie pola widzenia użytkownika lub poza nie.
  • Do elementu SpatialAudioTrack dodano element setPointSourceParams, 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 poziomem API 34 lub wyższym. (Iae0f8)
  • Projekty wydane w Kotlinie 2.0 wymagają użycia KGP w wersji 2.0.0 lub nowszej (Idb6b5).
  • Zajęcia PermissionHelper zostały usunięte.
  • Interfejs PanelEntity.getPixelDensity został wycofany.
  • PanelEntity.setPixelDimensionsPanelEntity.getPixelDimension zostaną usunięte i zastąpione przez setSizeInPixelsgetSizeInPixels.
  • 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.setSizeEntity.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ł zmodyfikowany z dostępu publicznego na dostęp wewnętrzny.
  • AnchorEntity.create wymaga teraz skonfigurowania PlaneTrackingModeSession.configure().
  • Interfejsy API SpatialUser wymagają teraz skonfigurowania parametru HeadTrackingMode w usłudze Session.configure().
  • Jeśli nie jest dołączony, zamiast logu na poziomie ERROR będzie generowany log na poziomie INFO.ResizableComponent
  • 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 PanelEntityMovableComponentAnchorPlacement.
  • Rozwiązaliśmy problem, który powodował, że interfejs ResizableComponent przekazywał nieaktualne rozmiary w wywołaniu zwrotnym onResizeStart.
  • Usunięto błąd powodujący awarię, gdy funkcja JxrPlatformAdapterAxr's dispose() była wywoływana wielokrotnie.

Wersja 1.0.0-alpha03

26 lutego 2025 r.

Publikacja androidx.xr.scenecore:scenecore:1.0.0-alpha03androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03 Wersja 1.0.0-alpha03 zawiera te zmiany.

Nowe funkcje

  • Obsługa minifikacji Proguard w przypadku kodu Jetpack XR

Poprawki błędów

  • Dodatkowe poprawki obsługi minimalizacji 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.

Publikacja androidx.xr.scenecore:scenecore:1.0.0-alpha02androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02 Wersja 1.0.0-alpha02 zawiera te zmiany.

Nadchodząca zmiana powodująca niezgodność wsteczną, która wpłynie 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 odpowiedniego 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 ona zastąpiona przez getSpatialCapabilities().hasCapability(), która jest bardziej odseparowanym sposobem 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()
  • Session.setFullSpaceMode(Bundle) i Session.setFullSpaceModeWithEnvironmentInherited(Bundle) zostały przeniesione do funkcji rozszerzeń. Aby uzyskać dostęp, do plików dewelopera trzeba będzie dodać nowe instrukcje importu:
    • 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, aby uzyskać dostęp:
    • import androidx.xr.scenecore.setPreferredAspectRatio
  • Session.getEntitiesOfType(Class<out T>) i Session.getEntityForRtEntity(RtEntity) zostały przeniesione do funkcji rozszerzeń. Aby uzyskać dostęp, do plików dewelopera trzeba będzie dodać nowe instrukcje importu:
    • 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()ActivityPanelEntity.setCornerRadius() mogą zacząć działać 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 ActivitySpace, niektóre ActivityPose mogą nie zostać prawidłowo zaktualizowane. Zostanie ona zaktualizowana podczas następnej rozmowy OnSpaceUpdated, która odbędzie się ActivitySpace.

Zmiany w zachowaniu i łamanie zasad

  • PanelEntityActivityPanelEntity 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

  • Wprowadza element StereoSurface.CanvasShape, który umożliwia tworzenie obszarów SphericalHemispherical 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 rysowania, ustawiając wartość CanvasShape.
  • StereoSurfaceEntity ma CanvasShape członka, którego 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ę SDK w czasie kompilacji do 24. Wszystkie interfejsy Jetpack XR API nadal wymagają interfejsu 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 podjęciem próby utworzenia kotwic. Jeśli użytkownik nie przyzna tego uprawnienia, utworzenie kotwicy się nie powiedzie.

Poprawki błędów

  • getActivitySpacePose() zostało poprawione, aby uwzględniać skalę ActivitySpace przez zwracanie wartości translacji 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 przekazana wartość null skyboxa, będzie on ustawiany na całkowicie czarny. Aby przywrócić domyślne ustawienia systemu dotyczące skyboxa 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 pakietu Jetpack SceneCore dla programistów, czyli biblioteki grafu scen 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 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 modele 3D w scenie, animuj je i wchodź z nimi w interakcję. SceneCore obsługuje format pliku glTF, co ułatwia integrację z istniejącymi 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 przyłączać 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 dopasować treści do jego pozycji.
  • SpatialCapabilities: twórz w pełni adaptacyjne aplikacje, które wykorzystują dostępne funkcje przestrzenne, takie jak pozycjonowanie treści interfejsu w 3D. Aplikacja może też 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 używa urządzenia z Androidem XR.

Znane problemy

  • Obecnie do korzystania z Jetpack SceneCore wymagana jest minimalna wersja pakietu SDK 30. Aby obejść ten problem, dodaj ten wpis do 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 odtwarzają aktywność, np. podczas zmiany rozmiaru panelu głównego, podłączania urządzeń peryferyjnych czy przełączania się 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 innym niż urządzenie z Androidem XR, otrzymasz wyjątek RuntimeException.
  • Ustawienie skyboxa na wartość null za pomocą funkcji `SpatialEnvironment.setSpatialEnvironmentPreference()` nie powoduje, że skybox jest całkowicie czarny, 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 com.google.guava:guava-31.1-androidcom.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 rozwiązać ten problem, wyłącz ProGuard. Więcej informacji o włączaniu ProGuarda znajdziesz w tym przewodniku.