Jetpack SceneCore

สร้างและจัดการกราฟฉาก Android XR ด้วยเนื้อหา 3 มิติ
อัปเดตล่าสุด รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า รุ่นอัลฟ่า
30 กรกฎาคม 2025 - - - 1.0.0-alpha05

การประกาศทรัพยากร Dependency

หากต้องการเพิ่มทรัพยากร Dependency ใน XR SceneCore คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ 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"
}

Kotlin

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 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่ม API ความละเอียดที่รับรู้แล้วลงในเอนทิตีแผงและ SurfaceEntities (I118f6)
  • PerceivedResolution เพิ่มเมธอดเรียกกลับไปยัง Scene.kt เพื่อตรวจสอบความละเอียดที่รับรู้ของแผงหลักของกิจกรรมใน HSM (I58084)
  • SurfaceEntity - เพิ่มการรองรับแอปพลิเคชันเพื่อขอการสุ่มตัวอย่างขั้นสูงในเวลาที่สร้าง ซึ่งจะช่วยให้แอปพลิเคชันใช้ฟิลเตอร์การสุ่มตัวอย่างแบบซูเปอร์เพื่อการป้องกันรอยหยักได้ (I06913)
  • เพิ่มพร็อพเพอร์ตี้ recommendedContentBoxInFullSpace ลงใน ActivitySpace แล้ว โดยจะแสดงช่องแนะนำสำหรับวางเนื้อหาเมื่ออยู่ในโหมดพื้นที่เต็ม (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)
  • ในเอนทิตี: เปลี่ยน 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 ไปยังฉาก เช่น ใช้ session.scene.requestFullSpaceMode() แทน session.scene.spatialEnvironment.requestFullSpaceMode() ตอนนี้ addOnPassthroughOpacityChangedListener และ addOnSpatialEnvironmentChangedListener มีการลบล้างที่ยอมรับ 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 แล้ว โดยจะไม่รับค่า Null อีกต่อไป แต่จะใช้ SpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCE เพื่อส่งสัญญาณว่าไม่มีค่ากำหนดความทึบแสง (I40107)
  • อัปเดตพารามิเตอร์ windowBoundsPx เป็น pixelDimensions และประเภทจาก Rect เป็น IntSize2d ในเมธอด create (I1926e)
  • ตอนนี้ตัวสร้าง SpatialEnvironment เป็นแบบภายในแล้ว (I75a51)
  • แทนที่คลาส SpatialPointerIconNone และคลาส SpatialPointerIconCircle ด้วยออบเจ็กต์คู่ SpatialPointerIcon.NONE และ SpatialPointerIcon.CIRCLE (I416d2)
  • SpatialPointerIcon ใน SpatialPointerComponent จะไม่เป็นค่าว่างอีกต่อไป ใช้ SpatialPointerIcon.DEFAULT แทนค่า Null เพื่อระบุว่าควรใช้ไอคอนเคอร์เซอร์เริ่มต้นของระบบ (I416d2)
  • แทนที่ androidx.xr.scenecore.AnchorEntity.getState() ด้วยพร็อพเพอร์ตี้แบบอ่านอย่างเดียว เปลี่ยนชื่อพารามิเตอร์ในเมธอด AnchorEntity.create() เพื่อความชัดเจน ในวิธีการตั้งค่าและเพิ่ม Listener ของ AnchorEntity's เราได้ย้าย Listener ไปยังอาร์กิวเมนต์สุดท้ายเพื่อเปิดใช้ Lambda ต่อท้าย แทนที่ 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 จะแสดงผลเป็นเท็จ มีการเปลี่ยนชื่อ 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 ของ 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 class ถูกแทนที่ด้วยออบเจ็กต์สาธารณะที่มีค่า 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 จะแสดง SecurityException เมื่อไม่ได้รับสิทธิ์ที่เพียงพอแทนที่จะแสดง SessionCreatePermissionsNotGranted หรือ SessionConfigurePermissionsNotGranted (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 เป็น 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 เท่านั้น นักพัฒนาซอฟต์แวร์ Java สามารถใช้ไลบรารี xr:scenecore:scenecore-guava เพื่อเข้าถึง API ที่เข้ากันได้ (If221b)
  • โปรเจ็กต์ที่เผยแพร่ด้วย Kotlin 2.0 ต้องใช้ KGP 2.0.0 ขึ้นไปจึงจะใช้งานได้ (Idb6b5)
  • ตอนนี้ไลบรารีนี้ใช้คำอธิบายประกอบเกี่ยวกับค่า Null ของ JSpecify ซึ่งเป็นแบบใช้ประเภท นักพัฒนาซอฟต์แวร์ Kotlin ควรใช้อาร์กิวเมนต์คอมไพเลอร์ต่อไปนี้เพื่อบังคับใช้การใช้งานที่ถูกต้อง -Xjspecify-annotations=strict (นี่คือค่าเริ่มต้นที่เริ่มต้นด้วยคอมไพเลอร์ Kotlin เวอร์ชัน 2.1.0) (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 ที่ระบบส่งคืนเป็นค่าว่าง (I7a695)
  • เราได้เปลี่ยนชื่อค่าโหมดการกำหนดค่าเพื่อให้สอดคล้องกับลักษณะการทำงาน (I6d247)
  • แก้ไขปัญหาเกี่ยวกับ FOV และ HitTest ใน SceneCore TestApp (I2c51e)
  • แก้ไขข้อบกพร่องใน SpatialCapabilities.hasCapability() ซึ่งจะแสดงผลเป็นจริงหากความสามารถใดก็ตามที่ส่งผ่านด้วย OR แบบบิตเป็นจริง แทนที่จะแสดงผลเป็นจริงเฉพาะในกรณีที่ความสามารถทั้งหมดเป็นจริง (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" ในไฟล์ Manifest ของ Android
  • StereoSurfaceEntity ตอนนี้รองรับการเล่น MV-HEVC ผ่านค่า StereoMode ใหม่ 2 ค่า ได้แก่ MULTIVIEW_LEFT_PRIMARY และ MULTIVIEW_RIGHT_PRIMARY
  • ตอนนี้ PanelEntity.setSize และ PanelEntity.getSize จะแสดงผลขนาดในพื้นที่ระดับบน
  • ตอนนี้ Entity.setPose, Entity.getPose, Entity.setScale, Entity.getScale, Entity.setAlpha และ Entity.getAlpha ใช้พารามิเตอร์ใหม่ relativeTo ซึ่งช่วยให้รับ/ตั้งค่าที่เกี่ยวข้องกับพื้นที่ต่างๆ ได้ ค่าที่รองรับ ได้แก่ พื้นที่สำหรับผู้ปกครอง กิจกรรม และโลกแห่งความจริง และค่าเริ่มต้นสำหรับพารามิเตอร์นี้คือ Parent
  • เพิ่มเมธอดส่วนขยาย Spatial Visibility Callback ลงใน SessionExt.kt เพื่อตรวจสอบเมื่อเนื้อหาฉากเคลื่อนที่ภายในหรือภายนอกฟิลด์มุมมองของผู้ใช้
  • เพิ่ม setPointSourceParams ลงใน SpatialAudioTrack แล้ว ซึ่งจะช่วยให้คุณอัปเดตพารามิเตอร์ได้หลังจากสร้างแทร็กแล้ว
  • เพิ่มคลาสใหม่ชื่อ Scene พร้อมการอ้างอิงถึง Scenecore API โดยจะเข้าถึงฉากได้ในฐานะพร็อพเพอร์ตี้ส่วนขยายของเซสชัน ฟังก์ชันภายใน SessionExt ได้รับการย้ายไปยัง Scene แล้ว ดังนั้นจึงต้องปรับการนำเข้า เช่น SessionExt.getScene(session)addSpatialCapababilitiesChangedListener พบกับ SessionExt.addSpatialCapabilitiesChangedListener
  • ActivityPose.hitTestAsync ได้รับการเพิ่มเข้ามา ซึ่งช่วยให้hitTestกับเนื้อหาเสมือนได้
  • เพิ่มประเภทคอมโพเนนต์ใหม่ SpatialPointerComponent ซึ่งช่วยให้ไคลเอ็นต์ระบุไอคอนที่แสดงสำหรับเคอร์เซอร์ หรือปิดใช้ไอคอนได้ ปัจจุบันแนบคอมโพเนนต์นี้กับอินสแตนซ์ PanelEntity ได้เท่านั้น
  • ขอแนะนำPanelEntityใหม่ ซึ่งใช้ขนาดแผงเป็นเมตรหรือพิกเซล นำโรงงาน PanelEntity รุ่นเก่าที่ใช้พารามิเตอร์ประเภทมิติข้อมูล 2 รายการสำหรับแผงออกแล้ว

การเปลี่ยนแปลง 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)
  • เราได้ลบคลาสเซสชันใน SceneCore ออกแล้วเพื่อใช้เซสชันใน 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()
  • SpatialUser API กำหนดให้ต้องกำหนดค่า HeadTrackingMode ใน Session.configure() แล้ว
  • เมื่อไม่ได้แนบ ResizableComponent ระบบจะแสดงบันทึกระดับ INFO แทนบันทึกระดับ ERROR
  • ตอนนี้คลาส Fov เป็นคลาส Kotlin ปกติแล้ว
  • แยก Entity.kt เพื่อวางเอนทิตีประเภทคอนกรีตแต่ละประเภทลงในไฟล์ของตัวเอง
  • เมื่อสร้าง PanelEntity ใหม่ ระบบจะเปลี่ยนการเชื่อมโยงข้อมูลพร็อพเพอร์ตี้ส่วนใหญ่กับ FrameLayout ซึ่งช่วยให้ใช้ LayoutInspector กับแผงเชิงพื้นที่ได้
  • ตอนนี้ระบบได้ลงทะเบียนอินสแตนซ์ XrExtensions ที่ใช้อยู่กับแพลตฟอร์มแล้วด้วยวิธีที่ดีที่สุดเพื่อช่วยในการแก้ไขข้อบกพร่องของแอป

แก้ไขข้อบกพร่อง

  • เราได้เพิ่มการแก้ไขเพื่อป้องกันการขัดข้องที่อาจเกิดขึ้นเมื่อย้าย PanelEntity ที่มี MovableComponent และ AnchorPlacement
  • แก้ไขปัญหาที่ ResizableComponent แสดงขนาดที่ล้าสมัยในแฮนเดิล 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 สำหรับโค้ด 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

  • เราได้ย้ายเมธอดของ Factory จากคลาส 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 ซึ่งช่วยให้สร้าง Canvas Spherical และ Hemispherical เพื่อแสดงผลสื่อที่สมจริงได้
  • StereoSurfaceEntity.create() ตอนนี้ยอมรับพารามิเตอร์ CanvasShape แล้ว (ปัจจุบันระบบจะไม่สนใจพารามิเตอร์นี้ แต่จะนำไปใช้ในรุ่นต่อๆ ไป)
  • StereoSurfaceEntity.create() ไม่รับพารามิเตอร์ Dimensions อีกต่อไป แอปพลิเคชันควรควบคุมขนาดของ Canvas ผ่านการตั้งค่า CanvasShape
  • StereoSurfaceEntity มีสมาชิก CanvasShape ซึ่งตั้งค่าแบบไดนามิกได้
  • StereoSurfaceEntity.dimensions เป็นพร็อพเพอร์ตี้แบบอ่านอย่างเดียวแล้ว ตอนนี้แอปพลิเคชันควรตั้งค่า CanvasShape เพื่อเปลี่ยนมิติข้อมูล
  • StereoSurfaceEntity อนุญาตให้StereoMode รีเซ็ตได้หลังจากการก่อสร้าง

การเปลี่ยนแปลงอื่นๆ

  • ลด minSDK ในเวลาคอมไพล์เป็น 24 API ของ Jetpack XR ทั้งหมดจะยังคงต้องใช้ API 34 ในรันไทม์
  • Session factory ของ SceneCore (Session.create) จะไม่เปิดใช้ Intent เพื่อขอสิทธิ์ SCENE_UNDERSTANDING อีกต่อไป แต่แอปพลิเคชันไคลเอ็นต์ต้องขอสิทธิ์จากผู้ใช้อย่างชัดแจ้งก่อนที่จะพยายามสร้าง Anchor การสร้าง Anchor จะล้มเหลวหากผู้ใช้ไม่ได้ให้สิทธิ์

แก้ไขข้อบกพร่อง

  • เราได้แก้ไข getActivitySpacePose() เพื่อพิจารณาสเกล ActivitySpace โดยการแสดงผลค่าการแปลเป็นเมตรที่ปรับขนาดแล้ว แทนที่จะแสดงผลเป็นเมตรที่ไม่ได้ปรับขนาดเสมอไป transformPoseTo ตอนนี้ยังใช้หน่วยที่ถูกต้องในการคำนวณการเปลี่ยนแปลงพิกัดเมื่อ ActivitySpace เกี่ยวข้องกับแหล่งที่มาหรือปลายทางด้วย
  • ตอนนี้ระบบจะตั้งค่ากล่องท้องฟ้าเป็นกล่องท้องฟ้าสีดำทั้งหมดทุกครั้งที่มีการส่งค่ากำหนดกล่องท้องฟ้าเป็น Null โดยใช้ setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom)) หากต้องการเปลี่ยนกลับไปใช้กล่องท้องฟ้าและรูปทรงเรขาคณิตเริ่มต้นของระบบ ให้ใช้ setSpatialEnvironmentPreference(null).

เวอร์ชัน 1.0.0-alpha01

12 ธันวาคม 2024

androidx.xr.scenecore:scenecore-* 1.0.0-alpha01 ได้รับการเผยแพร่แล้ว

ฟีเจอร์ของการเปิดตัวครั้งแรก การเปิดตัว Jetpack SceneCore สำหรับนักพัฒนาแอปครั้งแรก ซึ่งเป็นไลบรารีกราฟฉาก 3 มิติสำหรับสร้างและจัดการฉากและสภาพแวดล้อมที่สมจริง ไลบรารีนี้ช่วยให้คุณวางและจัดเรียงโมเดล 3 มิติและแผงเนื้อหาให้สัมพันธ์กันและสภาพแวดล้อมเสมือนจริงหรือโลกจริง

  • SpatialEnvironment: สร้างประสบการณ์การใช้งานที่สมจริงอย่างเต็มรูปแบบด้วยภาพสกายบ็อกซ์และ/หรือรูปทรงเรขาคณิตของโมเดล 3 มิติเป็นฉากหลังสำหรับฉาก XR ของสภาพแวดล้อม หรือเปิดใช้การส่งผ่านเพื่อให้ฉากเสมือนผสานรวมกับสภาพแวดล้อมจริงของผู้ใช้ได้
  • PanelEntity: เพิ่มเนื้อหา 2 มิติลงในฉาก 3 มิติโดยการฝังเลย์เอาต์และกิจกรรม Android มาตรฐานลงในแผงเชิงพื้นที่ที่ลอยหรือยึดกับพื้นผิวในโลกจริงได้
  • GltfModelEntity: วาง สร้างภาพเคลื่อนไหว และโต้ตอบกับโมเดล 3 มิติในฉาก SceneCore รองรับรูปแบบไฟล์ glTF เพื่อให้ผสานรวมกับโมเดลที่มีอยู่ได้ง่าย
  • SpatialAudio: เพิ่มแหล่งเสียงรอบข้างและแหล่งเสียงเฉพาะจุดลงในฉาก 3 มิติเพื่อให้ได้เสียงรอบทิศทางที่สมจริงและสมบูรณ์
  • StereoSurfaceEntity: SceneCore รองรับการกำหนดเส้นทางเนื้อหาสำหรับตาซ้าย/ขวาที่แสดงผลบน Android Surface ซึ่งใช้ในการแสดงเนื้อหาสเตอริโอสโคปในรูปแบบข้างต่อข้างหรือบนต่อล่างได้ เช่น ภาพถ่ายสเตอริโอ วิดีโอ 3 มิติ หรือ UI อื่นๆ ที่แสดงผลแบบไดนามิก แอปพลิเคชันควรใช้ MediaPlayer หรือ ExoPlayer สำหรับการถอดรหัสวิดีโอ
  • ระบบคอมโพเนนต์: SceneCore มีระบบคอมโพเนนต์ที่แข็งแกร่งและยืดหยุ่นสำหรับการเพิ่มความสามารถให้กับเนื้อหา XR ซึ่งรวมถึงความสามารถที่ช่วยให้ผู้ใช้ย้าย ปรับขนาด และโต้ตอบกับโมเดลและแผง
  • Anchor: เมื่อเปิดใช้การส่งผ่าน คุณจะติดแผงและโมเดลกับพื้นผิวจริงได้ ซึ่งจะช่วยให้ผู้ใช้ผสานรวมเนื้อหาเสมือนเข้ากับสภาพแวดล้อมจริงได้อย่างราบรื่น
  • ท่าทางของผู้ใช้: เข้าถึงตำแหน่งของผู้ใช้ในฉากเสมือนเพื่อจัดวางเนื้อหาตามตำแหน่งของผู้ใช้
  • SpatialCapabilities: สร้างแอปที่ปรับเปลี่ยนได้อย่างเต็มที่ซึ่งใช้ประโยชน์จากความสามารถเชิงพื้นที่เมื่อพร้อมใช้งาน เช่น การวางตำแหน่งเนื้อหา UI แบบ 3 มิติ นอกจากนี้ แอปยังตรวจสอบการเปลี่ยนแปลงความสามารถขณะที่แอปกำลังดำเนินการเพื่อปรับเปลี่ยนประสบการณ์การใช้งานตามวิธีที่ผู้ใช้ใช้อุปกรณ์ Android XR ได้ด้วย

ปัญหาที่ทราบ

  • ปัจจุบันต้องใช้ minSDK 30 เพื่อใช้ Jetpack SceneCore วิธีแก้ปัญหาชั่วคราวคือเพิ่มรายการไฟล์ Manifest ต่อไปนี้ <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> เพื่อให้สามารถสร้างและเรียกใช้ด้วย minSDK 23 ได้
  • เซสชันอาจใช้ไม่ได้ในสถานการณ์ต่างๆ ที่สร้างกิจกรรมขึ้นมาใหม่โดยอัตโนมัติ ซึ่งรวมถึงการปรับขนาดแผงหลัก การเชื่อมต่ออุปกรณ์ต่อพ่วง และการเปลี่ยนระหว่างโหมดสว่างและโหมดมืด หากพบปัญหาการทำให้เซสชันไม่ถูกต้อง วิธีแก้ปัญหาชั่วคราว ได้แก่ การทำให้แผงหลักปรับขนาดไม่ได้ การใช้เอนทิตีแผงแบบไดนามิก การปิดใช้การสร้างกิจกรรมใหม่สำหรับการเปลี่ยนแปลงการกำหนดค่าที่เฉพาะเจาะจง หรือการปิดใช้การเปลี่ยนธีมโหมดสว่าง/มืด
  • GltfEntity ไม่รองรับคอมโพเนนต์ที่ย้ายและปรับขนาดได้
  • GltfEntity ไม่รองรับ Entity.getSize()
  • แอป Jetpack XR ต้องขอสิทธิ์ android.permission.SCENE_UNDERSTANDING ใน AndroidManifest
  • การสร้างเซสชันรองรับเฉพาะในอุปกรณ์ Android XR ในตอนนี้ หากคุณสร้างเซสชันและพยายามใช้ในอุปกรณ์ XR ที่ไม่ใช่ Android คุณจะได้รับ 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 เป็นการขึ้นต่อกันแบบทรานซิทีฟโดยไม่ถูกต้อง หากการดำเนินการนี้ทำให้เกิดข้อผิดพลาดเกี่ยวกับคลาสที่ซ้ำกันในการสร้าง คุณสามารถยกเว้นการอ้างอิงทั้ง 2 รายการนี้ได้อย่างปลอดภัย
  • หากแอปใช้ SceneCore และเปิดใช้ ProGuard แอปจะขัดข้องเมื่อคุณ สร้างเซสชัน คุณแก้ไขปัญหาเบื้องต้นได้โดยปิดใช้ ProGuard ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเปิดใช้ ProGuard ได้ที่คำแนะนำ นี้