جت‌پک سین‌کور

ساخت و دستکاری نمودار صحنه اندروید XR با محتوای سه‌بعدی.
آخرین به‌روزرسانی انتشار پایدار کاندیدای انتشار انتشار بتا انتشار آلفا
۲۲ اکتبر ۲۰۲۵ - - - ۱.۰.۰-آلفا۰۸

اعلام وابستگی‌ها

برای افزودن وابستگی به XR SceneCore، باید مخزن Google Maven را به پروژه خود اضافه کنید. برای اطلاعات بیشتر، مخزن Google's Maven را مطالعه کنید.

وابستگی‌های مربوط به مصنوعات مورد نیاز خود را در فایل build.gradle برای برنامه یا ماژول خود اضافه کنید:

شیار

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

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

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

کاتلین

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

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

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

برای اطلاعات بیشتر در مورد وابستگی‌ها، به «افزودن وابستگی‌های ساخت» مراجعه کنید.

بازخورد

بازخورد شما به بهبود Jetpack کمک می‌کند. اگر مشکلات جدیدی کشف کردید یا ایده‌هایی برای بهبود این کتابخانه دارید، به ما اطلاع دهید. لطفاً قبل از ایجاد یک کتابخانه جدید، نگاهی به مشکلات موجود در این کتابخانه بیندازید. می‌توانید با کلیک بر روی دکمه ستاره، رأی خود را به یک مشکل موجود اضافه کنید.

ایجاد یک مسئله جدید

برای اطلاعات بیشتر به مستندات ردیاب مشکل مراجعه کنید.

نسخه ۱.۰

نسخه ۱.۰.۰-آلفا۰۸

۲۲ اکتبر ۲۰۲۵

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 )

نسخه ۱.۰.۰-آلفا۰۷

۲۴ سپتامبر ۲۰۲۵

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 اکنون در ماژول xr:scenecore:scenecore-testing قرار دارند. ( Idd951 )
  • تغییر نام shouldAutoHideContent به isAutoHideContentWhileResizingEnabled و shouldAlwaysShowOverlay به isAlwaysShowOverlayEnabled ( I97c36 ، b/432335421 )
  • ثابت‌های SceneCore TextureSampler برای خوانایی بیشتر به‌روزرسانی شدند، برای مثال TextureSampler.MinFilter.LINEAR اکنون TextureSampler.MIN_FILTER_LINEAR ( Ib159c ) تبدیل شده است.
  • تنظیم‌کننده‌ی setKeyEntity صحنه در متغیر keyEntity ادغام شده است. تنظیم keyEntity روی یک Entity غیرقابل جابجایی مانند AnchorEntity ، به جای بازگرداندن مقدار بولی false، یک IllegalArgumentException تولید می‌کند. ( I62080 ، b/428721695 ، b/422215745 )
  • متغیر SpatialModeChangeListener صحنه با setSpatialModeChangedListener جایگزین شد. این متغیر به جای SpatialModeChangedListener یک Consumer<SpatialModeChangeEvent> می‌گیرد. setSpatialModeChangedListener اکنون می‌تواند به صورت اختیاری یک Executor (اجراکننده) را بپذیرد. ( 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 )
  • مقدار برگشتی تنظیم‌کننده‌ها در 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 اکنون به جای Entity، نوع GroupEntity را برمی‌گرداند. ( I66042 )

رفع اشکالات

  • وقتی یک نمونه موجودیت پس از dispose استفاده می‌شود، یک IllegalStateException صادر می‌کند. ( I90990 , b/427314036 , b/432063442 )

نسخه ۱.۰.۰-alpha06

۱۳ آگوست ۲۰۲۵

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های BaseEntity و BaseScenePose مربوط به SceneCore را از حالت محدود خارج کنید ( 88c0ff6 )

نسخه ۱.۰.۰-آلفا۰۵

۳۰ ژوئیه ۲۰۲۵

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 به Panel Entities و SurfaceEntities اضافه شد. ( I118f6 )
  • متدهای فراخوانی PerceivedResolution به Scene.kt اضافه شدند تا وضوح درک شده پنل اصلی فعالیت در HSM را رصد کنند. ( I58084 )
  • SurfaceEntity - پشتیبانی برای درخواست نمونه‌برداری فوق‌العاده در زمان ایجاد برنامه اضافه شد. این به برنامه‌ها اجازه می‌دهد تا از فیلتر نمونه‌برداری فوق‌العاده برای ضد لغزش استفاده کنند. ( I06913 )
  • ویژگی recommendedContentBoxInFullSpace به ActivitySpace اضافه شد. این ویژگی یک کادر پیشنهادی برای قرار دادن محتوا در حالت Full Space برمی‌گرداند. ( I4cd6f )
  • سازنده‌ی overload شده‌ای برای اصلاح‌کننده‌ی متحرک ارائه شده است که امکان لنگر انداختن را فراهم می‌کند. ( 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 )
  • تعدادی از تنظیم‌کننده‌های ویژگی‌های 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 با propertyها جایگزین شدند. ویژگی PanelEntity.size از Float3dSize به Float2dSize تغییر یافت. متد منسوخ androidx.xr.scenecore.PanelEntity.getPixelDimensions حذف شد و به جای آن از getSizeInPixels استفاده شد. ( Icc174 )
  • androidx.xr.scenecore.OnSpaceUpdatedListener با Runnable جایگزین شد. ( I19308 )
  • SpatialUser.getCameraViews() با یک ویژگی جایگزین شد. ( Ib0cc5 ) برای ExrImage و GltfModel: متدهای create به توابع suspend تغییر یافتند؛ پارامترهای create اصلاح شدند تا به جای یک String ، یک Uri یا Path را بپذیرند. ( Id8883 ) ( I0d247 ) ، ( I25706 )
  • SpatialEnvironment.requestFullSpaceMode و SpatialEnvironment.requestHomeSpaceMode را به Scene منتقل کردم، برای مثال از session.scene.requestFullSpaceMode() به جای session.scene.spatialEnvironment.requestFullSpaceMode() استفاده کردم. addOnPassthroughOpacityChangedListener و addOnSpatialEnvironmentChangedListener اکنون overrideهایی دارند که Executorهای اختیاری را می‌پذیرند. ( I12fe0 ) ( I6b21e )
  • متدهای منسوخ‌شده‌ی SpatialEnvironment زیر حذف شدند: togglePassthrough ، setPassthrough ، setPassthroughOpacity ، getPassthroughMode ، getPassthroughOpacity ، setSkybox و setGeometry . همچنین کلاس منسوخ‌شده‌ی SpatialEnvironment.PassthroughMode ( I927bd ) ( I927bd ) ( I927bd ) حذف شد.
  • getterها و setterهای SpatialEnvironment زیر را با ویژگی‌های Kotlin جایگزین کرد: getCurrentPassthroughOpacity() ، get/setPassthroughOpacityPreference() ، get/setSpatialEnvironmentPreference() ، isSpatialEnvironmentPreferenceActive() ( I33a7b ) ( Ie06e2 ) ( Ie06e2 )
  • نوع SpatialEnvironmentPreference.preferredPassthroughOpacity از Float? به Float تغییر یافته است. دیگر مقادیر تهی را نمی‌پذیرد. در عوض، SpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCE برای نشان دادن اینکه هیچ ترجیحی برای شفافیت وجود ندارد، استفاده می‌شود. ( I40107 )
  • پارامتر windowBoundsPx در متد create به pixelDimensions و نوع آن از Rect به IntSize2d به‌روزرسانی شد. ( I1926e )
  • سازنده SpatialEnvironment اکنون داخلی است ( I75a51 )
  • کلاس‌های SpatialPointerIconNone و SpatialPointerIconCircle با اشیاء همراه SpatialPointerIcon.NONE و SpatialPointerIcon.CIRCLE ( I416d2 ) جایگزین شدند.
  • SpatialPointerIcon در SpatialPointerComponent دیگر قابل تهی‌سازی نیست. برای نشان دادن اینکه باید از آیکون اشاره‌گر پیش‌فرض سیستم استفاده شود، از SpatialPointerIcon.DEFAULT به جای تهی استفاده کنید. ( I416d2 )
  • androidx.xr.scenecore.AnchorEntity.getState() با یک ویژگی فقط خواندنی جایگزین شد. نام پارامترهای متد AnchorEntity.create() برای وضوح بیشتر تغییر یافت. در متدهای AnchorEntity برای تنظیم و اضافه کردن شنونده‌ها، شنونده به آرگومان نهایی منتقل شده و به لامبداهای انتهایی فعال تبدیل شده است. androidx.xr.scenecore.OnStateChangedListener برای AnchorEntity با Consumer<AnchorEntity.State> جایگزین شد. ( I472e0 )
  • GltfModelEntity.getAnimationState() اکنون یک ویژگی است. ( I10b29 )
  • ActivitySpace.getBounds() با یک ویژگی جایگزین شد. ActivitySpace.addBoundsChangedListener به ActivitySpace.addOnBoundsChangedListener تغییر نام داد. ActivitySpace.setOnSpaceUpdatedListener با متدهای add/remove جایگزین شد. ( 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 اکنون به جای PanelEntity ( I7125a ) از نوع MainPanelEntity است.
  • متد setFullSpaceMode صحنه را به configureBundleForFullSpaceModeLaunch و متد setFullSpaceModeWithEnvironmentInherited را به configureBundleForFullSpaceModeLaunchWithEnvironmentInherited تغییر نام داد. ( I0cbe0 ) ( I0cbe0 )
  • مقادیر UNKNOWN، OUTSIDE_FOV، PARTIALLY_WITHIN_FOV و WITHIN_FOV از SpatialVisibility به ترتیب به SPATIAL_VISIBILITY_UNKNOWN، SPATIAL_VISIBILITY_OUTSIDE_FIELD_OF_VIEW، SPATIAL_VISIBILITY_PARTIALLY_WITHIN_FIELD_OF_VIEW تغییر نام دادند ( Ie7e8c )
  • کلاس SpatialVisibility با شیء عمومی با مقادیر ثابت Int جایگزین شده است. setSpatialVisibilityChangedListener اکنون به جای Consumer<SpatialVisibility> ، یک Consumer<Int> می‌پذیرد ( Ie7e8c )
  • ثابت‌های PointerCaptureComponent تغییر نام داده و به شیء PointerCaptureComponent.PointerCaptureState ( I9c7ac ) منتقل شدند.
  • PointerCaptureComponents' StateListener با Consumer<Int> جایگزین شد. ( I9c7ac )
  • InputEventListener با Consumer<InputEvent> ( I9c7ac ) جایگزین شد.
  • setPreferredAspectRatio از کلاس Scene به شیء 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 اکنون در صورت عدم اعطای مجوزهای کافی، به جای بازگرداندن SessionCreatePermissionsNotGranted یا SessionConfigurePermissionsNotGranted ، خطای SecurityException را صادر می‌کنند ( I7c488 ).
  • ResizableComponent.create اکنون به یک Consumer<ResizeEvent> ResizeEventListener با Consumer<ResizeEvent> ResizableComponent.size به ResizableComponent.affordanceSize ResizableComponent.minimumSize به ResizableComponent.minimumEntitySize ResizableComponent.maximumSize به ResizableComponent.maximumEntitySize تغییر نام داد. ResizableComponent.autoHideContent به ResizableComponent.shouldAutoHideContent تغییر نام داد. ResizableComponent.forceShowResizeOverlay به ResizableComponent.shouldAlwaysShowOverlay ( I97a2d ) تغییر نام داد.
  • minSDK برای androidx.xr.scenecore و androidx.xr.compose به ۲۴ کاهش یافت. بسته‌های XR هنوز در زمان اجرا به API 34 نیاز دارند. ( I17224 )
  • محدودیت RequiresApi(34) از روی تمام بسته‌های Jetpack XR حذف شد. این محدودیت اضافی بود زیرا Jetpack XR در حال حاضر فقط روی دستگاه‌هایی با سطح API 34+ در دسترس است. ( Iae0f8 )
  • مصنوع اصلی SceneCore ( xr:scenecore:scenecore ) فقط شامل APIهای ناهمگام به سبک کاتلین خواهد بود. توسعه‌دهندگان جاوا می‌توانند برای دسترسی به APIهای سازگار به کتابخانه xr:scenecore:scenecore-guava تکیه کنند. ( If221b )
  • پروژه‌های منتشر شده با کاتلین ۲.۰ برای استفاده به KGP 2.0.0 یا جدیدتر نیاز دارند ( Idb6b5 )
  • این کتابخانه اکنون از حاشیه‌نویسی‌های nullness از نوع JSpecify استفاده می‌کند که از نوع استفاده می‌کنند. توسعه‌دهندگان Kotlin باید از آرگومان کامپایلر زیر برای اعمال استفاده صحیح استفاده کنند: -Xjspecify-annotations=strict (این پیش‌فرض است که از نسخه 2.1.0 کامپایلر Kotlin شروع می‌شود) ( Ia8420 )
  • تمام متدهای async که ListenableFuture برمی‌گردانند، با توابع تعلیق کاتلین جایگزین شده‌اند. توسعه‌دهندگان جاوا که مایل به استفاده از متدهای async مبتنی بر ListenableFuture به جای توابع تعلیق کاتلین هستند، اکنون باید از توابع افزونه در :xr:scenecore-scenecore-guava استفاده کنند. برای مثال، GuavaExrImage شامل توابع async معادل Guava یعنی ExrImage است، GuavaScenePose شامل توابع async معادل Guava یعنی ScenePose است، GuavaGltfModel شامل توابع async Guava-equivalent GltfModel است و غیره. ( If7283 ) ( I0af60 ) ( If7283 ) ( Ia8515 ) ( I4efdf ) ( I54bbf ) ( I3467a ) ( I82a33 )

رفع اشکالات

  • به‌روزرسانی قانون Jetpack XR Scenecore ProGuard برای جلوگیری از AbstractMethodError برای کلاینت‌های کوچک‌شده ( I91a01 )
  • اصلاحات اضافی برای پشتیبانی از کوچک‌سازی Proguard برای Jetpack XR SceneCore ( I4f47e )
  • اشکالی که باعث می‌شد اگر hitPosition در HitInfo از InputEvent مقدار null داشته باشد و hitPosition برگردانده شده از سیستم، ممکن بود باعث خرابی InteractableComponent شود، برطرف شد ( I7a695 )
  • پیکربندی *مقادیر حالت برای انعکاس رفتارشان تغییر نام داده شده‌اند. ( I6d247 )
  • مشکلات مربوط به FOV و HitTest در SceneCore TestApp برطرف شد. ( I2c51e )
  • اشکال موجود در SpatialCapabilities.hasCapability() که در آن اگر هر یک از قابلیت‌های ارسالی با یک OR بیتی درست باشد، مقدار درست را برمی‌گرداند، به جای اینکه فقط در صورتی درست برگردانده شود که همه آنها درست باشند، مقدار درست را برمی‌گرداند، برطرف شد ( I2cd40 ).
  • SurfaceEntity.StereoMode.TOP_BOTTOM به‌روزرسانی شد تا نقشه بالا برای چشم چپ و نقشه پایین برای چشم راست باشد. ( I4ae68 )

نسخه ۱.۰.۰-آلفا۰۴

۷ مه ۲۰۲۵

androidx.xr.scenecore:scenecore:1.0.0-alpha04 و androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04 منتشر شدند. نسخه 1.0.0-alpha04 شامل این کامیت‌ها است.

ویژگی‌های جدید

  • اکنون backhandling روی موجودیت‌های پنل بدون activity های تعبیه شده کار خواهد کرد. برای اینکه backhandling کار کند، باید android:enableOnBackInvokedCallback= "true" در مانیفست اندروید مشخص کنید.
  • 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 هستند و مقدار پیش‌فرض برای این پارامتر Parent است.
  • متدهای افزونه‌ی فراخوانیِ قابلیت مشاهده‌ی مکانی (Spatial Visibility) به SessionExt.kt اضافه شده‌اند تا زمانی که محتوای صحنه در داخل یا خارج از میدان دید کاربر حرکت می‌کند، نظارت شود.
  • setPointSourceParams به SpatialAudioTrack اضافه شده است و به پارامترها اجازه می‌دهد پس از ساخت آهنگ، به‌روزرسانی شوند.
  • یک کلاس جدید به نام Scene اضافه شده است که ارجاعاتی به APIهای Scenecore دارد. Scene به عنوان یک ویژگی الحاقی Session قابل دسترسی خواهد بود. توابع داخل SessionExt به Scene منتقل شده‌اند، بنابراین importها نیاز به تنظیم دارند؛ برای مثال، SessionExt.getScene(session) addSpatialCapababilitiesChangedListener در مقابل SessionExt.addSpatialCapabilitiesChangedListener .
  • ActivityPose.hitTestAsync اضافه شد که امکان hitTest در برابر محتوای مجازی فراهم می‌کند.
  • نوع کامپوننت جدید SpatialPointerComponent اضافه شده است که به کلاینت‌ها اجازه می‌دهد آیکون رندر شده برای اشاره‌گر را مشخص کنند یا آیکون را غیرفعال کنند. این کامپوننت در حال حاضر فقط می‌تواند به نمونه‌های PanelEntity متصل شود.
  • معرفی کارخانه جدید PanelEntity که ابعاد پنل را بر حسب متر یا پیکسل دریافت می‌کند. کارخانه قدیمی PanelEntity که دو پارامتر از نوع Dimension برای پنل می‌گرفت، حذف شد.

تغییرات API

  • محدودیت RequiresApi(34) از روی تمام بسته‌های Jetpack XR حذف شد. این محدودیت اضافی بود زیرا Jetpack XR در حال حاضر فقط روی دستگاه‌هایی با سطح API 34+ در دسترس است. ( Iae0f8 )
  • پروژه‌های منتشر شده با کاتلین ۲.۰ برای استفاده به 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() پیکربندی شود.
  • APIهای SpatialUser اکنون نیاز دارند که HeadTrackingMode در Session.configure() پیکربندی شود.
  • وقتی ResizableComponent پیوست نشده باشد، به جای گزارش سطح ERROR، گزارش سطح INFO را ارائه می‌دهد.
  • کلاس Fov اکنون یک کلاس معمولی کاتلین است.
  • Entity.kt تقسیم کنید تا هر نوع موجودیت مشخص در فایل جداگانه خود قرار گیرد.
  • هنگام ایجاد یک PanelEntity جدید، اکثر Viewها به FrameLayout تغییر نام می‌دهند. این امر استفاده از LayoutInspector با Spatial Panels تسهیل می‌کند.
  • نمونه‌ی فعلی XrExtensions که در حال حاضر استفاده می‌شود، اکنون به بهترین شکل ممکن در پلتفرم ثبت شده است تا به اشکال‌زدایی برنامه کمک کند.

رفع اشکالات

  • برای جلوگیری از خرابی که ممکن است هنگام جابجایی یک PanelEntity با MovableComponent و AnchorPlacement رخ دهد، یک اصلاحیه اضافه شد.
  • مشکلی که باعث می‌شد ResizableComponent در فراخوانی onResizeStart اندازه‌های قدیمی ارائه دهد، برطرف شد.
  • مشکل از کار افتادن برنامه هنگام فراخوانی چندین بار dispose() در JxrPlatformAdapterAxr برطرف شد.

نسخه ۱.۰.۰-آلفا۰۳

۲۶ فوریه ۲۰۲۵

androidx.xr.scenecore:scenecore:1.0.0-alpha03 و androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03 منتشر شدند. نسخه 1.0.0-alpha03 شامل این کامیت‌ها است.

ویژگی‌های جدید

  • کوچک‌سازی Proguard اکنون برای کد Jetpack XR پشتیبانی می‌شود

رفع اشکالات

  • اصلاحات اضافی برای پشتیبانی از کوچک‌سازی Proguard برای Jetpack XR SceneCore ( I4f47e )
  • به‌روزرسانی قانون Jetpack XR Scenecore ProGuard برای جلوگیری از AbstractMethodError برای کلاینت‌های کوچک‌شده ( I91a01 )

نسخه ۱.۰.۰-آلفا۰۲

۱۲ فوریه ۲۰۲۵

androidx.xr.scenecore:scenecore:1.0.0-alpha02 و androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02 منتشر شدند. نسخه 1.0.0-alpha02 شامل این کامیت‌ها است.

تغییر اساسی پیش رو که برنامه‌های ساخته شده قبل از نسخه ۱.۰.۰-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 انجام خواهد شد.

شکستن و تغییرات رفتاری

  • اگر پنل عرض یا ارتفاعی کمتر از ۳۲dp داشته باشد، PanelEntity و ActivityPanelEntity شعاع گوشه پیش‌فرض ۳۲dp یا کمتر خواهند داشت.

APIها و قابلیت‌های جدید

  • StereoSurface.CanvasShape را معرفی می‌کند که امکان ایجاد بوم‌های Spherical و Hemispherical را برای رندر کردن رسانه‌های فراگیر فراهم می‌کند.
  • StereoSurfaceEntity.create() اکنون یک پارامتر CanvasShape می‌پذیرد. (این پارامتر در حال حاضر نادیده گرفته می‌شود، اما در نسخه‌های آینده استفاده خواهد شد)
  • StereoSurfaceEntity.create() دیگر پارامتر Dimensions دریافت نمی‌کند. برنامه‌ها باید اندازه بوم را از طریق تنظیم CanvasShape کنترل کنند.
  • StereoSurfaceEntity یک عضو CanvasShape دارد که می‌تواند به صورت پویا تنظیم شود.
  • StereoSurfaceEntity.dimensions اکنون یک ویژگی فقط خواندنی است؛ برنامه‌ها باید CanvasShape برای تغییر ابعاد تنظیم کنند.
  • StereoSurfaceEntity اکنون اجازه می‌دهد StereoMode پس از ساخت، دوباره تنظیم شود.

تغییرات دیگر

  • زمان کامپایل minSDK به ۲۴ کاهش یافت. تمام APIهای Jetpack XR همچنان در زمان اجرا به API 34 نیاز دارند.
  • کارخانه Session مربوط به SceneCore ( Session.create ) دیگر قصدی برای دریافت مجوز SCENE_UNDERSTANDING راه‌اندازی نمی‌کند. در عوض، برنامه کلاینت باید قبل از تلاش برای ایجاد anchorها، صریحاً مجوزها را از کاربر درخواست کند. در صورت عدم اعطای مجوز توسط کاربر، ایجاد anchor با شکست مواجه خواهد شد.

رفع اشکالات

  • تابع getActivitySpacePose() ‎ برای در نظر گرفتن مقیاس ActivitySpace اصلاح شده است، به این صورت که مقادیر ترجمه را به جای اینکه همیشه مقادیر بدون مقیاس را برگرداند، به صورت واحدهای مقیاس‌بندی شده برمی‌گرداند. transformPoseTo اکنون از واحدهای صحیح برای محاسبه تغییرات مختصات زمانی که ActivitySpace در منبع یا مقصد درگیر است، استفاده می‌کند.
  • اکنون هر زمان که یک تنظیمات null برای skybox با استفاده از setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom)) ارسال شود، skybox به یک skybox کاملاً سیاه تنظیم می‌شود. برای بازگشت به skybox و geometry پیش‌فرض سیستم، از setSpatialEnvironmentPreference(null).

نسخه ۱.۰.۰-آلفا۰۱

۱۲ دسامبر ۲۰۲۴

androidx.xr.scenecore:scenecore-* 1.0.0-alpha01 منتشر شد.

ویژگی‌های نسخه اولیه نسخه اولیه توسعه‌دهندگان Jetpack SceneCore، یک کتابخانه گراف صحنه سه‌بعدی برای ایجاد و دستکاری صحنه‌ها و محیط‌های فراگیر. این کتابخانه به شما امکان می‌دهد مدل‌های سه‌بعدی و پنل‌های محتوا را نسبت به یکدیگر و محیط‌های مجازی یا واقعی خود قرار داده و مرتب کنید.

  • محیط فضایی : با استفاده از یک تصویر skybox و/یا هندسه مدل سه‌بعدی به عنوان پس‌زمینه صحنه XR از محیط خود، تجربیات کاملاً فراگیر ایجاد کنید. یا قابلیت عبور (passthrough) را فعال کنید تا صحنه مجازی شما بتواند با محیط دنیای واقعی کاربر ادغام شود.
  • PanelEntity : با جاسازی طرح‌بندی‌ها و فعالیت‌های استاندارد اندروید در پنل‌های فضایی که می‌توانند شناور باشند یا به سطوح دنیای واقعی متصل شوند، محتوای دوبعدی را به صحنه‌های سه‌بعدی خود اضافه کنید.
  • GltfModelEntity : مدل‌های سه‌بعدی را در صحنه خود قرار دهید، متحرک‌سازی کنید و با آنها تعامل داشته باشید. SceneCore از فرمت فایل glTF برای سهولت ادغام با مدل‌های موجود پشتیبانی می‌کند.
  • SpatialAudio : منابع صوتی محیطی و نقطه‌ای را به صحنه سه‌بعدی خود اضافه کنید تا صدای کاملاً فراگیر و فضاسازی‌شده داشته باشید.
  • StereoSurfaceEntity : SceneCore از مسیریابی چشم چپ/راست محتوای رندر شده روی یک سرفیس اندرویدی پشتیبانی می‌کند. این می‌تواند برای رندر محتوای استریوسکوپی در قالب پهلو به پهلو یا بالا به پایین، مانند عکس‌های استریو، ویدیوی سه‌بعدی یا سایر رابط‌های کاربری رندر شده پویا، استفاده شود. برنامه‌ها باید از MediaPlayer یا ExoPlayer برای رمزگشایی ویدیو استفاده کنند.
  • سیستم کامپوننت: SceneCore یک سیستم کامپوننت قوی و انعطاف‌پذیر برای افزودن قابلیت‌ها به محتوای XR شما ارائه می‌دهد، از جمله امکاناتی برای کاربران جهت جابجایی، تغییر اندازه و تعامل با مدل‌ها و پنل‌ها.
  • Anchor : با فعال بودن قابلیت Passthrough، می‌توانید پنل‌ها و مدل‌ها را به سطوح واقعی متصل کنید و به کاربران امکان ادغام یکپارچه محتوای مجازی در محیط دنیای واقعی را بدهید.
  • موقعیت کاربر: به موقعیت مکانی کاربر در صحنه مجازی دسترسی پیدا کنید تا محتوای خود را حول موقعیت کاربر تنظیم کنید.
  • قابلیت‌های مکانی : برنامه‌های کاملاً تطبیقی ​​بسازید که از قابلیت‌های مکانی در صورت وجود، مانند موقعیت‌یابی سه‌بعدی محتوای رابط کاربری، بهره ببرند. نه تنها این، بلکه برنامه شما می‌تواند تغییرات قابلیت‌ها را در حین اجرای برنامه رصد کند تا تجربه را بر اساس نحوه استفاده کاربر از دستگاه اندروید XR خود تغییر دهد.

مشکلات شناخته شده

  • در حال حاضر برای استفاده از Jetpack SceneCore به minSDK با مقدار 30 نیاز است. به عنوان یک راه حل، ورودی مانیفست زیر را اضافه کنید <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> تا بتوانید با minSDK با مقدار 23 بسازید و اجرا کنید.
  • جلسه می‌تواند در موقعیت‌های مختلفی که به طور خودکار فعالیت را بازسازی می‌کنند، نامعتبر شود، از جمله تغییر اندازه پنل اصلی، اتصال لوازم جانبی و تغییر بین حالت روشن و تاریک. اگر با مشکلات نامعتبر شدن جلسه مواجه شدید، راه‌حل‌ها شامل تغییر اندازه پنل اصلی به حالت غیرقابل تغییر، استفاده از یک موجودیت پنل پویا، غیرفعال کردن بازآفرینی فعالیت برای تغییرات پیکربندی خاص یا غیرفعال کردن تغییرات تم حالت روشن/تاریک است.
  • اجزای قابل جابجایی و تغییر اندازه در GltfEntity پشتیبانی نمی‌شوند.
  • Entity.getSize() در GltfEntity پشتیبانی نمی‌شود.
  • برنامه‌های Jetpack XR ملزم به درخواست مجوز android.permission.SCENE_UNDERSTANDING در AndroidManifest هستند.
  • ایجاد یک جلسه فقط در دستگاه اندروید XR پشتیبانی می‌شود. در حال حاضر، اگر یک جلسه ایجاد کنید و سعی کنید از آن در دستگاهی غیر از اندروید XR استفاده کنید، با خطای RuntimeException مواجه خواهید شد.
  • تنظیم کادر آسمان به null از طریق `SpatialEnvironment.setSpatialEnvironmentPreference()` منجر به ایجاد یک کادر آسمان کاملاً سیاه، همانطور که مستند شده است، نمی‌شود. این ممکن است منجر به کادر آسمان پیش‌فرض سیستم شود یا هیچ تغییری در کادر آسمان فعلی ایجاد نکند.
  • کلاینت‌های SceneCore باید implementation(“com.google.guava:listenablefuture-1.0”) برای وابستگی‌های برنامه خود به پیکربندی Gradle خود اضافه کنند. در نسخه‌های آینده، scenecore این کتابخانه را به عنوان یک وابستگی api در نظر خواهد گرفت، بنابراین کلاینت‌ها نیازی به اعلام صریح آن نخواهند داشت.
  • SceneCore به اشتباه com.google.guava:guava-31.1-android و com.google.protobuf:protobuf-javalite را به عنوان وابستگی‌های متعدی در نظر می‌گیرد. اگر این امر منجر به خطاهای کلاس تکراری در ساخت شما شود، می‌توان این دو وابستگی را با خیال راحت حذف کرد.
  • اگر برنامه شما از SceneCore استفاده می‌کند و ProGuard را فعال کرده است، هنگام ایجاد یک Session از کار می‌افتد. به عنوان یک راه حل، ProGuard را غیرفعال کنید. برای اطلاعات بیشتر در مورد نحوه فعال کردن ProGuard به این راهنما مراجعه کنید.