Jetpack SceneCore

نمودار صحنه Android XR را با محتوای سه بعدی بسازید و دستکاری کنید.
آخرین به روز رسانی انتشار پایدار کاندید را آزاد کنید نسخه بتا انتشار آلفا
30 جولای 2025 - - - 1.0.0-alpha05

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

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

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

شیار

dependencies {
    implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha05"
    // 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-alpha05"
}

کاتلین

dependencies {
    implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha05")
    // 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-alpha05")
}

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

بازخورد

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

یک شماره جدید ایجاد کنید

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

نسخه 1.0

نسخه 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 - پشتیبانی اضافه شده برای Application برای درخواست نمونه برداری فوق العاده در زمان ایجاد. این به برنامه‌ها اجازه می‌دهد تا از فیلتر نمونه‌برداری فوق‌العاده برای ضدآلیاسینگ استفاده کنند. ( I06913 )
  • ویژگی recommendedContentBoxInFullSpace به ActivitySpace اضافه شد. یک کادر توصیه شده برای قرار دادن محتوا در حالت Full Space برمی‌گرداند. ( I4cd6f )
  • سازنده اضافه بار برای اصلاح کننده متحرک ارائه شده است که امکان لنگر انداختن را فراهم می کند. ( 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 استفاده کنید. گیرنده ها و تنظیم کننده ها برای PanelEntity با ویژگی ها جایگزین شدند. ویژگی PanelEntity.size از Float3dSize به Float2dSize تغییر داد. روش من��وخ شده androidx.xr.scenecore.PanelEntity.getPixelDimensions حذف شد، به جای آن getSizeInPixels استفاده کنید. ( ICC174 )
  • با Runnable جایگزین androidx.xr.scenecore.OnSpaceUpdatedListener شد. ( 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 اکنون دارای مواردی هستند که اجرا کننده های اختیاری را می پذیرند. ( I12fe0 ) ( I6b21e )
  • روش‌های منسوخ SpatialEnvironment زیر را حذف کرد: togglePassthrough ، setPassthrough ، setPassthroughOpacity ، getPassthroughMode ، getPassthroughOpacity ، setSkybox ، و setGeometry . همچنین کلاس منسوخ SpatialEnvironment.PassthroughMode ( I927bd ) ( I927bd ) ( I927bd ) حذف شد
  • گیرنده‌ها و تنظیم‌کننده‌های SpatialEnvironment زیر را با ویژگی‌های Kotlin جایگزین کرد: getCurrentPassthroughOpacity() , get/setPassthroughOpacityPreference() , get/setSpatialEnvironmentPreference() , isSpatialEnvironmentPreferenceActive() (6) ( 6 ) Ie06e2 )
  • نوع SpatialEnvironmentPreference.preferredPassthroughOpacity از Float? به Float . دیگر مقادیر null را نمی پذیرد. در عوض، 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 به جای null استفاده کنید تا نشان دهید که نماد اشاره گر پیش فرض سیستم باید استفاده شود. ( 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 را با متدهای افزودن/حذف جایگزین کرد. ( I4c956 )
  • برای AnchorPlacement: planeTypeFilter به anchorablePlaneOrientations تغییر نام داد، planeSemanticFilter به anchorablePlaneSemanticTypes تغییر نام داد. افزودن MovableComponent به AnchorEntity یا ActivitySpace false برمی‌گردد، MoveListener creeateCustomMovable EntityMoveListener shouldDisposeParentAnchor createSystemMovable به disposeParentOnReAnchor systemMovable تغییر createAnchorable داد create
  • SurfaceEntity.featherRadiusX/Y را حذف کرد و مفهوم کلاس EdgeFeatheringParams اضافه کرد. ( IC78fc )
  • روش PanelEntity.enablePanelDepthTest() با ویژگی panelClippingConfig جایگزین شد. Scene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true) را برای فعال کردن آزمایش عمق تنظیم کنید یا آن را روی PanelClippingConfig(isDepthTestEnabled = false) تنظیم کنید تا آن را غیرفعال کنید. ( I0cbe0 )
  • Scene.mainPanelEntity اکنون به جای PanelEntity از نوع MainPanelEntity است ( I7125a )
  • روش Scene's setFullSpaceMode به configureBundleForFullSpaceModeLaunch BundleForFullSpaceModeLaunch و متد setFullSpaceModeWithEnvironmentInherited برای configureBundleForFullSpaceModeLaunchWithEnvironmentInherited تغییر نام داد. ( I0cbe0 ) ( I0cbe0 )
  • به مقادیر ناشناخته، OUTSIDE_FOV، PARTIALLY_WITHIN_FOV، و WITHIN_FOV SpatialVisibility به SPATIAL_VISIBILITY_UNKNOWN، SPATIAL_VISIBILITY_OUTSIDE_FIELD_OF_VIEW تغییر نام داد، SPATIAL_VISIBILITY_PARTIALLY_WITHIN_FIELD_OF_VIEW، و SPATIAL_VISIBILITY_WITHIN_FIELD_OF_VIEW، به ترتیب ( Ie7e8c )
  • کلاس SpatialVisibility با شیء عمومی با مقادیر Const Int جایگزین شد. setSpatialVisibilityChangedListener اکنون یک Consumer<Int> به جای Consumer<SpatialVisibility> می پذیرد ( 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 تغییر نام داد ( Should7Overalays )
  • minSDK به 24 برای androidx.xr.scenecore و androidx.xr.compose کاهش داد. بسته های XR هنوز در زمان اجرا به API 34 نیاز دارند. ( I17224 )
  • محدودیت RequiresApi(34) در تمام بسته‌های Jetpack XR حذف شد. این محدودیت اضافی بود زیرا Jetpack XR در حال حاضر فقط در دستگاه‌هایی با سطح API 34+ در دسترس است. ( Iae0f8 )
  • مصنوع اصلی SceneCore ( xr:scenecore:scenecore ) فقط حاوی APIهای همگام به سبک Kotlin خواهد بود. توسعه دهندگان جاوا می توانند برای دسترسی به API های سازگار به کتابخانه xr:scenecore:scenecore-guava وابسته باشند. ( If221b )
  • پروژه‌های منتشر شده با Kotlin 2.0 برای مصرف نیاز به KGP 2.0.0 یا جدیدتر دارند ( Idb6b5 )
  • این کتابخانه اکنون از حاشیه‌نویسی‌های پوچ JSpecify استفاده می‌کند که نوع استفاده هستند. توسعه دهندگان Kotlin باید از آرگومان کامپایلر زیر برای اعمال استفاده صحیح استفاده کنند: -Xjspecify-annotations=strict (این به طور پیش فرض با نسخه 2.1.0 کامپایلر Kotlin شروع می شود) ( Ia8420 )
  • همه متدهای همگامی که ListenableFuture را برمی گرداند با توابع تعلیق Kotlin جایگزین شده اند. توسعه دهندگان جاوا که می خواهند به جای توابع تعلیق Kotlin از روش های همگام مبتنی بر ListenableFuture استفاده کنند، اکنون باید از توابع پسوند در :xr:scenecore-scenecore-guava استفاده کنند. برای مثال، GuavaExrImage شامل توابع async معادل Guava، ExrImage، GuavaScenePose شامل توابع async ScenePose معادل Guava، GuavaGltfModel شامل توابع async Guava-equivalent GltfModel ، و غیره است. ( If7276 ( I3 ) Ia8515 ( I4efdf ) ( I54bbf ) ( I3467a ) ( I82a33 )

رفع اشکال

  • قانون Jetpack XR Scenecore ProGuard به روز شده برای جلوگیری از AbstractMethodError برای مشتریان کوچک شده. ( I91a01 )
  • اصلاحات اضافی برای پشتیبانی از Minification Proguard برای Jetpack XR SceneCore ( I4f47e )
  • اگر hitPosition در HitInfo مربوط به InputEvent ممکن است در صورتی که hitPosition برگردانده شده از سیستم تهی باشد (I7a695) از کار بیفتد، اشکالی را برطرف کرد که در آن یک InteractableComponent ممکن است باعث خرابی شود ( I7a695 )
  • Config *Mode vals برای نشان دادن رفتار آنها تغییر نام داده شده است. ( I6d247 )
  • رفع مشکلات FOV و HitTest در SceneCore TestApp. ( I2c51e )
  • رفع اشکال در SpatialCapabilities.hasCapability() که در آن اگر هر یک از قابلیت‌ها با یک بیت 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 حاوی این تعهدات است.

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

  • 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 می گیرند که مقادیر get/set را نسبت به فضاهای مختلف اجازه می دهد. مقادیر پشتیبانی شده فضاهای Parent، Activity و Real World هستند و مقدار پیش فرض این پارامتر Parent است.
  • روش‌های افزودنی قابلیت مشاهده فضایی Callback به SessionExt.kt اضافه شده است تا زمانی که محتوای صحنه در داخل یا خارج از میدان دید کاربر حرکت می‌کند نظارت کند.
  • setPointSourceParams به SpatialAudioTrack اضافه شده است، که اجازه می دهد تا پارامترها پس از ساخته شدن آهنگ به روز شوند.
  • یک کلاس جدید به نام Scene با ارجاع به APIهای Scenecore اضافه شد. Scene به عنوان یک ویژگی پسوند Session قابل دسترسی خواهد بود. توابع داخل 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 in 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 اکنون یک کلاس معمولی Kotlin است.
  • Entity.kt تقسیم کنید تا هر نوع موجودیت بتن را در فایل خودش قرار دهید.
  • هنگام ایجاد یک PanelEntity جدید، بیشتر نماها در یک FrameLayout دوباره نمایش داده می شوند. این کار استفاده از LayoutInspector با پانل های فضایی را تسهیل می کند.
  • نمونه XrExtensions که در حال حاضر استفاده می‌شود، اکنون به بهترین روش برای کمک به اشکال‌زدایی برنامه در پلتفرم ثبت شده است.

رفع اشکال

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

نسخه 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 حاوی این تعهدات است.

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

  • Minification Proguard اکنون برای کد Jetpack XR پشتیبانی می شود

رفع اشکال

  • اصلاحات اضافی برای پشتیبانی از Minification 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() یک شی SpatialCapabilities را برمی گرداند، به نفع استفاده از getSpatialCapabilities() getSpatialCapabilities().hasCapability() به عنوان یک روش بخش بندی شده تر برای بررسی وجود قابلیت های فضایی جایگزین شده است.
    • 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 برای تغییر ابعاد تنظیم کنند.
  • StereoSurfaceEntity اکنون اجازه می دهد تا StereoMode پس از ساخت دوباره تنظیم شود.

تغییرات دیگر

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

رفع اشکال

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

نسخه 1.0.0-alpha01

12 دسامبر 2024

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

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

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

مسائل شناخته شده

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