{ } { }
Jetpack SceneCore
Ostatnia aktualizacja | Wersja stabilna | Wersja kandydująca do publikacji | Wersja Beta | Wersja alfa |
---|---|---|---|---|
7 maja 2025 r. | - | - | - | 1.0.0-alpha04 |
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 firmy Google.
Dodaj zależności dla artefaktów, których potrzebujesz, w pliku build.gradle
aplikacji lub modułu:
Odlotowe
dependencies { implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha04" // Required for Java implementation "com.google.guava:listenablefuture:1.0" // Required for Kotlin implementation "org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0" // Use to write unit tests testImplementation "androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04" }
Kotlin
dependencies { implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha04") // Required for Java implementation("com.google.guava:listenablefuture:1.0") // Required for Kotlin implementation("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0") // Use to write unit tests testImplementation("androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04") }
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 zauważysz 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 zagłosować na istniejący problem, klikając przycisk z gwiazdką.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 1.0
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
są dostępne. Wersja 1.0.0-alpha04 zawiera te komisy.
Nowe funkcje
- Obsługa z tyły będzie teraz działać w przypadku elementów panelu bez wbudowanych działań. Aby przetwarzanie wsteczne działało, musisz określić
android:enableOnBackInvokedCallback= "true"
w pliku manifestu Androida. StereoSurfaceEntity
obsługuje teraz odtwarzanie MV-HEVC za pomocą 2 nowych wartościStereoMode
: MULTIVIEW_LEFT_PRIMARY i MULTIVIEW_RIGHT_PRIMARY.- Funkcje
PanelEntity.setSize
iPanelEntity.getSize
zwracają teraz rozmiary w przestrzeni nadrzędnej. - Funkcje
Entity.setPose
,Entity.getPose
,Entity.setScale
,Entity.getScale
,Entity.setAlpha
iEntity.getAlpha
przyjmują teraz nowy parametrrelativeTo
, który umożliwia pobieranie i ustawianie wartości w różnych przestrzeniach. Obsługiwane wartości to Parent (Nadrzędny), Activity (Aktywność) i Real World (Świat rzeczywisty), a wartością domyślną tego parametru jest Parent (Nadrzędny). - Do
SessionExt.kt
dodano metody rozszerzenia wywołania zwrotnego dotyczące widoczności przestrzennej, aby monitorować, kiedy zawartość sceny przemieszcza się w polu widzenia użytkownika. - Do pliku
SpatialAudioTrack
dodano pliksetPointSourceParams
, co umożliwia aktualizowanie parametrów po utworzeniu ścieżki. - Dodaliśmy nową klasę Scene z odwołaniami do interfejsów API
Scenecore
. Scena będzie dostępna jako parametr rozszerzenia sesji. Funkcje wSessionExt
zostały przeniesione do sceny, więc importy będą musiały zostać dostosowane, np.SessionExt.getScene(session)
.addSpatialCapababilitiesChangedListener
kontraSessionExt.addSpatialCapabilitiesChangedListener
. - Dodano
ActivityPose.hitTestAsync
, co umożliwiahitTest
w przypadku treści wirtualnych. - Dodano nowy typ komponentu
SpatialPointerComponent
, który umożliwia klientom określenie ikony renderowanej dla wskaźnika lub jej wyłączenie. Ten komponent można obecnie dołączać tylko do instancjiPanelEntity
. - Przedstawiamy nową fabrykę
PanelEntity
, która przyjmuje wymiary paneli w metrach lub pikselach. Usunięto starszyPanelEntity
factory, który przyjmował 2 parametry typu wymiaru w panelu.
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 interfejsu API 34 lub nowszym (Iae0f8). - Projekty opublikowane z Kotlin 2.0 wymagają KGP 2.0.0 lub nowszej wersji (Idb6b5).
- Zajęcia
PermissionHelper
zostały usunięte. - Środowisko wykonawcze
PanelEntity.getPixelDensity
zostało wycofane. - Usługi
PanelEntity.setPixelDimensions
iPanelEntity.getPixelDimension
zostały usunięte i zastąpione usługamisetSizeInPixels
igetSizeInPixels
. - Opcja
Entity.getActivitySpaceAlpha
została usunięta. Może być zastąpiony przezEntity.getAlpha(Space.Activity)
. - Opcja
Entity.getWorldSpaceScale
została usunięta. Może być zastąpiony przezEntity.getScale(Space.REAL\_WORLD)
. - Klasa Session w
SceneCore
została usunięta na rzecz klasy Session w XR Runtime. - Nazwa
StereoSurfaceEntity
została zmieniona naSurfaceEntity
. - Metody
Entity.setSize
iEntity.getSize
zostały usunięte, a te same metody zostały dodane do metodyPanelEntity
. - Nazwa
PointSourceAttributes
została zmieniona naPointSourceParams
. - Nazwa
SpatializerConstants.SOURCE\_TYPE\_BYPASS
została zmieniona naSpatializerConstants.SOURCE\_TYPE\_DEFAULT
. - Element
PointSourceParams
został zmodyfikowany z dostępu publicznego na dostęp wewnętrzny. - Funkcja
AnchorEntity.create
wymaga teraz skonfigurowania elementuPlaneTrackingMode
w sekcjiSession.configure()
. - Interfejsy API
SpatialUser
wymagają teraz skonfigurowaniaHeadTrackingMode
wSession.configure()
. - Jeśli nie dołączysz parametru
ResizableComponent
, zostanie wyświetlony dziennik na poziomie INFO, a nie ERROR. - Klasa Fov jest teraz zwykłą klasą Kotlin.
- Split
Entity.kt
, aby umieścić każdy konkretny typ elementu w osobnym pliku. - Podczas tworzenia nowego widoku
PanelEntity
większość widoków zostanie przeniesiona do widoku nadrzędnegoFrameLayout
. Ułatwia to korzystanie z funkcjiLayoutInspector
w ramach paneli przestrzennych. - Obecnie używana instancja
XrExtensions
jest zarejestrowana na platformie, aby ułatwić debugowanie aplikacji.
Poprawki błędów
- Dodaliśmy poprawkę, która zapobiega awarii, która może wystąpić podczas przenoszenia
PanelEntity
zMovableComponent
iAnchorPlacement
. - Rozwiązaliśmy problem, który powodował, że
ResizableComponent
zwracał nieaktualne rozmiary w wywołaniu zwrotnymonResizeStart
. - Rozwiązano problem z zawieszaniem się aplikacji, który występował, gdy funkcja
JxrPlatformAdapterAxr
była wywoływana wielokrotnie.dispose()
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
są dostępne. Wersja 1.0.0-alpha03 zawiera te komity.
Nowe funkcje
- Obsługa kompresji Proguard dla kodu Jetpack XR
Poprawki błędów
- Dodatkowe poprawki umożliwiające obsługę kompresji Proguarda w przypadku Jetpacka XR SceneCore (I4f47e)
- Zaktualizowano regułę
ProGuard
Jetpack XR Scenecore, aby zapobiecAbstractMethodError
w przypadku zminiaturyzowanych 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
są dostępne. Wersja 1.0.0-alpha02 zawiera te komity.
Nadchodząca zmiana powodująca przerwanie działania aplikacji utworzonych przed wersją 1.0.0-alpha02
- Metody fabryczne zostały przeniesione z klasy
Session
do metod towarzyszących 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)
- Usługa
- Usunęliśmy te wycofane metody:
- Kontakt
Session.canEmbedActivityPanel(Activity)
został usunięty. Zamiast tego użyjgetSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY)
. - Kontakt
Session.hasSpatialCapability(Int)
został usunięty. Został on zastąpiony przezgetSpatialCapabilities().hasCapability()
, ponieważgetSpatialCapabilities()
zwraca obiektSpatialCapabilities
, co umożliwia bardziej uporządkowane sprawdzanie obecności funkcji przestrzennych. - 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()
- Kontakt
- Funkcje
Session.setFullSpaceMode(Bundle)
iSession.setFullSpaceModeWithEnvironmentInherited(Bundle)
zostały przeniesione do funkcji rozszerzeń. Pliki deweloperów muszą zawierać nowe instrukcje importowania:import androidx.xr.scenecore.setFullSpaceMode
import androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
- Funkcja
Session.setPreferredAspectRatio(Activity, Float)
została przeniesiona do funkcji rozszerzenia. Pliki deweloperów muszą zawierać nowy import, aby uzyskać dostęp:import androidx.xr.scenecore.setPreferredAspectRatio
- Funkcje
Session.getEntitiesOfType(Class<out T>)
iSession.getEntityForRtEntity(RtEntity)
zostały przeniesione do funkcji rozszerzeń. Pliki deweloperów muszą zawierać nowe instrukcje importowania: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
- Ustawienia
PanelEntity.setCornerRadius()
iActivityPanelEntity.setCornerRadius()
mogą nie zadziałać, dopóki panel nie zostanie przeniesiony. Można to obejść, przenosząc panel do jego bieżącej pozycji. - Gdy wywoływana jest funkcja
BoundsChanged
w obiekcieActivitySpace
, niektóreActivityPose
mogą nie zostać prawidłowo zaktualizowane. Zostanie on zaktualizowany podczas następnego połączeniaOnSpaceUpdated
naActivitySpace
Zmiany w zakresie zmian w funkcjonalności i zachowaniu
PanelEntity
iActivityPanelEntity
będą mieć domyślny promień zaokrąglenia narożnika równy 32 dp lub mniejszy, jeśli panel ma szerokość lub wysokość mniejszą niż 32 dp.
Nowe interfejsy API i funkcje
- Wprowadza
StereoSurface.CanvasShape
, który umożliwia tworzenieSpherical
iHemispherical
kanw do renderowania immersyjnych multimediów. StereoSurfaceEntity.create()
obsługuje teraz parametrCanvasShape
. (Ten parametr jest obecnie ignorowany, ale będzie używany w przyszłej wersji)- Funkcja
StereoSurfaceEntity.create()
nie przyjmuje już parametruDimensions
. Aplikacje powinny kontrolować rozmiar płótna za pomocą ustawieniaCanvasShape
StereoSurfaceEntity
ma elementCanvasShape
, który może być ustawiany dynamicznie.- Właściwość
StereoSurfaceEntity.dimensions
jest teraz tylko do odczytu. Aplikacje powinny ustawiać wartośćCanvasShape
, aby zmieniać wymiary. StereoSurfaceEntity
umożliwia teraz ponowne ustawienieStereoMode
po zakończeniu tworzenia.
Inne zmiany
- Zmniejszono minimalną wersję Androida na etapie kompilacji do 24. Wszystkie interfejsy Jetpack XR nadal wymagają interfejsu API 34 w czasie wykonywania.
- Fabryka sesji (
Session.create
) usługiSceneCore
nie uruchamia już intencji służącej do uzyskania uprawnieńSCENE_UNDERSTANDING
. Zamiast tego aplikacja klienta musi wyraźnie poprosić użytkownika o przyznanie uprawnień, zanim spróbuje utworzyć kotwicy. Jeśli użytkownik nie przyzna uprawnień, utworzenie kotwicy się nie powiedzie.
Poprawki błędów
- Funkcja
getActivitySpacePose()
została naprawiona, aby uwzględnić skalęActivitySpace
, zwracając wartości przekształcania w skali metrycznej, a nie zawsze w metryce nieskalibrowanej.transformPoseTo
używa teraz odpowiednich jednostek do obliczania zmian współrzędnych, gdyActivitySpace
jest używany w źródle lub docelowym. - Skybox będzie teraz ustawiany jako czarny skybox, gdy zostanie przekazane puste ustawienie skybox za pomocą
setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom))
. Aby przywrócić domyślną geometrię i niebo systemu, użyjsetSpatialEnvironmentPreference(null).
Wersja 1.0.0-alpha01
12 grudnia 2024 r.
Element androidx.xr.scenecore:scenecore-* 1.0.0-alpha01
został zwolniony.
Funkcje wersji początkowej Pierwsza wersja dla deweloperów Jetpack SceneCore, czyli biblioteki grafu sceny 3D do tworzenia i modyfikowania realistycznych scen oraz środowisk. Ta biblioteka umożliwia umieszczanie i ustawianie modeli 3D oraz paneli z treściami względem siebie i otoczenia wirtualnego lub rzeczywistego.
- SpatialEnvironment: twórz wciągające wrażenia za pomocą obrazu nieba lub geometrii modelu 3D jako tła sceny XR środowiska. Możesz też włączyć przepuszczanie, aby Twoja wirtualna scena mogła zostać zintegrowana ze środowiskiem użytkownika.
- PanelEntity: dodawanie treści 2D do scen 3D przez umieszczanie standardowych układów i działań Androida w panelach przestrzennych, które mogą unosić się w powietrzu lub być przytwierdzone do rzeczywistych powierzchni.
- GltfModelEntity: umieszczanie, animowanie i interakcja z modelami 3D w scenie. SceneCore obsługuje format pliku glTF, aby ułatwić integrację z dotychczasowymi modelami.
- SpatialAudio: dodaj źródła dźwięku otoczenia i punktowe do swojej sceny 3D, aby uzyskać w pełni przestrzenny dźwięk.
- StereoSurfaceEntity: SceneCore obsługuje kierowanie treści renderowanych na urządzeniu z Androidem na lewe lub prawe oko. Można go wykorzystać do renderowania treści stereoskopowych w formacie side-by-side (obok siebie) lub top-bottom (u góry i u dołu), takich jak zdjęcia stereoskopowe, filmy 3D czy inne interfejsy renderowane dynamicznie. Aplikacje powinny używać MediaPlayer lub ExoPlayer do dekodowania wideo.
- System komponentów: SceneCore oferuje niezawodny i elastyczny system komponentów, który umożliwia dodawanie funkcji do treści XR, w tym możliwości przenoszenia, zmiany rozmiaru i interakcji z modelami i panelami.
- Przypinanie: po włączeniu funkcji przesyłania danych możesz dołączać panele i modele do rzeczywistych powierzchni, co umożliwia użytkownikom płynne łączenie wirtualnych treści z ich rzeczywistym otoczeniem.
- Pozycja użytkownika: dostęp do lokalizacji użytkownika w wirtualnej scenie, aby ustawić treści w pobliżu jego pozycji.
- SpatialCapabilities: tworzenie w pełni dostosowanych aplikacji, które wykorzystują możliwości przestrzenne, takie jak pozycjonowanie 3D elementów interfejsu. Aplikacja może też monitorować zmiany w możliwościach podczas wykonywania, aby modyfikować działanie w zależności od tego, jak użytkownik korzysta z urządzenia z Androidem XR.
Znane problemy
- Obecnie do korzystania z Jetpack SceneCore wymagana jest minimalna wersja pakietu SDK 30. Aby skompilować i uruchomić aplikację z wartością minSDK 23, jako obejście dodaj do pliku manifestu ten wpis
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>
. - Sesja może stać się nieważna w różnych sytuacjach, które automatycznie odtwarzają Aktywność, w tym zmianę rozmiaru panelu głównego, podłączenie urządzeń peryferyjnych i przełączanie się między trybem jasnym a ciemnym. Jeśli napotkasz problemy z unieważnianiem sesji, możesz je obejść, np. przez ustawienie panelu głównego jako nierozszerzalnego, użycie elementu panelu dynamicznego, wyłączenie odtwarzania aktywności w przypadku określonych zmian konfiguracji lub wyłączenie zmiany motywu jasnego/ciemnego.
- Elementy ruchome i zmiennej wielkości nie są obsługiwane w przypadku obiektu GltfEntity.
- Metoda Entity.getSize() nie jest obsługiwana w przypadku obiektu GltfEntity.
- Aplikacje Jetpack XR muszą poprosić o uprawnienia
android.permission.SCENE_UNDERSTANDING
w pliku AndroidManifest. - Tworzenie sesji jest obsługiwane tylko na urządzeniu z Androidem XR. Jeśli w tej chwili utworzysz sesję i spróbujesz jej użyć na urządzeniu, które nie jest urządzeniem XR z Androidem, pojawi się wyjątek RuntimeException.
- Ustawienie niestandardowej kuli ziemskiej za pomocą funkcji SpatialEnvironment.setSpatialEnvironmentPreference() nie powoduje, jak to zostało udokumentowane, że sfera niebieska jest czarna. Może to spowodować użycie domyślnej sceny nieba lub brak zmian w obecnej scenie nieba.
- Klienci korzystający z SceneCore powinni dodać
implementation(“com.google.guava:listenablefuture-1.0”)
do konfiguracji Gradle dla zależności aplikacji. W przyszłej wersji biblioteka scenecore będzie zawierać tę bibliotekę jako zależnośćapi
, więc klienci nie będą musieli jej deklarować w sposób jawny. - SceneCore błędnie zawiera
com.google.guava:guava-31.1-android
icom.google.protobuf:protobuf-javalite
jako zależności pośrednie. Jeśli powoduje to w Twojej kompilacji zduplikowane błędy klasy, możesz bezpiecznie wykluczyć te 2 zależności. - Jeśli 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 funkcji ProGuard znajdziesz w tym przewodniku.