產品新訊

Android XR SDK 更新:推出開發人員預覽版 4

5 分鐘閱讀

我們很高興今天推出 Android XR SDK 開發人員預覽版 4,持續致力於統一頭戴式裝置、有線 XR 眼鏡和智慧眼鏡的跨裝置開發作業。為確保平台操作直覺,我們將採用更具描述性的名稱來稱呼外型規格,因此 AI 眼鏡現在稱為音訊眼鏡,顯示 AI 眼鏡則稱為顯示眼鏡。這些變更將於今天起出現在我們的文件中。

本次發布內容包含多項更新,可協助您為 XR 裝置打造絕佳體驗、在 XR 頭戴式裝置上提供更深入的沉浸式體驗,以及簡化在音訊和顯示眼鏡上建立擴增實境體驗的流程。此外,我們的核心程式庫 (包括 XR Runtime、Jetpack SceneCore 和 Jetpack XR 適用的 ARCore) 也即將正式進入 Beta 版!

為協助您搶先取得硬體和資源,在即將推出的裝置 (例如螢幕和音訊眼鏡,以及 XREAL 的 Project Aura) 上建構沉浸式和擴增實境體驗,我們宣布推出 Android XR 開發人員催化劑計畫。如要瞭解詳情,請立即提出申請

為音訊和螢幕眼鏡打造擴增實境體驗

開發人員預覽版 4 推出多項新 API,可協助您建立及測試應用程式,並提供擴增實境體驗程式庫。

Jetpack Projected:裝置可用性和 ProjectedTestRule API

Jetpack Projected 程式庫可協助將應用程式體驗從手機帶到使用者的視野中。我們新增了 Device Availability API,可將 Wear 狀態和連線訊號整合為標準 Android Lifecycle.State 值。您可以根據裝置是否處於穿戴狀態,調整應用程式的行為。

val xrDevice = XrDevice.getCurrentDevice(projectedContext)

// Observe the device lifecycle flow
xrDevice.getLifecycle().currentStateFlow
    .collect { state ->
        when (state) {
            Lifecycle.State.STARTED -> { /* Device is available (worn) */ }
            Lifecycle.State.CREATED -> { /* Device is unavailable (not worn) */ }
            Lifecycle.State.DESTROYED -> { /* Device is DISCONNECTED */ }
        }
    }

為簡化測試,預測測試構件中的新 ProjectedTestRule API 會自動設定預測測試環境。這有助於您編寫簡潔可靠的單元測試,不必使用樣板程式碼。

// from the 'androidx.xr.projected:projected-testing:1.0.0-alpha07' artifact
@get:Rule
val projectedTestRule = ProjectedTestRule()

@Test
fun testProjectedContextInitialization() {
    // by default, ProjectedTestRule automatically creates and connects
    // a projected device before each test
    val projectedContext = ProjectedContext.createProjectedDeviceContext(context)

    // assert the projected context is successfully initialized
    assertThat(projectedContext).isNotNull()
}

Jetpack Compose Glimmer:Google Sans Flex 和新元件

我們為顯示眼鏡提供的 UI 程式庫 Jetpack Compose Glimmer,現在已納入 Google Sans Flex,可提升光學透視螢幕的易讀性。我們也新增了幾項互動式元件:

  • 堆疊:專為觸控板最佳化群組設計,一次顯示一個項目。
  • 標題方塊:提供內容資訊卡的分類和背景資訊。
glimmer (1).gif

為 XR 頭戴式裝置和有線 XR 眼鏡打造沉浸式體驗

如果您想為 XR 頭戴式裝置和有線 XR 眼鏡打造全沉浸式體驗,我們提供多項重大更新。

Beta 版轉換與現代架構

XR 執行階段、Jetpack SceneCore 和 Jetpack XR 感知功能 (深度地圖眼部/手部追蹤、命中測試和空間錨點) 即將推出 Beta 版,因此我們簡化了 Jetpack XR API。我們已移除舊版 Guava 和 RxJava3 套件,改用以 Kotlin 為主的現代架構。

Jetpack SceneCore:glTF 和自訂網格

我們將擴充 3D 模型功能,新增微調 3D 模型和存取特定節點的功能。使用 GltfModelNode,您可以修改姿勢、材質和紋理等屬性,甚至為特定節點執行動畫

// Create a new PBR material
pbrMaterial = KhronosPbrMaterial.create(
    session = xrSession,
    alphaMode = AlphaMode.OPAQUE
)

// Load a texture.
val texture = Texture.create(
    session = xrSession,
    path = Path("textures/texture_name.png")
)

// Apply the texture and configure occlusion to define how the material handles ambient lighting.
pbrMaterial.setOcclusionTexture(
    texture = texture,
    strength = 0.5f
)

// Access the hierarchy of nodes within the model entity.
val entityNodes = entity.nodes

// Find the specific node to apply the material override.
val myEntityNode = entityNodes.find { it.name == "node_name" }

// Apply the PBR material to the node.
myEntityNode?.setMaterialOverride(
   material = newMaterial
)

我們也將自訂網格帶入 SceneCore。自訂網格可讓您以程式輔助方式即時建構幾何圖形,非常適合建立自訂 3D 模型。這項功能將以實驗功能的形式推出,歡迎試用並分享心得!

// Create the mesh
val roadMesh =
    CustomMesh.BuilderFromMeshData(session, roadVertexLayout)
        .addVertexData(ByteBufferRegion(roadDataBuffer, 0, vertexDataSize))
        .setIndexData(ByteBufferRegion(roadDataBuffer, vertexDataSize, indexDataSize))
        .setTopology(MeshSubsetTopology.TRIANGLES)
        .build()

// Define the material
val roadMaterial = KhronosPbrMaterial.create(session, AlphaMode.OPAQUE)

// Instantiate the entity using the custom mesh and material
val roadEntity =
    MeshEntity.create(
        session,
        roadMesh,
        listOf(roadMaterial),
        pose = roadPose,
    )

Compose for XR:原生 glTF 支援

現在 Compose for XR 直接支援原生 glTF,並提供 SpatialGltfModel。搭配 SpatiallGltfModelState 使用,即可存取 glTF 模型中的節點動畫,或用來在 3D 模型中新增紋理和材質。

val myGltfModelState = rememberSpatialGltfModelState(
        source = SpatialGltfModelSource.fromPath(
            Paths.get("models/my_animated_model.glb")
        )
    )

    val myGltfAnimation =
        myGltfModelState.animations.find { it.name == "animation_name" }

    DisposableEffect(myGltfAnimation) {
        myGltfAnimation?.loop()

        onDispose {
            myGltfAnimation?.stop()
        }
    }

    SpatialGltfModel(state = myGltfModelState, modifier = modifier)

Jetpack XR 適用的 ARCore:有線 XR 眼鏡的 Geospatial API 預先發布版

我們也為 Jetpack XR 的 ARCore 推出有線 XR 眼鏡的 Geospatial API 搶先預覽版。這項更新可讓您在超過 87 個國家/地區,將數位內容精確錨定在現實世界中的位置。

結合 ARCore 的視覺定位系統 (VPS) 與 Gemini Live API 的推論和音訊功能,即可建立內容認知體驗,瞭解使用者的位置和方位。想像一下,您建構了身歷其境的 AI 導覽步行行程,可即時提供附近地點的語音說明,將數位資訊與實體環境完美融合。

立即開始建構未來

現在是開發 Android XR 應用程式的最佳時機。Jetpack XR SDK 即將推出 Beta 版,且您可使用一系列強大的新工具,因此請探索下列各個領域,為應用程式打造 XR 體驗!  

閱讀說明文件、探索範例,並查看 XR 實驗

如需完整的技術指南、API 參考資料,以及設定新模擬器的操作說明,請前往 Android 開發人員官方網站。歡迎參考我們的範例和實驗,瞭解我們如何使用這些 API 建構沉浸式空間版面配置、載入 3D 模型、探索空間音訊等!

查看遊戲引擎的新功能

我們已正式支援 Unreal Engine 和 Godot,並推出兩項新工具,可透過 Unity 和 Android XR Interaction Framework 加速開發 Android XR 應用程式。根據您的意見回饋,我們推出了 Android XR 引擎中樞,讓您直接透過偏好的引擎執行體驗,

申請加入 Android XR 開發人員催化計畫

別錯過為最新 Android XR 硬體建構應用程式的機會。立即申請,就有機會取得預先發布版硬體,包括我們的音訊和螢幕眼鏡原型,以及 XREAL 的 Project Aura。

瞭解詳情並立即申請

我們期待看到您打造出色的 XR 體驗,並在今年稍晚推出更多 Android XR 裝置!

如要瞭解這項公告和所有 Google I/O 2026 更新,請前往 io.google

繼續閱讀