{ } { }

Jetpack SceneCore

Tạo và thao tác với biểu đồ cảnh Android XR bằng nội dung 3D.
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 12 tháng 2 năm 2025 - - - 1.0.0-alpha02

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-alpha01"
    // 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-alpha01"
}

Kotlin

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

Để 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.

Báo lỗi mới

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-alpha02

Ngày 12 tháng 2 năm 2025

Phát hành androidx.xr.scenecore:scenecore:1.0.0-alpha02androidx.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 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:
    • Xoá Session.createActivityPanelEntity(Dimensions, String, Activity, Pose) và thay thế bằng ActivityPanelEntity.create(Session, Dimensions, String, Pose)
    • Xoá Session.createAnchorEntity(Anchor) và thay thế bằng AnchorEntity.create(Session, Anchor)
    • Xoá Session.createAnchorEntity(Dimensions, Int, Int, Duration) và thay thế bằng AnchorEntity.create(Session, Dimensions, Int, Int, Duration)
    • Xoá Session.createEntity(String, Pose) và thay thế bằng ContentlessEntity.create(Session, String, Pose)
    • Xoá Session.createExrImageResource(String) và thay thế bằng ExrImage.create(Session, String)
    • Xoá Session.createGltfEntity(GltfModel, Pose) và thay thế bằng GltfModelEntity.create(Session, GltfModel, Pose)
    • Xoá Session.createGltfModelResource(String) và thay thế bằng GltfModel.create(Session, String)
    • Xoá Session.createInteractableComponent(Executor, InputEventListener) và thay thế bằng InteractableComponent.create(Session, Executor, InputEventListener)
    • Xoá Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean) và thay thế bằng MovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)
    • Xoá Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose) và thay thế bằng PanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)
    • Xoá Session.createResizableComponent(Dimensions, Dimensions) và thay thế bằng ResizableComponent.create(Session, Dimensions, Dimensions)
    • Xoá Session.createStereoSurfaceEntity(Int, Dimensions, Pose) và thay thế bằng StereoSurface.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ụng getSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY).
    • Session.hasSpatialCapability(Int) đã bị xóa. Phương thức này đã được thay thế bằng cách sử dụng getSpatialCapabilities().hasCapability() như một cách phân chia rõ ràng hơn để kiểm tra xem có các chức năng không gian hay không vì getSpatialCapabilities() trả về một đối tượng SpatialCapabilities.
    • Xoá Session.requestFullSpaceMode() và thay thế bằng SpatialEnvironment.requestFullSpaceMode()
    • Xoá Session.requestHomeSpaceMode() và thay thế bằng SpatialEnvironment.requestHomeSpaceMode()
  • Session.setFullSpaceMode(Bundle)Session.setFullSpaceModeWithEnvironmentInherited(Bundle) đã được chuyển sang các hàm mở rộng. Các tệp dành cho nhà phát triển sẽ cần thêm các lệnh 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 dành cho nhà phát triển sẽ cần thêm lệnh nhập mới để truy cập:
    • import androidx.xr.scenecore.setPreferredAspectRatio
  • Session.getEntitiesOfType(Class<out T>)Session.getEntityForRtEntity(RtEntity) đã được chuyển sang các hàm mở rộng. Các tệp dành cho nhà phát triển sẽ cần thêm các lệnh 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()ActivityPanelEntity.setCornerRadius() có thể không có hiệu lực cho đến khi bảng điều khiển được di chuyển tiếp theo, bạn có thể giảm thiểu điều này bằng cách di chuyển bảng điều khiển về vị trí hiện tại
  • Khi BoundsChanged được gọi trên ActivitySpace, một số ActivityPose có thể chưa được cập nhật chính xác. Thông tin này sẽ được cập nhật trong lệnh gọi OnSpaceUpdated sau trên ActivitySpace

Thay đổi có thể gây lỗi và thay đổi về hành vi

  • PanelEntityActivityPanelEntity 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

Các API và tính năng mới

  • Giới thiệu StereoSurface.CanvasShape, cho phép tạo các canvas SphericalHemispherical để kết xuất nội dung nghe nhìn sống động.
  • StereoSurfaceEntity.create() hiện chấp nhận tham số CanvasShape. (Thông số này hiện bị bỏ qua nhưng sẽ được sử dụng trong bản phát hành sau này)
  • StereoSurfaceEntity.create() không còn nhận tham số Dimensions. Các ứng dụng phải kiểm soát kích thước của canvas thông qua việc thiết lập CanvasShape
  • StereoSurfaceEntity có một thành phần CanvasShape có thể được đặt một cách linh động.
  • StereoSurfaceEntity.dimensions hiện là thuộc tính chỉ có thể đọc; các ứng dụng nên đặt CanvasShape để thay đổi kích thước.
  • StereoSurfaceEntity hiện cho phép đặt lại StereoMode sau khi tạo.

Các thay đổi khác

  • Giảm minSDK tại thời điểm biên dịch xuống còn 24. Tất cả API Jetpack XR vẫn yêu cầu API 34 trong thời gian chạy.
  • Nhà máy phiên (Session.create) của SceneCore không còn khởi chạy ý định để có được quyền SCENE_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 neo. Việc tạo 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 trong mét theo tỷ lệ thay vì luôn trả về mét không theo 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ạ độ khi ActivitySpace liên quan đến nguồn hoặc đích.
  • Giờ đây, hộp bầu trời sẽ được đặt thành hộp bầu trời toàn màu đen bất cứ khi nào bạn truyền tuỳ chọn hộp bầu trời rỗng bằng setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom)). Để quay lại hộp trời và hình học mặc định của hệ thống, hãy sử dụng setSpatialEnvironmentPreference(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 dành 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 và bảng nội dung tương ứng với nhau cũng như môi trường ảo hoặc thực tế của bạn.

  • SpatialEnvironment: Tạo trải nghiệm sống động bằng hình ảnh hộp bầu trời và/hoặc hình học mô hình 3D làm phông nền cho cảnh XR của môi trường. Hoặc bật tính năng truyền để cảnh ảo của bạn có thể tích hợp với môi trường thực 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 không gian có thể nổi hoặc được neo vào các bề mặt thực tế.
  • 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 nguồn âm thanh xung quanh và điểm vào cảnh 3D để có âm thanh không gian sống động, chân thực.
  • StereoSurfaceEntity: SceneCore hỗ trợ định tuyến mắt trái/phải của nội dung được kết xuất trên một Surface Android. Bạn có thể dùng tính năng này để kết xuất nội dung âm thanh nổi ở định dạng cạnh nhau hoặc trên dưới, chẳng hạn như ảnh âm thanh nổi, video 3D hoặc các giao diện người dùng được kết xuất động khác. 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, bao gồm cả các tính năng hỗ trợ người dùng di chuyển, đổi kích thước và tương tác với các mô hình và bảng điều khiển.
  • Mối liên kết: Khi bật tính năng truyền tải, bạn có thể đính kèm bảng điều khiển 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 của bạn xung quanh vị trí của người dùng.
  • SpatialCapabilities: Tạo các ứng dụng thích ứng hoàn toàn tận dụng các khả năng không gian khi có, chẳng hạn như định vị nội dung giao diện người dùng theo 3D. Không chỉ vậy, ứng dụng của bạn còn có thể theo dõi các thay đổi đối với 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.

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à thay đổ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, bạn có thể khắc phục bằng cách không thay đổi kích thước bảng điều khiển chính, sử dụng thực thể bảng điều khiển động, tắt tính năng tạo lại hoạt động đối với 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.
  • Các thành phần có thể di chuyển và thay đổi kích thước không được hỗ trợ trên GltfEntity.
  • Entity.getSize() không được hỗ trợ trên GltfEntity.
  • Các ứng dụng Jetpack XR bắt buộc phải yêu cầu quyền android.permission.SCENE_UNDERSTANDING trong AndroidManifest.
  • Tính năng tạo phiên chỉ được hỗ trợ trên thiết bị Android XR. 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ẽ nhận được một RuntimeException.
  • Việc đặt hộp bầu trời thành rỗng thông qua `SpatialEnvironment.setSpatialEnvironmentPreference() không dẫn đến hộp bầu trời màu đen đồng nhất như đã ghi nhận. Điều này có thể dẫn đến hộp bầu trời mặc định của hệ thống hoặc không thay đổi hộp bầu trời hiện tại.
  • Ứng dụng SceneCore phải 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 bản phát hành trong tương lai, scenecore sẽ đưa thư viện này vào dưới dạng phần phụ thuộc api để ứng dụng không cần phải khai báo rõ ràng.
  • SceneCore bao gồm com.google.guava:guava-31.1-androidcom.google.protobuf:protobuf-javalite dưới dạng phần phụ thuộc bắc cầu một cách không chính xác. Nếu điều này dẫn đến lỗi lớp trùng lặp trong bản dựng, bạn có thể loại trừ an toàn 2 phần phụ thuộc này.
  • 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 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.