Jetpack SceneCore

Twórz i modyfikuj wykres sceny Androida XR za pomocą treści 3D.
Najnowsza aktualizacja Wersja stabilna Wersja kandydująca do publikacji Wersja Beta Wersja Alfa
24 września 2025 r. - - - 1.0.0-alpha07

Deklarowanie zależności

Aby dodać zależność od XR SceneCore, musisz dodać repozytorium Google Maven do projektu. 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-alpha07"

    // Optional dependencies for asynchronous conversions
    implementation "androidx.xr.scenecore:scenecore-guava:1.0.0-alpha07"

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

Kotlin

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

    // Optional dependencies for asynchronous conversions
    implementation("androidx.xr.scenecore:scenecore-guava:1.0.0-alpha07")

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

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

Opinia

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 nowy problem, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk gwiazdki.

Tworzenie nowego problemu

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

Wersja 1.0

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ą dostępne. 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 isAutoHideContentWhileResizingEnabledshouldAlwaysShowOverlay na isAlwaysShowOverlayEnabled (I97c36, b/432335421)
  • Zaktualizowano stałe SceneCore TextureSampler, aby były bardziej czytelne, np. 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ć wykonawcę. (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)
  • Użytkownik Scene.activitySpaceRoot został usunięty. Zamiast niej używaj 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).
  • GroupEntity factory 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ą dostępne. 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ą dostępne. 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łnoekranowym 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 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 znaczące.

  • 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 przypadku elementu 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.sizeFloat3dSize na Float2dSize. Usunięto wycofaną metodę androidx.xr.scenecore.PanelEntity.getPixelDimensions. Zamiast niej używaj metody getSizeInPixels. (Icc174)
  • Tekst androidx.xr.scenecore.OnSpaceUpdatedListener został zamieniony na Runnable. (I19308)
  • Zastąpiono SpatialUser.getCameraViews() usługą. (Ib0cc5) W przypadku ExrImageGltfModel: zmieniliśmy metody create na funkcje zawieszania; zmodyfikowaliśmy parametry tworzenia, aby akceptowały Uri lub Path zamiast String. (Id8883) (I0d247), (I25706)
  • Przeniesiono SpatialEnvironment.requestFullSpaceModeSpatialEnvironment.requestHomeSpaceMode do sceny, np. użyto 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ć brak preferencji dotyczących krycia. (I40107)
  • Zaktualizowano parametr windowBoundsPx na pixelDimensions, a jego typ z Rect na IntSize2d w metodzie create. (I1926e)
  • SpatialEnvironment konstruktor 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 ustawiania i dodawania odbiorców odbiorca 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 koncepcję zajęć 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 scenie 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 obiektem publicznym 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ł zamieniony na 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 zwracają 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 reklamodawców androidx.xr.scenecoreandroidx.xr.compose. Pakiety XR nadal wymagają interfejsu API 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ą 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. Deweloperzy korzystający z języka Kotlin powinni używać tego argumentu kompilatora, aby wymusić prawidłowe użycie: -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 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 odpowiadające funkcjom Guava, GuavaScenePose zawiera asynchroniczne funkcje ScenePose odpowiadające funkcjom 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, który mógł powodować awarię w przypadku, gdy 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 był prawdziwy (zamiast zwracać wartość „prawda” tylko wtedy, gdy wszystkie argumenty 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.

Publikacje 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 przekazywanie wstecz, musisz określić android:enableOnBackInvokedCallback= "true" w manifeście Androida.
  • StereoSurfaceEntity obsługuje teraz odtwarzanie MV-HEVC dzięki 2 nowym StereoMode wartościom: 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 względem różnych przestrzeni. 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.
  • Element setPointSourceParams został dodany do elementu 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 PanelEntity instancji.
  • Wprowadzamy nowy PanelEntity, który 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ą KGP w wersji 2.0.0 lub nowszej (Idb6b5).
  • Zajęcia PermissionHelper zostały usunięte.
  • Środowisko wykonawcze PanelEntity.getPixelDensity zostało wycofane.
  • PanelEntity.setPixelDimensionsPanelEntity.getPixelDimension zostały usunięte i zastąpione przez setSizeInPixelsgetSizeInPixels.
  • Opcja Entity.getActivitySpaceAlpha została usunięta. Można go zastąpić elementem Entity.getAlpha(Space.Activity).
  • Opcja Entity.getWorldSpaceScale została usunięta. 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.
  • Nazwa StereoSurfaceEntity została zmieniona na SurfaceEntity.
  • Entity.setSizeEntity.getSize zostaną usunięte, a te same metody zostaną dodane do PanelEntity.
  • Nazwa PointSourceAttributes została zmieniona na PointSourceParams.
  • Nazwa SpatializerConstants.SOURCE\_TYPE\_BYPASS została zmieniona na SpatializerConstants.SOURCE\_TYPE\_DEFAULT.
  • PointSourceParams został zmieniony z dostępu publicznego na wewnętrzny.
  • AnchorEntity.create wymaga teraz skonfigurowania PlaneTrackingModeSession.configure().
  • Interfejsy API SpatialUser wymagają teraz skonfigurowania parametru HeadTrackingModeSession.configure().
  • Jeśli nie jest dołączony, zamiast logu na poziomie ERROR zostanie wygenerowany 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 miarę możliwości, 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 funkcja ResizableComponent przekazywała nieaktualne rozmiary w wywołaniu zwrotnym onResizeStart.
  • Rozwiązano problem z awarią, która występowała, gdy funkcja JxrPlatformAdapterAxr's dispose() była wywoływana wielokrotnie.

Wersja 1.0.0-alpha03

26 lutego 2025 r.

Publikacje 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

  • Minimalizacja Proguard jest teraz obsługiwana 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.

Publikacje 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 fabrykujące 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:
    • Pokój Session.canEmbedActivityPanel(Activity) został usunięty. Zamiast niej używaj zasady getSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY).
    • Pokój Session.hasSpatialCapability(Int) został usunięty. Została ona zastąpiona przez getSpatialCapabilities().hasCapability(), która jest bardziej podzielonym 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
  • Pokój Session.unpersistAnchor(Anchor) został usunięty
  • Pokój Session.createPersistedAnchorEntity(UUID) został usunięty

Znane problemy

  • PanelEntity.setCornerRadius()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 na 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 działaniu i zachowaniu

  • 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 StereoSurface.CanvasShape, które 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 roboczego, ustawiając wartość CanvasShape
  • StereoSurfaceEntity ma CanvasShape element, który można ustawić dynamicznie.
  • StereoSurfaceEntity.dimensions jest teraz właściwością tylko do odczytu. Aby zmienić wymiary, aplikacje powinny ustawić CanvasShape.
  • 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 Jetpack XR API nadal wymagają interfejsu API w wersji 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. 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, 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 w źródle lub miejscu docelowym występuje ActivitySpace.
  • Gdy za pomocą 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 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 deweloperska Jetpack SceneCore, 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 w środowiskach wirtualnych lub rzeczywistych.

  • SpatialEnvironment: twórz w pełni immersyjne środowiska z obrazem skybox lub geometrią modelu 3D jako tłem dla sceny XR Twojego środowiska. Możesz też włączyć tryb passthrough, aby wirtualna scena mogła być zintegrowana z otoczeniem użytkownika w świecie rzeczywistym.
  • 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ć przytwierdzone do powierzchni w rzeczywistym świecie.
  • GltfModelEntity: umieszczaj, animuj i wykorzystuj w interakcjach modele 3D w scenie. 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 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ół, takich jak zdjęcia stereo, filmy 3D czy inne dynamicznie renderowane interfejsy. Aplikacje powinny używać odtwarzacza MediaPlayer lub ExoPlayer do dekodowania wideo.
  • 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 dostosować treści do jego pozycji.
  • SpatialCapabilities: twórz w pełni adaptacyjne aplikacje, które wykorzystują funkcje przestrzenne, gdy są dostępne, np. pozycjonowanie treści interfejsu w 3D. Co więcej, aplikacja może monitorować zmiany w funkcjach 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 wymagany jest pakiet SDK w wersji co najmniej 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 uniemożliwienie zmiany rozmiaru panelu głównego, 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ż Android 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 api zależność, 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 duplikatów 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.