Jetpack SceneCore
Bản cập nhật mới nhất | Bản phát hành ổn định | Bản phát hành dùng thử | Bản phát hành beta | Bản phát hành alpha |
---|---|---|---|---|
Ngày 7 tháng 5 năm 2025 | - | - | - | 1.0.0-alpha04 |
Khai báo phần phụ thuộc
Để thêm một phần phụ thuộc trên XR SceneCore, bạn phải thêm kho lưu trữ Google Maven vào dự án. Đọc nội dung Kho lưu trữ Maven của Google để biết thêm thông tin.
Thêm các phần phụ thuộc cho cấu phần phần mềm bạn cần trong tệp build.gradle
cho ứng dụng hoặc mô-đun:
Groovy
dependencies { implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha04" // Required for Java implementation "com.google.guava:listenablefuture:1.0" // Required for Kotlin implementation "org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0" // Use to write unit tests testImplementation "androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04" }
Kotlin
dependencies { implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha04") // Required for Java implementation("com.google.guava:listenablefuture:1.0") // Required for Kotlin implementation("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0") // Use to write unit tests testImplementation("androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04") }
Để biết thêm thông tin về các phần phụ thuộc, hãy xem bài viết Thêm phần phụ thuộc vào bản dựng.
Ý kiến phản hồi
Ý kiến phản hồi của bạn có thể giúp chúng tôi cải thiện Jetpack. Hãy cho chúng tôi biết nếu bạn phát hiện lỗi mới hoặc có ý tưởng cải thiện thư viện này. Vui lòng xem các lỗi hiện có trong thư viện này trước khi báo một lỗi mới. Bạn có thể thêm lượt bình chọn cho lỗi hiện có bằng cách nhấp vào nút dấu sao.
Xem tài liệu về Công cụ theo dõi lỗi để biết thêm thông tin.
Phiên bản 1.0
Phiên bản 1.0.0-alpha04
Ngày 7 tháng 5 năm 2025
Phát hành androidx.xr.scenecore:scenecore:1.0.0-alpha04
và androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04
. Phiên bản 1.0.0-alpha04 bao gồm các thay đổi sau.
Tính năng mới
- Giờ đây, tính năng xử lý thao tác quay lại sẽ hoạt động trên các thực thể bảng điều khiển mà không có hoạt động được nhúng. Để tính năng xử lý thao tác quay lại hoạt động, bạn cần chỉ định
android:enableOnBackInvokedCallback= "true"
trong tệp kê khai Android. StereoSurfaceEntity
hiện hỗ trợ chế độ phát MV-HEVC thông qua 2 giá trịStereoMode
mới: MULTIVIEW_LEFT_PRIMARY và MULTIVIEW_RIGHT_PRIMARY.PanelEntity.setSize
vàPanelEntity.getSize
hiện trả về kích thước trong không gian mẹ.Entity.setPose
,Entity.getPose
,Entity.setScale
,Entity.getScale
,Entity.setAlpha
vàEntity.getAlpha
hiện lấy một tham số mớirelativeTo
, cho phép nhận/đặt các giá trị tương ứng với các khoảng trắng khác nhau. Các giá trị được hỗ trợ là Parent, Activity và Real World spaces, đồng thời giá trị mặc định cho tham số này là Parent.- Các phương thức mở rộng Spatial Visibility Callback (Lệnh gọi lại khả năng hiển thị không gian) được thêm vào
SessionExt.kt
để theo dõi thời điểm nội dung cảnh di chuyển vào trong hoặc ra ngoài trường nhìn của người dùng. setPointSourceParams
đã được thêm vàoSpatialAudioTrack
, cho phép cập nhật các tham số sau khi bản nhạc được tạo.- Thêm một lớp mới (Scene) có các tham chiếu đến API
Scenecore
. Cảnh sẽ có thể truy cập được dưới dạng một thuộc tính mở rộng của Phiên. Các hàm bên trongSessionExt
đã được chuyển sang Scene nên bạn sẽ cần điều chỉnh các lệnh nhập; ví dụ:SessionExt.getScene(session)
.addSpatialCapababilitiesChangedListener
đấu vớiSessionExt.addSpatialCapabilitiesChangedListener
. ActivityPose.hitTestAsync
đã được thêm, cho phéphitTest
chống lại nội dung ảo.- Thêm loại Thành phần mới
SpatialPointerComponent
, cho phép các ứng dụng chỉ định biểu tượng được kết xuất cho con trỏ hoặc tắt biểu tượng. Hiện tại, bạn chỉ có thể đính kèm Thành phần này vào các thực thểPanelEntity
. - Ra mắt nhà máy
PanelEntity
mới, có kích thước bảng điều khiển bằng mét hoặc pixel. Đã xoá nhà máyPanelEntity
cũ lấy 2 tham số loại Dimension cho bảng điều khiển.
Thay đổi về API
- Xoá hạn chế
RequiresApi(34)
đối với tất cả các gói Jetpack XR. Hạn chế này là không cần thiết vì Jetpack XR hiện chỉ có trên các thiết bị có API cấp 34 trở lên. (Iae0f8) - Các dự án được phát hành bằng Kotlin 2.0 yêu cầu sử dụng KGP 2.0.0 trở lên (Idb6b5)
- Xoá lớp
PermissionHelper
. - Ngừng sử dụng
PanelEntity.getPixelDensity
. PanelEntity.setPixelDimensions
vàPanelEntity.getPixelDimension
bị xoá, thay thế bằngsetSizeInPixels
vàgetSizeInPixels
.- Xoá
Entity.getActivitySpaceAlpha
. Có thể thay thế bằngEntity.getAlpha(Space.Activity)
. - Xoá
Entity.getWorldSpaceScale
. Có thể thay thế bằngEntity.getScale(Space.REAL\_WORLD)
. - Lớp Phiên trong
SceneCore
đã bị xoá để thay thế bằng Phiên trong XR Runtime. StereoSurfaceEntity
đổi tên thànhSurfaceEntity
Entity.setSize
vàEntity.getSize
bị xoá và các phương thức tương tự đã được thêm vàoPanelEntity
.PointSourceAttributes
đổi tên thànhPointSourceParams
SpatializerConstants.SOURCE\_TYPE\_BYPASS
đổi tên thànhSpatializerConstants.SOURCE\_TYPE\_DEFAULT
- Đã sửa đổi thực thể
PointSourceParams
từ quyền truy cập công khai thành quyền truy cập nội bộ. AnchorEntity.create
hiện yêu cầu bạn phải định cấu hìnhPlaneTrackingMode
trongSession.configure()
.- Các API
SpatialUser
hiện yêu cầu bạn định cấu hìnhHeadTrackingMode
trongSession.configure()
. - Khi
ResizableComponent
không được đính kèm, nó sẽ cung cấp nhật ký cấp INFO thay vì nhật ký cấp ERROR. - Lớp Fov hiện là một lớp Kotlin thông thường.
- Chia
Entity.kt
để đặt từng loại thực thể cụ thể vào tệp riêng. - Khi tạo một
PanelEntity
mới, hầu hết các Chế độ xem sẽ được liên kết lại với mộtFrameLayout
. Điều này giúp bạn dễ dàng sử dụngLayoutInspector
với Bảng điều khiển không gian. - Giờ đây, phiên bản
XrExtensions
đang dùng đã được đăng ký với nền tảng theo cách hiệu quả nhất có thể để hỗ trợ gỡ lỗi ứng dụng.
Sửa lỗi
- Chúng tôi đã thêm một bản sửa lỗi để ngăn sự cố có thể xảy ra khi
PanelEntity
cóMovableComponent
vàAnchorPlacement
được di chuyển - Khắc phục vấn đề
ResizableComponent
cung cấp kích thước cũ trong lệnh gọi lạionResizeStart
. - Khắc phục sự cố khi
dispose()
củaJxrPlatformAdapterAxr
được gọi nhiều lần.
Phiên bản 1.0.0-alpha03
Ngày 26 tháng 2 năm 2025
Phát hành androidx.xr.scenecore:scenecore:1.0.0-alpha03
và androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03
. Phiên bản 1.0.0-alpha03 bao gồm các thay đổi sau.
Tính năng mới
- Tính năng rút gọn Proguard hiện được hỗ trợ cho mã Jetpack XR
Sửa lỗi
- Các bản sửa lỗi bổ sung để hỗ trợ việc giảm thiểu Proguard cho Jetpack XR SceneCore (I4f47e)
- Cập nhật quy tắc Jetpack XR Scenecore
ProGuard
để ngănAbstractMethodError
cho các ứng dụng tối giản. (I91a01)
Phiên bản 1.0.0-alpha02
Ngày 12 tháng 2 năm 2025
Phát hành androidx.xr.scenecore:scenecore:1.0.0-alpha02
và androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02
. Phiên bản 1.0.0-alpha02 bao gồm các thay đổi sau.
Thay đổi có thể gây lỗi sắp tới ảnh hưởng đến các ứng dụng được tạo trước phiên bản 1.0.0-alpha02
- Các phương thức của nhà máy đã được chuyển từ lớp
Session
sang một phương thức đồng hành trên từng loại tương ứng:Session.createActivityPanelEntity(Dimensions, String, Activity, Pose)
đã bị xoá và thay thế bằngActivityPanelEntity.create(Session, Dimensions, String, Pose)
Session.createAnchorEntity(Anchor)
đã bị xoá và thay thế bằngAnchorEntity.create(Session, Anchor)
Session.createAnchorEntity(Dimensions, Int, Int, Duration)
đã bị xoá và thay thế bằngAnchorEntity.create(Session, Dimensions, Int, Int, Duration)
Session.createEntity(String, Pose)
đã bị xoá và thay thế bằngContentlessEntity.create(Session, String, Pose)
Session.createExrImageResource(String)
đã bị xoá và thay thế bằngExrImage.create(Session, String)
Session.createGltfEntity(GltfModel, Pose)
đã bị xoá và thay thế bằngGltfModelEntity.create(Session, GltfModel, Pose)
Session.createGltfModelResource(String)
đã bị xoá và thay thế bằngGltfModel.create(Session, String)
Session.createInteractableComponent(Executor, InputEventListener)
đã bị xoá và thay thế bằngInteractableComponent.create(Session, Executor, InputEventListener)
Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean)
đã bị xoá và thay thế bằngMovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)
Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose)
đã bị xoá và thay thế bằngPanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)
Session.createResizableComponent(Dimensions, Dimensions)
đã bị xoá và thay thế bằngResizableComponent.create(Session, Dimensions, Dimensions)
Session.createStereoSurfaceEntity(Int, Dimensions, Pose)
đã bị xoá và thay thế bằngStereoSurface.create(Session, Int, Dimensions, Pose)
- Các phương thức không dùng nữa sau đây đã bị xoá:
Session.canEmbedActivityPanel(Activity)
đã bị xóa. Thay vào đó, hãy sử dụnggetSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY)
.Session.hasSpatialCapability(Int)
đã bị xóa. Hàm này đã được thay thế để sử dụnggetSpatialCapabilities().hasCapability()
như một cách phân vùng rõ ràng hơn để kiểm tra sự hiện diện của các chức năng không gian vìgetSpatialCapabilities()
trả về một đối tượngSpatialCapabilities
.Session.requestFullSpaceMode()
đã bị xoá và thay thế bằngSpatialEnvironment.requestFullSpaceMode()
Session.requestHomeSpaceMode()
đã bị xoá và thay thế bằngSpatialEnvironment.requestHomeSpaceMode()
Session.setFullSpaceMode(Bundle)
vàSession.setFullSpaceModeWithEnvironmentInherited(Bundle)
đã được di chuyển sang các hàm mở rộng. Các tệp của nhà phát triển sẽ cần thêm nội dung nhập mới để truy cập:import androidx.xr.scenecore.setFullSpaceMode
import androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
Session.setPreferredAspectRatio(Activity, Float)
đã được chuyển sang một hàm mở rộng. Các tệp nhà phát triển sẽ cần thêm nội dung nhập mới để truy cập:import androidx.xr.scenecore.setPreferredAspectRatio
Session.getEntitiesOfType(Class<out T>)
vàSession.getEntityForRtEntity(RtEntity)
đã được di chuyển sang các hàm mở rộng. Các tệp của nhà phát triển sẽ cần thêm nội dung nhập mới để truy cập:import androidx.xr.scenecore.getEntitiesOfType
import androidx.xr.scenecore.getEntityForRtEntity
- Đã xóa
Session.unpersistAnchor(Anchor)
- Đã xóa
Session.createPersistedAnchorEntity(UUID)
Vấn đề đã biết
PanelEntity.setCornerRadius()
vàActivityPanelEntity.setCornerRadius()
có thể không có hiệu lực cho đến khi bảng điều khiển được di chuyển vào lần tiếp theo. Bạn có thể giảm thiểu vấn đề này bằng cách di chuyển bảng điều khiển đến vị trí hiện tại- Khi
BoundsChanged
được gọi trênActivitySpace
, một sốActivityPose
có thể chưa được cập nhật đúng cách. Thông tin này sẽ được cập nhật trong cuộc gọiOnSpaceUpdated
tiếp theo vào ngàyActivitySpace
Thay đổi có thể gây lỗi và thay đổi về hành vi
PanelEntity
vàActivityPanelEntity
sẽ có bán kính góc mặc định là 32 dp trở xuống nếu bảng điều khiển có chiều rộng hoặc chiều cao nhỏ hơn 32 dp
API và chức năng mới
- Giới thiệu
StereoSurface.CanvasShape
, cho phép tạo các canvasSpherical
vàHemispherical
để kết xuất nội dung nghe nhìn sống động. StereoSurfaceEntity.create()
hiện chấp nhận tham sốCanvasShape
. (Tham số này hiện bị bỏ qua, nhưng sẽ được dùng trong một bản phát hành sau này)StereoSurfaceEntity.create()
không còn lấy tham sốDimensions
nữa. Các ứng dụng phải kiểm soát kích thước của canvas bằng cách đặtCanvasShape
StereoSurfaceEntity
có một thành phầnCanvasShape
mà bạn có thể đặt một cách linh động.StereoSurfaceEntity.dimensions
hiện là một thuộc tính chỉ có thể đọc; các ứng dụng nên đặtCanvasShape
để thay đổi kích thước.StereoSurfaceEntity
hiện cho phép đặt lạiStereoMode
sau khi khởi tạo.
Các thay đổi khác
- Giảm minSDK thời gian biên dịch xuống còn 24. Tất cả các API Jetpack XR đều tiếp tục yêu cầu API 34 trong thời gian chạy.
- Nhà máy phiên của
SceneCore
(Session.create
) không còn khởi chạy ý định để có được quyềnSCENE_UNDERSTANDING
nữa. Thay vào đó, ứng dụng khách phải yêu cầu người dùng cấp quyền một cách rõ ràng trước khi cố gắng tạo các neo. Việc tạo điểm neo sẽ không thành công nếu người dùng không cấp quyền.
Sửa lỗi
getActivitySpacePose()
đã được sửa để tính đến tỷ lệActivitySpace
bằng cách trả về các giá trị dịch theo mét được chia tỷ lệ thay vì luôn trả về các mét không được chia tỷ lệ.transformPoseTo
hiện cũng sử dụng các đơn vị phù hợp để tính toán các thay đổi về toạ độ khiActivitySpace
có trong nguồn hoặc đích đến.- Giờ đây, skybox sẽ được đặt thành skybox toàn màu đen bất cứ khi nào một lựa chọn ưu tiên skybox rỗng được truyền bằng
setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom))
. Để quay lại skybox và thành phần hình học mặc định của hệ thống, hãy sử dụngsetSpatialEnvironmentPreference(null).
Phiên bản 1.0.0-alpha01
Ngày 12 tháng 12 năm 2024
Phát hành androidx.xr.scenecore:scenecore-* 1.0.0-alpha01
.
Các tính năng của bản phát hành ban đầu Bản phát hành ban đầu cho nhà phát triển của Jetpack SceneCore, một thư viện biểu đồ cảnh 3D để tạo và thao tác với các cảnh và môi trường sống động. Thư viện này cho phép bạn đặt và sắp xếp các mô hình 3D cũng như bảng nội dung tương ứng với nhau và với môi trường ảo hoặc thực tế.
- SpatialEnvironment: Tạo trải nghiệm hoàn toàn sống động bằng hình ảnh skybox và/hoặc hình học mô hình 3D làm bối cảnh cho cảnh XR của môi trường. Hoặc bật chế độ nhìn xuyên qua để cảnh ảo của bạn có thể tích hợp với môi trường thực tế của người dùng.
- PanelEntity: Thêm nội dung 2D vào cảnh 3D bằng cách nhúng các bố cục và Hoạt động Android tiêu chuẩn vào các bảng điều khiển được không gian hoá có thể nổi hoặc được cố định vào các bề mặt trong thế giới thực.
- GltfModelEntity: Đặt, tạo ảnh động và tương tác với các mô hình 3D trong cảnh. SceneCore hỗ trợ định dạng tệp glTF để dễ dàng tích hợp với các mô hình hiện có.
- SpatialAudio: Thêm các nguồn âm thanh xung quanh và âm thanh tại một điểm vào cảnh 3D để có âm thanh không gian sống động và chân thực.
- StereoSurfaceEntity: SceneCore hỗ trợ định tuyến nội dung cho mắt trái/phải được kết xuất trên một Surface của Android. Bạn có thể dùng thành phần này để kết xuất nội dung lập thể ở định dạng song song hoặc trên dưới, chẳng hạn như ảnh lập thể, video 3D hoặc các giao diện người dùng khác được kết xuất động. Các ứng dụng nên sử dụng MediaPlayer hoặc ExoPlayer để giải mã video.
- Hệ thống thành phần: SceneCore cung cấp một hệ thống thành phần mạnh mẽ và linh hoạt để thêm các chức năng vào nội dung XR của bạn, bao gồm cả các chức năng cho phép người dùng di chuyển, thay đổi kích thước và tương tác với các mô hình và bảng điều khiển.
- Điểm neo: Khi bật chế độ nhìn xuyên qua, bạn có thể gắn các bảng và mô hình vào các bề mặt thực tế, giúp người dùng tích hợp liền mạch nội dung ảo vào môi trường thực tế của họ.
- Tư thế người dùng: Truy cập vào vị trí của người dùng trong cảnh ảo để định hướng nội dung xung quanh vị trí của người dùng.
- SpatialCapabilities: Tạo các ứng dụng hoàn toàn thích ứng, tận dụng các chức năng không gian khi có sẵn, chẳng hạn như định vị 3D cho nội dung giao diện người dùng. Không chỉ vậy, ứng dụng của bạn còn có thể theo dõi các thay đổi về chức năng trong khi ứng dụng đang thực thi, để sửa đổi trải nghiệm dựa trên cách người dùng đang sử dụng thiết bị Android XR của họ.
Lỗi đã biết
- Hiện tại, bạn cần có minSDK là 30 để sử dụng Jetpack SceneCore. Để khắc phục, hãy thêm mục nhập tệp kê khai
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>
sau đây để có thể tạo và chạy với minSDK là 23. - Phiên có thể trở nên không hợp lệ trong nhiều trường hợp tự động tạo lại Hoạt động, bao gồm cả việc đổi kích thước bảng điều khiển chính, kết nối thiết bị ngoại vi và chuyển đổi giữa chế độ sáng và tối. Nếu bạn gặp phải vấn đề về việc vô hiệu hoá phiên, thì các giải pháp tạm thời bao gồm việc làm cho bảng điều khiển chính không thể thay đổi kích thước, sử dụng một thực thể bảng điều khiển động, tắt tính năng tạo lại hoạt động cho các thay đổi cụ thể về cấu hình hoặc tắt các thay đổi về giao diện ở chế độ sáng/tối.
- GltfEntity không hỗ trợ các thành phần có thể di chuyển và đổi kích thước.
- Entity.getSize() không được hỗ trợ trên GltfEntity.
- Các ứng dụng Jetpack XR phải yêu cầu quyền
android.permission.SCENE_UNDERSTANDING
trong AndroidManifest. - Chỉ thiết bị Android XR mới hỗ trợ việc tạo phiên. Tại thời điểm này, nếu tạo một Phiên và cố gắng sử dụng Phiên đó trên một thiết bị không phải Android XR, bạn sẽ gặp phải một RuntimeException.
- Việc đặt skybox thành giá trị rỗng thông qua `SpatialEnvironment.setSpatialEnvironmentPreference()` không dẫn đến skybox màu đen như được ghi lại. Điều này có thể dẫn đến việc sử dụng skybox mặc định của hệ thống hoặc không có thay đổi nào đối với skybox hiện tại.
- Các ứng dụng SceneCore nên thêm
implementation(“com.google.guava:listenablefuture-1.0”)
vào cấu hình Gradle cho các phần phụ thuộc của ứng dụng. Trong một bản phát hành trong tương lai, scenecore sẽ bao gồm thư viện này dưới dạng một phần phụ thuộcapi
để các ứng dụng không cần khai báo rõ ràng. - SceneCore nhầm lẫn khi đưa
com.google.guava:guava-31.1-android
vàcom.google.protobuf:protobuf-javalite
vào làm các phần phụ thuộc bắc cầu. Nếu điều này dẫn đến lỗi trùng lặp lớp trong bản dựng, bạn có thể loại trừ hai phần phụ thuộc này một cách an toàn. - Nếu ứng dụng của bạn sử dụng SceneCore và bật ProGuard, thì ứng dụng sẽ gặp sự cố khi bạn tạo một Phiên. Để khắc phục, hãy tắt ProGuard. Hãy xem hướng dẫn này để biết thêm thông tin về cách bật ProGuard.