Jetpack SceneCore

יצירה של גרף סצנה ב-Android XR ושינוי שלו באמצעות תוכן תלת-ממדי.
העדכון האחרון גרסה יציבה גרסה מועמדת להפצה גרסת בטא גרסת אלפא
‫19 בנובמבר 2025 - - - ‎1.0.0-alpha09

הצהרה על יחסי תלות

כדי להוסיף תלות ב-XR SceneCore, צריך להוסיף את מאגר Google Maven לפרויקט. מידע נוסף זמין במאמר בנושא מאגר Maven של Google.

מוסיפים את יחסי התלות של הארטיפקטים שאתם צריכים בקובץ build.gradle של האפליקציה או המודול:

Groovy

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

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

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

Kotlin

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

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

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

מידע נוסף על יחסי תלות זמין במאמר הוספת יחסי תלות ב-build.

משוב

המשוב שלכם עוזר לנו לשפר את Jetpack. נשמח לשמוע מכם אם תגלו בעיות חדשות או אם יש לכם רעיונות לשיפור הספרייה הזו. לפני שיוצרים ספרייה חדשה, כדאי לעיין בבעיות הקיימות בספרייה הזו. כדי להוסיף את ההצבעה שלכם לבעיה קיימת, לוחצים על לחצן הכוכב.

יצירת בעיה חדשה

מידע נוסף זמין במאמרי העזרה בנושא הכלי למעקב אחר בעיות.

גירסה 1.0

גרסה ‎1.0.0-alpha09

‫19 בנובמבר 2025

androidx.xr.scenecore:scenecore-*:1.0.0-alpha09 משוחרר. גרסה ‎1.0.0-alpha09 מכילה את הקומטים האלה.

תכונות חדשות

  • נוסף API לאחזור ScenePose שמייצג את הקומפוזיציה של תנוחת המקור של מרחב התפיסה ותנוחה ביחס למקור של מרחב התפיסה. (I5b50a)
  • נוספה הפונקציה getGravityAlignedPose. התנוחה שמותאמת לכוח הכבידה מתעלמת מהסיבובים של הטיה וגלגול. (I5ae21)
  • סוגי הקבועים AnchorEntity.State השתנו מ-Ints לסוגי משנה של State. (Ib0c49)
  • הוספנו את getChildren() לממשק Entity. עדכנו את מחזור החיים של MainPanelEntity. (Ia69d6)

שינויים ב-API

  • סוגי הקבועים PointerCaptureComponent.PointerCaptureState השתנו מ-Ints לסוגי משנה של PointerCaptureState. (Ic888a)
  • הערך של Scene.spatialCapabilities הוא עכשיו מסוג Set<SpatialCapability> במקום שדה Int. השם של הקבועים SpatialCapability השתנה. (I9c109)
  • השמות של סוגי הקבועים SurfaceEntity השתנו, והם הוגדרו מחדש כסוגי משנה של SurfaceEntity במקום Ints. (I419ed)
  • השמות של סוגי הקבועים SpatializerConstant השתנו, והם הוגדרו מחדש כסוגי משנה של SpatializerConstant במקום Ints. (Ia0e18)
  • השמות של סוגי הקבועים TextureSampler השתנו, והם הוגדרו מחדש כסוגי משנה של TextureSampler במקום Ints. (I44078)
  • סוגי הקבועים SpatialVisibility השתנו מ-Ints לסוגי משנה של SpatialVisibility. (I70739)
  • השמות של סוגי הקבועים ResizeEvent.ResizeState השתנו, והם הוגדרו מחדש כסוגי משנה של ResizeState במקום Ints. (I384d5)
  • השמות של סוגי הקבועים InputEvent השתנו, והם יורשים עכשיו מהסוג המתאים שכולל אותם במקום מסוג Ints. (I82817)
  • סוגי הקבועים GltfModelEntity.AnimationState השתנו מ-Ints לסוגי משנה של AnimationState. (I24f4e)
  • השמות של סוגי הקבועים AlphaMode השתנו, והם הוגדרו מחדש כסוגי משנה של AlphaMode במקום Ints. (I27b56)
  • הסוגים הקבועים Space השתנו מ-Ints לסוגי משנה של Space. (I9255b)
  • הפונקציות ScenePose.hitTest והפונקציות הקשורות מחזירות עכשיו null אם לא נמצאה חפיפה, במקום HitTestResult עם ערך null של hitPosition. השדה HitTestResult.hitPosition כבר לא יכול להכיל ערך null. (I1400a)
  • ההפניות אל ActivityPose השתנו ל-ScenePose. (I7fe43)

גרסה 1.0.0-alpha08

‫22 באוקטובר 2025

androidx.xr.scenecore:scenecore-*:1.0.0-alpha08 משוחרר. גרסה ‎1.0.0-alpha08 מכילה את הקומטים האלה.

שינויים ב-API

  • שינוי השם של ActivityPanelEntity.moveActivity לtransferActivity (I273c5, b/430332856)

תיקוני באגים

  • :xr:scenecore:scenecore-spatial-rendering ו-:xr:scenecore:scenecore-spatial-core נוספו כתלות בהטמעה של :xr:scenecore:scenecore (I6ab65, ‏ b/447000520)
  • מוצגת חריגה אם מתבצעת גישה אל session.scene אחרי השמדת הסשן. (I77e6f)

גרסה 1.0.0-alpha07

‫24 בספטמבר 2025

הגרסאות androidx.xr.scenecore:scenecore:1.0.0-alpha07, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha07 וגם androidx.xr.scenecore:scenecore-testing:1.0.0-alpha07 יוצאות. גרסה ‎1.0.0-alpha07 מכילה את הקומטים האלה.

שינויים ב-API

  • השם fixedAspectRatio שונה ל-isFixedAspectRatioEnabled והוגדר כמאפיין בוליאני (I5c4e8, ‏ b/440588971)
  • Scenecore Fakes נמצאים עכשיו במודול xr:scenecore:scenecore-testing. (Idd951)
  • שינוי השם של shouldAutoHideContent לisAutoHideContentWhileResizingEnabled ושל shouldAlwaysShowOverlay לisAlwaysShowOverlayEnabled (I97c36, ‏ b/432335421)
  • עדכנו את הקבועים SceneCore TextureSampler כדי לשפר את הקריאות, למשל TextureSampler.MinFilter.LINEAR הוא עכשיו TextureSampler.MIN_FILTER_LINEAR (Ib159c)
  • הפונקציה להגדרת המאפיין setKeyEntity של Scene מוזגה למשתנה keyEntity. הגדרת keyEntity לישות שלא ניתן להעביר כמו AnchorEntity תגרום להחזרת IllegalArgumentException במקום ערך בוליאני false. (I62080, ‏ b/428721695, ‏ b/422215745)
  • המשתנה SpatialModeChangeListener של הסצנה הוחלף ב-setSpatialModeChangedListener. הוא מקבל Consumer<SpatialModeChangeEvent> במקום SpatialModeChangedListener. עכשיו אפשר להשתמש ב-Executor עם setSpatialModeChangedListener. (I62080, ‏ b/428721695, ‏ b/422215745)
  • הוסר הפרמטר bundle מ-ActivityPanelEntity.startActivity (I64344, ‏ b/430332856, ‏ b/430333040)
  • השם של SpatializerConstants.SOURCE_TYPE_BYPASS שונה ל-SpatializerConstants.SOURCE_TYPE_DEFAULT. (Ifc7fe, b/422215565)
  • נוסף קבוע SpatialSoundPool.PLAY_FAILED. (Ifc7fe, b/422215565)
  • הוספנו ארגומנטים שמוגדרים כברירת מחדל לשיטות SpatialSoundPool.play. (Ifc7fe, b/422215565)
  • הוסר ערך ההחזרה של פונקציות setter ב-SpatialAudioTrackBuilder. (Ifc7fe, b/422215565)
  • שינויים ב-SurfaceEntity
    • השם של SurfaceEntity.CanvasShape שונה לShape
    • השם של SurfaceEntity.CanvasShape.Vr180Hemisphere שונה לHemisphere
    • השם של SurfaceEntity.CanvasShape.Vr360Sphere שונה לSphere
    • השם של SurfaceEntity.EdgeFeatheringParams.SmoothFeather שונה לRectangleFeather
    • השם של SurfaceEntity.EdgeFeathingParams.SolidEdge שונה לNoFeathering
    • השם של SurfaceEntity.ContentSecurityLevel שונה לSurfaceProtection
    • SurfaceEntity.ContentSecurityLevel.{values} הוסיף/ה קידומת SURFACE_PROTECTION_.
    • SurfaceEntity.SuperSampling.{$values} הוסיף/ה את הקידומת SUPER_SAMPLING_
    • SurfaceEntity.StereoMode.{values} הוסיף/ה את הקידומת STEREO_MODE_
    • השם של SurfaceEntity.ContentColorMetadata.maxCLL השתנה ל-maxContentLightLevel (I7eb5f, ‏ b/422216050, ‏ b/427529950)
  • השם של launchActivity שונה ל-startActivity (I7db90, b/430332856)
  • בוצעה הסרה של Scene.activitySpaceRoot. במקום זאת, אתם צריכים להשתמש ב-Scene.activitySpace. (I05ee8, ‏ b/378706624, ‏ b/422215745)
  • configureBundleForFullSpaceModeLaunch ו-configureBundleForFullSpaceModeLaunchWithEnvironmentInherited שונו לשמות createBundleForFullSpaceModeLaunch ו-createBundleForFullSpaceModeLaunchWithEnvironmentInherited בהתאמה, והועברו לקובץ LaunchUtils.kt כשיטות ברמה העליונה. הפרמטר הראשון שלהן הוא Session ‏ (I64a2c, ‏ b/437186050)
  • הפונקציה GroupEntity factory מחזירה עכשיו את הסוג GroupEntity במקום Entity. (I66042)

תיקוני באגים

  • הפעלת IllegalStateException כשמשתמשים במופע של ישות אחרי סילוק. (I90990, ‏ b/427314036, ‏ b/432063442)

גרסה ‎1.0.0-alpha06

‫13 באוגוסט 2025

הגרסאות androidx.xr.scenecore:scenecore:1.0.0-alpha06, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha06 וגם androidx.xr.scenecore:scenecore-testing:1.0.0-alpha06 יוצאות. גרסה ‎1.0.0-alpha06 מכילה את הקומטים האלה.

שינויים ב-API

  • הסרת ההגבלה על ממשקי ה-API של SceneCore (BaseEntity) ו-BaseScenePose (88c0ff6)

גרסה 1.0.0-alpha05

‫30 ביולי 2025

הגרסאות androidx.xr.scenecore:scenecore-guava:1.0.0-alpha05, androidx.xr.scenecore:scenecore-testing:1.0.0-alpha05 וגם androidx.xr.scenecore:scenecore:1.0.0-alpha05 יוצאות. גרסה ‎1.0.0-alpha05 מכילה את הקומטים האלה.

תכונות חדשות

  • הוספנו את Perceived Resolution API ל-Panel Entities ול-SurfaceEntities. (I118f6)
  • PerceivedResolution נוספו שיטות של קריאה חוזרת (callback) ל-Scene.kt כדי לעקוב אחרי הרזולוציה הנתפסת של החלונית הראשית של הפעילות ב-HSM. (I58084)
  • SurfaceEntity – נוספה תמיכה באפליקציה כדי לבקש דגימת יתר בזמן היצירה. ההרשאה הזו מאפשרת לאפליקציות להשתמש במסנן דגימת-על להחלקת קצוות. (I06913)
  • נוספה מאפיין recommendedContentBoxInFullSpace אל ActivitySpace. במצב מסך מלא, הוא מחזיר תיבה מומלצת למיקום התוכן. (I4cd6f)
  • נוסף constructor עמוס מדי עבור modifier שניתן להזזה, שמאפשר הצמדה. (Ic0c70)

שינויים ב-API

בוצעו שינויים נרחבים ב-API של SceneCore בגרסה הזו. השם של כמה מחלקות השתנה או שהן הועברו למודולים אחרים, ורוב שיטות ה-getter/setter הוחלפו במאפייני Kotlin. אנחנו צופים שיהיו עוד שינויים משמעותיים ב-API עד לגרסת הבטא הראשונה שלנו, אבל הם לא יהיו משמעותיים או רבים כמו השינויים האלה.

  • שינינו את השם של הכיתות והממשקים הבאים או העברנו אותם: androidx.xr.scenecore.PixelDimensions אל androidx.xr.runtime.math.IntSize2d; androidx.xr.scenecore.Dimensions אל androidx.xr.runtime.math.FloatSize3d; androidx.xr.scenecore.ActivityPose אל ScenePose, androidx.xr.scenecore.ContentlessEntity אל GroupEntity, androidx.xr.scenecore.PlaneType אל PlaneOrientation; androidx.xr.scenecore.PlaneSemantic אל PlaneSemanticType. (Ifd405)(I3b622) (If534d)
  • מספר פונקציות setter של המאפיינים של Scene הוגדרו כפרטיות. לא הייתה כוונה שהן ישונו על ידי לקוחות של SceneCore: ‏ activitySpace,‏ activitySpaceRoot,‏ mainPanelEntity,‏ perceptionSpace,‏ spatialCapabilities,‏ spatialEnvironment ו-spatialUser. (I2f506)
  • ב-Entity: המאפיינים הבאים השתנו: get/setParent(), setContentDescription; המאפיין Entity.is/setHidden() הוצא משימוש, צריך להשתמש במאפיין Entity.is/setEnabled במקומו. (Ibc4c6)
  • הוסר המחלקה androidx.xr.scenecore.BasePanelEntity. במקומה צריך להשתמש ישירות ב-PanelEntity. הוחלפו פונקציות getter ו-setter של PanelEntity במאפיינים. הנכס PanelEntity.size השתנה מ-Float3dSize ל-Float2dSize. הוסרה השיטה androidx.xr.scenecore.PanelEntity.getPixelDimensions שהוצאה משימוש. במקומה צריך להשתמש ב-getSizeInPixels. (Icc174)
  • הטקסט androidx.xr.scenecore.OnSpaceUpdatedListener הוחלף בטקסט Runnable. (I19308)
  • החלפנו את SpatialUser.getCameraViews() בנכס. ‫(Ib0cc5) ב-ExrImage וב-GltfModel:, שינינו את שיטות create כך שיהיו פונקציות השעיה. שינינו את פרמטרי היצירה כך שיקבלו Uri או Path במקום String. ‪(Id8883) (I0d247), (I25706)
  • העברנו את SpatialEnvironment.requestFullSpaceMode ואת SpatialEnvironment.requestHomeSpaceMode אל Scene. לדוגמה, אפשר להשתמש ב-session.scene.requestFullSpaceMode() במקום ב-session.scene.spatialEnvironment.requestFullSpaceMode(). ל-addOnPassthroughOpacityChangedListener ול-addOnSpatialEnvironmentChangedListener יש עכשיו שינויים שמאפשרים שימוש ב-Executors אופציונליים. ‫(I12fe0) (I6b21e)
  • הוסרו ה-methods הבאות שהוצאו משימוש SpatialEnvironment: ‏togglePassthrough, ‏setPassthrough, ‏setPassthroughOpacity, ‏getPassthroughMode, ‏getPassthroughOpacity, ‏setSkybox ו-setGeometry. בנוסף, הוסר סיווג שיצא משימוש SpatialEnvironment.PassthroughMode (I927bd) (I927bd) (I927bd)
  • החלפנו את הפונקציות הבאות מסוג getter ו-setter במאפייני Kotlin: ‏ getCurrentPassthroughOpacity(), ‏ get/setPassthroughOpacityPreference(), ‏ get/setSpatialEnvironmentPreference(), ‏ isSpatialEnvironmentPreferenceActive() (I33a7b) (Ie06e2) (Ie06e2)SpatialEnvironment
  • הסוג של SpatialEnvironmentPreference.preferredPassthroughOpacity השתנה מ-Float? ל-Float. הוא כבר לא מקבל ערכים ריקים (null). במקום זאת, נעשה שימוש ב-SpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCE כדי לציין שאין העדפה לגבי אטימות. (I40107)
  • הפרמטר windowBoundsPx עודכן ל-pixelDimensions והסוג שלו עודכן מ-Rect ל-IntSize2d בשיטת היצירה. (I1926e)
  • היצרן SpatialEnvironment הוא עכשיו פנימי (I75a51)
  • הוחלפו המחלקות SpatialPointerIconNone ו-SpatialPointerIconCircle באובייקטים נלווים SpatialPointerIcon.NONE ו-SpatialPointerIcon.CIRCLE (I416d2)
  • השדה SpatialPointerIcon בטבלה SpatialPointerComponent כבר לא יכול להיות ריק. כדי לציין שצריך להשתמש בסמל ברירת המחדל של המערכת לציון מיקום הסמן, צריך להשתמש ב-SpatialPointerIcon.DEFAULT במקום ב-null. (I416d2)
  • המאפיין androidx.xr.scenecore.AnchorEntity.getState() הוחלף במאפיין לקריאה בלבד. השמות של הפרמטרים בשיטה AnchorEntity.create() שונו כדי שיהיו ברורים יותר. בשיטות של AnchorEntity להגדרת מאזינים ולהוספת מאזינים, המאזין הועבר לארגומנט האחרון כדי להפעיל למבדות נגררות. הטקסט androidx.xr.scenecore.OnStateChangedListener הוחלף בטקסט Consumer<AnchorEntity.State> עבור AnchorEntity. (I472e0)
  • GltfModelEntity.getAnimationState() הוא עכשיו נכס. (I10b29)
  • החלפנו את ActivitySpace.getBounds() בנכס. השם של ActivitySpace.addBoundsChangedListener שונה ל-ActivitySpace.addOnBoundsChangedListener. הוחלף ActivitySpace.setOnSpaceUpdatedListener בשיטות להוספה או להסרה. (I4c956)
  • השם של AnchorPlacement: planeTypeFilter שונה לanchorablePlaneOrientations, השם של planeSemanticFilter שונה לanchorablePlaneSemanticTypes. הוספה של MovableComponent ל-AnchorEntity או ל-ActivitySpace תחזיר False, ‏ MoveListener שונה ל-EntityMoveListener shouldDisposeParentAnchor שונה ל-disposeParentOnReAnchor systemMovable הוסר מהפונקציה create לטובת creeateCustomMovable, ‏ createSystemMovable ו-createAnchorable (If11c4)
  • הוסר SurfaceEntity.featherRadiusX/Y והוסף קונספט של כיתה EdgeFeatheringParams. (Ic78fc)
  • השיטה PanelEntity.enablePanelDepthTest() הוחלפה במאפיין panelClippingConfig. מגדירים את Scene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true) כדי להפעיל את בדיקת העומק או מגדירים את PanelClippingConfig(isDepthTestEnabled = false) כדי להשבית אותה. (I0cbe0)
  • הערך של Scene.mainPanelEntity הוא עכשיו MainPanelEntity במקום PanelEntity (I7125a)
  • השם של השיטה setFullSpaceMode של Scene שונה ל-configureBundleForFullSpaceModeLaunch, והשם של השיטה setFullSpaceModeWithEnvironmentInherited שונה ל-configureBundleForFullSpaceModeLaunchWithEnvironmentInherited. ‪(I0cbe0) (I0cbe0)
  • השמות של הערכים UNKNOWN,‏ OUTSIDE_FOV,‏ PARTIALLY_WITHIN_FOV ו-WITHIN_FOV שונו ל-SPATIAL_VISIBILITY_UNKNOWN,‏ SPATIAL_VISIBILITY_OUTSIDE_FIELD_OF_VIEW,‏ SPATIAL_VISIBILITY_PARTIALLY_WITHIN_FIELD_OF_VIEW ו-SPATIAL_VISIBILITY_WITHIN_FIELD_OF_VIEW, בהתאמה (Ie7e8c)SpatialVisibility
  • המחלקות SpatialVisibility הוחלפו באובייקט ציבורי עם ערכי Int קבועים. הפרמטר setSpatialVisibilityChangedListener מקבל עכשיו Consumer<Int> במקום Consumer<SpatialVisibility> (Ie7e8c)
  • הקבועים PointerCaptureComponent שונו והועברו לאובייקט PointerCaptureComponent.PointerCaptureState (I9c7ac)
  • הטקסט PointerCaptureComponents' StateListener הוחלף בטקסט Consumer<Int>. (I9c7ac)
  • הטקסט InputEventListener הוחלף בטקסט Consumer<InputEvent> (I9c7ac)
  • setPreferredAspectRatio עבר מ-Scene class לאובייקט SpatialWindow, והוא מקבל Session כפרמטר הראשון. (I7b717)
  • Entity.setHidden() הוחלף ב-Entity.setEnabled() ו-Entity.isHidden() הוחלף ב-Entity.isEnabled(). ‫setHidden(false) שווה ל-setEnabled(true) ול-isHidden() == !isEnabled(). (Icf0de)
  • הסוג של Entity.contentDescription השתנה מ-String ל-CharSequence. (Ie59be)
  • Session.create ו-Session.configure מחזירים עכשיו SecurityException כשלא ניתנו הרשאות מספיקות, במקום להחזיר SessionCreatePermissionsNotGranted או SessionConfigurePermissionsNotGranted. (I7c488)
  • ResizableComponent.create now requires a Consumer<ResizeEvent> ResizeEventListener was replaced with Consumer<ResizeEvent> ResizableComponent.size was renamed to ResizableComponent.affordanceSize ResizableComponent.minimumSize was renamed to ResizableComponent.minimumEntitySize ResizableComponent.maximumSize was renamed to ResizableComponent.maximumEntitySize, ResizableComponent.autoHideContent was renamed to ResizableComponent.shouldAutoHideContent ResizableComponent.forceShowResizeOverlay was renamed to ResizableComponent.shouldAlwaysShowOverlay (I97a2d)
  • הערך של minSDK ירד ל-24 עבור androidx.xr.scenecore ו-androidx.xr.compose. עדיין נדרש API ברמה 34 בזמן הריצה של חבילות XR. (I17224)
  • הוסרה ההגבלה RequiresApi(34) על כל חבילות Jetpack XR. המגבלה הזו הייתה מיותרת כי Jetpack XR זמין כרגע רק במכשירים עם רמת API‏ 34 ומעלה. (Iae0f8)
  • ארטיפקט SceneCore (xr:scenecore:scenecore) הראשי יכיל רק ממשקי API אסינכרוניים בסגנון Kotlin. מפתחי Java יכולים להסתמך על הספרייה xr:scenecore:scenecore-guava כדי לגשת לממשקי API תואמים. (If221b)
  • כדי להשתמש בפרויקטים שפורסמו עם Kotlin 2.0, צריך KGP 2.0.0 או גרסה חדשה יותר (Idb6b5)
  • הספרייה הזו משתמשת עכשיו בהערות לגבי ערכי null של JSpecify, שהן הערות לשימוש בסוגים. מפתחי Kotlin צריכים להשתמש בארגומנט הבא של הקומפיילר כדי לאכוף שימוש נכון: -Xjspecify-annotations=strict (זוהי ברירת המחדל החל מגרסה 2.1.0 של Kotlin Compiler) (Ia8420)
  • כל השיטות האסינכרוניות שמחזירות ListenableFuture הוחלפו בפונקציות השהיה של Kotlin. מפתחי Java שרוצים להשתמש בשיטות אסינכרוניות שמבוססות על ListenableFuture במקום בפונקציות השהיה של Kotlin, צריכים עכשיו להשתמש בפונקציות הרחבה ב-:xr:scenecore-scenecore-guava. לדוגמה, GuavaExrImage מכיל את הפונקציות האסינכרוניות ExrImage ששקולות ל-Guava,‏ GuavaScenePose מכיל את הפונקציות האסינכרוניות ScenePose ששקולות ל-Guava,‏ GuavaGltfModel מכיל את הפונקציות האסינכרוניות Guava-equivalent GltfModel וכו'. (If7283) (I0af60) (If7283) (Ia8515) (I4efdf) (I54bbf) (I3467a) (I82a33)

תיקוני באגים

  • עדכון של כלל Jetpack XR Scenecore ProGuard כדי למנוע AbstractMethodError עבור לקוחות שעברו מיניפיקציה. (I91a01)
  • תיקונים נוספים לתמיכה בהקטנת קובץ Proguard עבור Jetpack XR SceneCore (I4f47e)
  • תוקן באג שבו InteractableComponent עלול לגרום לקריסה אם hitPosition ב-HitInfo של InputEvent עלול לגרום לקריסה אם hitPosition שהוחזר מהמערכת היה null‏ (I7a695)
  • השמות של ערכי המצב של ההגדרה שונו כדי לשקף את ההתנהגות שלהם. (I6d247)
  • תוקנו בעיות שקשורות לשדה הראייה ול-HitTest ב-SceneCore TestApp. (I2c51e)
  • תוקן באג ב-SpatialCapabilities.hasCapability() שגרם להחזרת הערך true אם אחת מהיכולות שהועברו עם OR ברמת הביט הייתה true, במקום להחזיר את הערך true רק אם כולן היו true. (I2cd40)
  • SurfaceEntity.StereoMode.TOP_BOTTOM עודכן כך שהמפה העליונה מוצגת לעין שמאל והמפה התחתונה מוצגת לעין ימין. (I4ae68)

גרסה ‎1.0.0-alpha04

‫7 במאי 2025

הגרסאות androidx.xr.scenecore:scenecore:1.0.0-alpha04 ו-androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04 יוצאות לאור. גרסה ‎1.0.0-alpha04 מכילה את הקומטים האלה.

תכונות חדשות

  • מעכשיו, טיפול בהחזרה יפעל בישויות של חלוניות ללא פעילויות מוטמעות. כדי שהטיפול בפעולת החזרה יפעל, צריך לציין android:enableOnBackInvokedCallback= "true" במניפסט של Android.
  • StereoSurfaceEntity תומך עכשיו בהפעלה של MV-HEVC באמצעות שני ערכים חדשים של StereoMode: MULTIVIEW_LEFT_PRIMARY ו-MULTIVIEW_RIGHT_PRIMARY.
  • הפונקציות PanelEntity.setSize ו-PanelEntity.getSize מחזירות עכשיו גדלים במרחב ההורה.
  • הפונקציות Entity.setPose,‏ Entity.getPose,‏ Entity.setScale,‏ Entity.getScale,‏ Entity.setAlpha ו-Entity.getAlpha מקבלות עכשיו פרמטר חדש, relativeTo, שמאפשר לקבל או להגדיר ערכים ביחס למרחבים שונים. הערכים הנתמכים הם Parent, ‏ Activity ו-Real World spaces, וערך ברירת המחדל של הפרמטר הזה הוא Parent.
  • נוספו שיטות הרחבה של קריאה חוזרת (callback) לזיהוי מרחבי ל-SessionExt.kt כדי לעקוב אחרי תנועת התוכן בסצנה בתוך שדה הראייה של המשתמש או מחוצה לו.
  • התוסף setPointSourceParams נוסף ל-SpatialAudioTrack, כך שאפשר לעדכן את הפרמטרים אחרי שהמסלול נוצר.
  • נוספה מחלקה חדשה, Scene, עם הפניות לממשקי Scenecore API. הסצנה תהיה נגישה כמאפיין הרחבה של הסשן. הפונקציות בתוך SessionExt הועברו ל-Scene, ולכן צריך לשנות את הייבוא. לדוגמה, SessionExt.getScene(session).addSpatialCapababilitiesChangedListener לעומת SessionExt.addSpatialCapabilitiesChangedListener.
  • ActivityPose.hitTestAsync נוסף, ומאפשר hitTest נגד תוכן וירטואלי.
  • נוסף סוג רכיב חדש SpatialPointerComponent, שמאפשר ללקוחות לציין את הסמל שמוצג עבור מצביע העכבר או להשבית את הסמל. כרגע אפשר לצרף את הרכיב הזה רק למופעים של PanelEntity.
  • השקנו מפעל חדש PanelEntity שמקבל מידות של לוחות במטרים או בפיקסלים. הוסרה חלונית ישנה של PanelEntity מפעל שמקבלת שני פרמטרים מסוג Dimension.

שינויים ב-API

  • הוסרה ההגבלה RequiresApi(34) על כל חבילות Jetpack XR. המגבלה הזו הייתה מיותרת כי Jetpack XR זמין כרגע רק במכשירים עם רמת API‏ 34 ומעלה. (Iae0f8)
  • כדי להשתמש בפרויקטים שפורסמו עם Kotlin 2.0, צריך KGP 2.0.0 או גרסה חדשה יותר (Idb6b5)
  • הכיתה PermissionHelper הוסרה.
  • האפשרות PanelEntity.getPixelDensity הוצאה משימוש.
  • השדות PanelEntity.setPixelDimensions ו-PanelEntity.getPixelDimension הוסרו והוחלפו בשדות setSizeInPixels ו-getSizeInPixels.
  • האפשרות Entity.getActivitySpaceAlpha הוסרה. אפשר להחליף אותו ב-Entity.getAlpha(Space.Activity).
  • האפשרות Entity.getWorldSpaceScale הוסרה. אפשר להחליף אותו ב-Entity.getScale(Space.REAL\_WORLD).
  • הכיתה Session ב-SceneCore נמחקה לטובת Session ב-XR Runtime.
  • השם של StereoSurfaceEntity שונה ל-SurfaceEntity.
  • הוסרו Entity.setSize ו-Entity.getSize, ואותן שיטות נוספו אל PanelEntity.
  • השם של PointSourceAttributes שונה ל-PointSourceParams.
  • השם של SpatializerConstants.SOURCE\_TYPE\_BYPASS שונה ל-SpatializerConstants.SOURCE\_TYPE\_DEFAULT.
  • הגישה לישות PointSourceParams שונתה מגישה ציבורית לגישה פנימית.
  • מעכשיו, כדי להשתמש ב-AnchorEntity.create צריך להגדיר את PlaneTrackingMode ב-Session.configure().
  • עכשיו צריך להגדיר את HeadTrackingMode ב-Session.configure() כדי להשתמש בממשקי ה-API של SpatialUser.
  • אם ResizableComponent לא מצורף, יומן ברמת INFO יוצג במקום יומן ברמת ERROR.
  • מחלקת ה-FOV היא עכשיו מחלקת Kotlin רגילה.
  • מפצלים את Entity.kt כדי להציב כל סוג ישות קונקרטי בקובץ משלו.
  • כשיוצרים PanelEntity חדש, רוב התצוגות המפורטות משויכות מחדש לFrameLayout. כך קל יותר להשתמש ב-LayoutInspector עם חלוניות מרחביות.
  • מופע XrExtensions שבו נעשה שימוש כרגע רשום עכשיו בפלטפורמה, בדרך הטובה ביותר, כדי לעזור בניפוי באגים באפליקציה.

תיקוני באגים

  • נוסף תיקון כדי למנוע קריסה שיכולה לקרות כשמעבירים PanelEntity עם MovableComponent וAnchorPlacement
  • תוקנה בעיה שבה ResizableComponent סיפק גדלים לא עדכניים בקריאה החוזרת (callback) של onResizeStart.
  • תוקנה קריסה שקרתה כשבוצעה קריאה ל-JxrPlatformAdapterAxr של dispose() מספר פעמים.

גרסה 1.0.0-alpha03

‫26 בפברואר 2025

הגרסאות androidx.xr.scenecore:scenecore:1.0.0-alpha03 ו-androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03 יוצאות לאור. גרסה ‎1.0.0-alpha03 מכילה את הקומטים האלה.

תכונות חדשות

  • יש עכשיו תמיכה ב-Proguard minification לקוד Jetpack XR

תיקוני באגים

  • תיקונים נוספים לתמיכה בהקטנת קובץ Proguard עבור Jetpack XR SceneCore ‏ (I4f47e)
  • עדכון של כלל Jetpack XR Scenecore ProGuard כדי למנוע AbstractMethodError עבור לקוחות שעברו מיניפיקציה. (I91a01)

גרסה 1.0.0-alpha02

‫12 בפברואר 2025

הגרסאות androidx.xr.scenecore:scenecore:1.0.0-alpha02 ו-androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02 יוצאות לאור. גרסה ‎1.0.0-alpha02 מכילה את הקומטים האלה.

שינוי משמעותי שצפוי להשפיע על אפליקציות שפותחו לפני גרסה 1.0.0-alpha02

  • המתודות ליצירת אובייקטים הועברו מהמחלקה Session למתודת עזר בכל סוג:
    • השדה Session.createActivityPanelEntity(Dimensions, String, Activity, Pose) נמחק והוחלף בשדה ActivityPanelEntity.create(Session, Dimensions, String, Pose)
    • השדה Session.createAnchorEntity(Anchor) נמחק והוחלף בשדה AnchorEntity.create(Session, Anchor)
    • השדה Session.createAnchorEntity(Dimensions, Int, Int, Duration) נמחק והוחלף בשדה AnchorEntity.create(Session, Dimensions, Int, Int, Duration)
    • השדה Session.createEntity(String, Pose) נמחק והוחלף בשדה ContentlessEntity.create(Session, String, Pose)
    • השדה Session.createExrImageResource(String) נמחק והוחלף בשדה ExrImage.create(Session, String)
    • השדה Session.createGltfEntity(GltfModel, Pose) נמחק והוחלף בשדה GltfModelEntity.create(Session, GltfModel, Pose)
    • השדה Session.createGltfModelResource(String) נמחק והוחלף בשדה GltfModel.create(Session, String)
    • השדה Session.createInteractableComponent(Executor, InputEventListener) נמחק והוחלף בשדה InteractableComponent.create(Session, Executor, InputEventListener)
    • השדה Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean) נמחק והוחלף בשדה MovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)
    • השדה Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose) נמחק והוחלף בשדה PanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)
    • השדה Session.createResizableComponent(Dimensions, Dimensions) נמחק והוחלף בשדה ResizableComponent.create(Session, Dimensions, Dimensions)
    • השדה Session.createStereoSurfaceEntity(Int, Dimensions, Pose) נמחק והוחלף בשדה StereoSurface.create(Session, Int, Dimensions, Pose)
  • השיטות הבאות שהוצאו משימוש הוסרו:
    • Session.canEmbedActivityPanel(Activity) נמחק. במקום זאת, אתם צריכים להשתמש ב-getSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY).
    • Session.hasSpatialCapability(Int) נמחק. היא הוחלפה בשימוש ב-getSpatialCapabilities().hasCapability() כדרך מופרדת יותר לבדיקת נוכחות של יכולות מרחביות, כי getSpatialCapabilities() מחזירה אובייקט SpatialCapabilities.
    • השדה Session.requestFullSpaceMode() נמחק והוחלף בשדה SpatialEnvironment.requestFullSpaceMode()
    • השדה Session.requestHomeSpaceMode() נמחק והוחלף בשדה SpatialEnvironment.requestHomeSpaceMode()
  • הפונקציות Session.setFullSpaceMode(Bundle) ו-Session.setFullSpaceModeWithEnvironmentInherited(Bundle) הועברו לפונקציות של תוספים. המפתחים יצטרכו להוסיף את ההצהרות החדשות על ייבוא כדי לקבל גישה:
    • import androidx.xr.scenecore.setFullSpaceMode
    • import androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
  • הפונקציה Session.setPreferredAspectRatio(Activity, Float) הועברה לפונקציית הרחבה. כדי לקבל גישה, המפתחים יצטרכו להוסיף את הייבוא החדש לקבצים שלהם:
    • import androidx.xr.scenecore.setPreferredAspectRatio
  • הפונקציות Session.getEntitiesOfType(Class<out T>) ו-Session.getEntityForRtEntity(RtEntity) הועברו לפונקציות של תוספים. המפתחים יצטרכו להוסיף את ההצהרות החדשות על ייבוא כדי לקבל גישה:
    • import androidx.xr.scenecore.getEntitiesOfType
    • import androidx.xr.scenecore.getEntityForRtEntity
  • המרחב המשותף "Session.unpersistAnchor(Anchor)" נמחק
  • המרחב המשותף "Session.createPersistedAnchorEntity(UUID)" נמחק

בעיות מוכרות

  • יכול להיות שהשינויים ב-PanelEntity.setCornerRadius() וב-ActivityPanelEntity.setCornerRadius() ייכנסו לתוקף רק אחרי שתזיזו את החלונית. כדי לפתור את הבעיה, אפשר להזיז את החלונית למיקום הנוכחי שלה.
  • כשמתקשרים אל BoundsChanged ב-ActivitySpace, יכול להיות שחלק מה-ActivityPose לא עודכנו בצורה נכונה. הוא יעודכן בשיחה הבאה OnSpaceUpdated בתאריך ActivitySpace

שינויים שעלולים לגרום לכשל ושינויים התנהגותיים

  • לרכיבים PanelEntity ו-ActivityPanelEntity יהיה רדיוס פינות שמוגדר כברירת מחדל של ‎32dp או פחות, אם הרוחב או הגובה של החלונית קטנים מ-‎32dp

ממשקי API ויכולות חדשים

  • השקנו את StereoSurface.CanvasShape, שמאפשר ליצור לוחות Spherical ו-Hemispherical לעיבוד של מדיה סוחפת.
  • הפרמטר StereoSurfaceEntity.create() מקבל עכשיו את הפרמטר CanvasShape. (הפרמטר הזה מתעלם כרגע, אבל ייעשה בו שימוש בגרסה עתידית)
  • הפרמטר StereoSurfaceEntity.create() לא מקבל יותר את הפרמטר Dimensions. האפליקציות צריכות לשלוט בגודל של אזור הציור באמצעות הגדרת CanvasShape
  • StereoSurfaceEntity כולל חבר CanvasShape שאפשר להגדיר באופן דינמי.
  • StereoSurfaceEntity.dimensions הוא עכשיו מאפיין לקריאה בלבד. אפליקציות צריכות להגדיר את CanvasShape כדי לשנות מאפיינים.
  • מעכשיו אפשר לאפס את StereoMode ב-StereoSurfaceEntity אחרי הבנייה.

שינויים אחרים

  • הפחתנו את הערך של minSDK בזמן ההידור ל-24. כל ממשקי Jetpack XR API עדיין דורשים API ברמה 34 בזמן הריצה.
  • הפונקציה Session factory (Session.create) של SceneCore לא מפעילה יותר intent לקבלת ההרשאה SCENE_UNDERSTANDING. במקום זאת, אפליקציית הלקוח צריכה לבקש מהמשתמש את ההרשאות באופן מפורש, לפני שהיא מנסה ליצור את העוגנים. אם המשתמש לא מעניק את ההרשאה, יצירת העוגן תיכשל.

תיקוני באגים

  • הפונקציה getActivitySpacePose() תוקנה כך שתתחשב בסולם ActivitySpace ותחזיר ערכי תרגום במטרים מותאמים ולא תמיד במטרים לא מותאמים. ‫transformPoseTo משתמש עכשיו גם ביחידות הנכונות כדי לחשב שינויים בקואורדינטות כש-ActivitySpace מעורב במקור או ביעד.
  • ה-skybox יוגדר עכשיו ל-skybox שחור לחלוטין בכל פעם שמועברת העדפה של skybox null באמצעות setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom)). כדי לחזור לברירת המחדל של המערכת לגבי תיבת השמיים והגיאומטריה, משתמשים ב-setSpatialEnvironmentPreference(null).

גרסה ‎1.0.0-alpha01

‫12 בדצמבר 2024

androidx.xr.scenecore:scenecore-* 1.0.0-alpha01 משוחרר.

תכונות של הגרסה הראשונית גרסת מפתחים ראשונית של Jetpack SceneCore, ספריית גרפים של סצנות תלת-ממדיות ליצירה ולעריכה של סצנות וסביבות מרתקות. הספרייה הזו מאפשרת לכם למקם ולסדר מודלים תלת-ממדיים ולוחות תוכן ביחס אחד לשני ולסביבות הווירטואליות או הפיזיות שלכם.

  • SpatialEnvironment: יצירת חוויות אימרסיביות מלאות באמצעות תמונת skybox או גיאומטריית מודל תלת-ממד כרקע לסצנת ה-XR של הסביבה. אפשר גם להפעיל את מצב המעבר כדי שהסצנה הווירטואלית תשתלב עם הסביבה האמיתית של המשתמש.
  • PanelEntity: אפשר להוסיף תוכן דו-ממדי לסצנות תלת-ממדיות על ידי הטמעה של פריסות ופעילויות רגילות של Android בחלוניות מרחביות שיכולות לצוף או להיות מעוגנות למשטחים בעולם האמיתי.
  • GltfModelEntity: מאפשר להציב מודלים תלת-ממדיים בסצנה, להנפיש אותם ולבצע איתם אינטראקציה. ‫SceneCore תומך בפורמט הקובץ glTF כדי להקל על השילוב עם מודלים קיימים.
  • SpatialAudio: מוסיפים מקורות אודיו סביבתיים ונקודתיים לסצנה תלת-ממדית כדי ליצור צליל מרחבי סוחף.
  • StereoSurfaceEntity: ‏ SceneCore תומך בהעברת תוכן שמעובד ב-Android Surface לעין ימין או לעין שמאל. אפשר להשתמש בזה כדי להציג תוכן סטריאוסקופי בפורמט של תמונה לצד תמונה או תמונה מעל תמונה, כמו תמונות סטריאו, סרטוני תלת-ממד או ממשקי משתמש אחרים שמוצגים באופן דינמי. אפליקציות צריכות להשתמש ב-MediaPlayer או ב-ExoPlayer לפענוח סרטונים.
  • מערכת רכיבים: SceneCore מציעה מערכת רכיבים חזקה וגמישה להוספת יכולות לתוכן ה-XR שלכם, כולל אפשרויות למשתמשים להזיז מודלים ולוחות, לשנות את הגודל שלהם ולקיים איתם אינטראקציה.
  • הצמדה: כשמפעילים את התכונה 'העברה', אפשר לצרף לוחות ומודלים למשטחים אמיתיים, וכך המשתמשים יכולים לשלב בצורה חלקה תוכן וירטואלי בסביבה שלהם בעולם האמיתי.
  • תנוחת המשתמש: גישה למיקום המשתמש בסצנה הווירטואלית, כדי להתאים את התוכן למיקום המשתמש.
  • SpatialCapabilities: אפשר ליצור אפליקציות שמותאמות באופן מלא ומנצלות את היכולות המרחביות כשהן זמינות, כמו מיקום תלת-ממדי של תוכן ממשק המשתמש. בנוסף, האפליקציה יכולה לעקוב אחרי שינויים ביכולות בזמן שהיא פועלת, כדי לשנות את חוויית השימוש בהתאם לאופן שבו המשתמש משתמש במכשיר Android XR.

בעיות מוכרות

  • נכון לעכשיו, נדרשת גרסת minSDK של 30 כדי להשתמש ב-Jetpack SceneCore. כפתרון עקיף, מוסיפים את רשומת המניפסט הבאה <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> כדי שיהיה אפשר לבנות ולהפעיל עם minSDK בערך 23.
  • סשן יכול להיות לא תקף במצבים שונים שבהם הפעילות נוצרת מחדש באופן אוטומטי, כולל שינוי הגודל של החלונית הראשית, חיבור ציוד היקפי ומעבר בין מצב בהיר למצב כהה. אם נתקלתם בבעיות שקשורות לביטול תוקף של סשנים, יש כמה פתרונות אפשריים: אפשר להגדיר את החלונית הראשית ככזו שלא ניתן לשנות את הגודל שלה, להשתמש בישות של חלונית דינמית, להשבית את יצירת הפעילות מחדש לשינויים ספציפיים בהגדרות או להשבית את השינויים בערכת הנושא של מצב בהיר/כהה.
  • אין תמיכה ברכיבים שאפשר להזיז ולשנות את הגודל שלהם ב-GltfEntity.
  • אין תמיכה ב-Entity.getSize()‎ ב-GltfEntity.
  • אפליקציות Jetpack XR צריכות לבקש הרשאת android.permission.SCENE_UNDERSTANDING ב-AndroidManifest.
  • אפשר ליצור סשן רק במכשיר Android XR. בשלב הזה, אם תיצרו סשן ותנסו להשתמש בו במכשיר שאינו Android XR, תקבלו RuntimeException.
  • הגדרת ה-skybox כ-null באמצעות ‎`SpatialEnvironment.setSpatialEnvironmentPreference()`‎ לא יוצרת skybox שחור מלא כמו שמתואר במסמכים. יכול להיות שהתוצאה תהיה ברירת המחדל של ה-skybox במערכת או שלא יחול שינוי ב-skybox הנוכחי.
  • לקוחות SceneCore צריכים להוסיף את implementation(“com.google.guava:listenablefuture-1.0”) להגדרת Gradle של התלויות של האפליקציה שלהם. בגרסה עתידית, scenecore תכלול את הספרייה הזו כapi תלות, כך שהלקוחות לא יצטרכו להצהיר עליה באופן מפורש.
  • ‫SceneCore כולל בטעות את com.google.guava:guava-31.1-android ואת com.google.protobuf:protobuf-javalite כתלות טרנזיטיבית. אם הפעולה הזו גורמת לשגיאות כפולות בכיתה ב-build, אפשר להחריג את שתי התלויות האלה בבטחה.
  • אם האפליקציה שלכם משתמשת ב-SceneCore ומופעל בה ProGuard, היא תקרוס כשתיצרו Session. כפתרון עקיף, אפשר להשבית את ProGuard. מידע נוסף על הפעלת ProGuard זמין במדריך הזה.