針對 Android XR 建構的總覽

Android XR 是 Android 平台和生態系統的擴充功能,Android XR SDK 的設計宗旨,是讓您使用熟悉的 Android 架構和工具,或使用 OpenXR 和 WebXR 等開放標準,建構 XR 應用程式。你可以在 XR 頭戴式裝置上透過 Play 商店安裝所有相容的行動或大螢幕應用程式。請參閱相容性注意事項,確認應用程式是否相容。

本指南說明下列領域:

  • 選取開發工具和技術
  • 設計 Android XR 應用程式
  • 設定應用程式的資訊清單檔案
  • 應用程式資訊清單相容性注意事項
  • 瞭解 Android XR 的權限
  • 驗證 Android XR 應用程式品質
  • 封裝及發布 Android XR 應用程式

選取開發工具和技術

為 Android XR 建構應用程式時,您可以選擇下列開發平台和技術:

Jetpack XR SDK

Jetpack XR SDK 包含 Android XR Jetpack 程式庫,可充分運用 XR 裝置的獨特功能。如要執行下列任一操作,請先使用這個 SDK:

  • 將現有的 Android 手機或平板電腦應用程式最佳化或升級
  • 使用 Android Studio 和 Jetpack 建構新的 Android XR 應用程式

如果您已熟悉如何使用 Android Jetpack 進行開發,Jetpack XR SDK 就是您的最佳選擇。這項工具可與這些架構和程式庫無縫整合,讓您運用現有知識建構沉浸式 XR 體驗。

進一步瞭解如何使用 Jetpack XR SDK 進行開發

Unity

Unity Engine 是即時 3D 開發引擎,可讓藝術家、設計師和開發人員協作,打造沉浸式互動體驗。Unity 的 Android XR 支援功能可讓您高度控管所開發的 3D 體驗,同時享有 Unity 既有的 OpenXR 支援和開發人員生態系統。

如果您已使用 Unity 建構 XR 體驗,或是熟悉 Unity 開發作業,請從這個選項開始。

進一步瞭解如何使用 Unity 為 Android XR 開發應用程式

OpenXR

OpenXR 是免權利金的開放標準,可用於建構高效能的跨平台 XR 體驗。Android XR 支援 OpenXR 1.0 和 1.1,我們也正在為 Android XR 擴充規格。由於 Android XR 是以開放標準為基礎建構,因此支援 OpenXR 和 Android 的開發工具應與 Android XR 相容。

進一步瞭解 Android XR 的 OpenXR 支援功能

WebXR

WebXR 可讓您為網路打造沉浸式體驗。在相容的網頁瀏覽器 (例如 Android XR 上的 Chrome) 中,存取 VR 和 AR 裝置。

如果您想為網頁建構 XR 體驗,或是想在網頁應用程式中新增 XR 功能,請從這個選項開始。現有的 WebXR 體驗也能在 Android XR 上運作。

進一步瞭解如何使用 WebXR 建構網頁應用程式

設計 XR 應用程式

XR 將設計介面擴展到傳統平面螢幕以外,您可以設計融合實體和虛擬實境的沉浸式體驗。無論您是打造全新體驗,還是為現有應用程式新增沉浸式元素,Android XR 設計指南都能協助您入門。

設定應用程式的資訊清單檔案

與其他 Android 應用程式專案一樣,Android XR 應用程式必須有 AndroidManifest.xml 檔案,並包含特定資訊清單設定。資訊清單檔案會將您應用程式的基本資訊提供給 Android 建構工具、Android 作業系統和 Google Play。詳情請參閱應用程式資訊清單總覽指南

如果是XR 差異化應用程式,資訊清單檔案必須包含下列元素和屬性:

PROPERTY_XR_ACTIVITY_START_MODE 屬性

android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" 屬性可讓系統瞭解活動啟動時應採用的模式。

這項屬性有三個可能的值:

  • XR_ACTIVITY_START_MODE_HOME_SPACE (僅限 Jetpack XR SDK)
  • XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED (僅限 Jetpack XR SDK)
  • XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED (僅限 OpenXR)

XR_ACTIVITY_START_MODE_HOME_SPACE

(僅限使用 Jetpack XR SDK 建構的應用程式)

使用這個啟動模式,在首頁空間啟動應用程式。在首頁空間中,多個應用程式可同時執行,因此使用者可以多工處理。任何行動裝置或大螢幕 Android 應用程式,以及使用 Jetpack XR SDK 建構的 XR 應用程式,都可以在首頁空間中運作。

<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
           android:value="XR_ACTIVITY_START_MODE_HOME_SPACE" />
       <activity
           android:name="com.example.myapp.MainActivity" ... >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>

XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED

(僅限使用 Jetpack XR SDK 建構的應用程式)

使用這個啟動模式,在完整空間中啟動應用程式。在完整空間模式中,一次只能執行一個應用程式,沒有空間限制,所有其他應用程式都會隱藏。


<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
           android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED" />
       <activity
           android:name="com.example.myapp.MainActivity" ... >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>

XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED

(僅限使用 OpenXR 建構的應用程式)

使用 OpenXR 建構的應用程式會在完整空間模式下啟動,且必須使用 XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED 啟動模式。未受管理的完整空間 會向 Android XR 發出信號,指出應用程式使用 OpenXR。


<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
           android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED" />
       <activity
           android:name="com.example.myapp.MainActivity" ... >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>

android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" 屬性表示應用程式應以特定類型的邊界啟動。如果應用程式的設計目的是讓使用者在實體空間中移動,則必須指定 XR_BOUNDARY_TYPE_LARGE。指定 XR_BOUNDARY_TYPE_NO_RECOMMENDATION 不會提供安全邊界類型建議,因此系統會使用已在使用的類型。

<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
           android:value="XR_BOUNDARY_TYPE_LARGE" />
   </application>
</manifest>

<uses-native-library> OpenXR

(僅限使用 OpenXR 建構的應用程式)

OpenXR 應用程式必須宣告使用原生 OpenXR 程式庫,才能順利載入執行階段。如果沒有這項宣告,執行階段將無法載入。

<manifest ... >

    <application ... >

    <uses-native-library andro id:name="libopenxr.google.so" android:required="false" />

       <activity
           android:name="com.example.myapp.MainActivity" ... >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
        </activity>
    </application>
</manifest>

適用於 XR 應用程式的 PackageManager 功能

透過 Google Play 商店發行應用程式時,您可以在應用程式資訊清單中指定必要的硬體或軟體功能。Play 商店會根據 uses-feature 元素,適當篩選向使用者顯示的應用程式。

下列功能適用於 XR 差異化應用程式。

android.software.xr.api.spatial

使用 Jetpack XR SDK 建構的應用程式必須在應用程式資訊清單中加入這項功能。為 android:required 屬性設定的值取決於應用程式的發布管道

如果您的應用程式套件將 XR 差異化功能或內容併入現有的行動裝置 APK,並發布至行動裝置測試群組,請將 android:required 屬性設為 false

<!-- If you are publishing an existing mobile APK using the mobile release track, set android:required to false.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="false" />

如果您的應用程式是專為支援 XR 的裝置建構,並發布至 Android XR 專屬測試群組,請將 android:required 屬性設為 true

<!-- If you are publishing a separate APK for XR using the dedicated Android XR release track, set android:required to true.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="true" />

android.software.xr.api.openxr

以 OpenXR 或 Unity 建構的 Android XR 平台專用應用程式,必須在應用程式資訊清單中加入這項功能,並將 android:required 屬性設為 true

如果應用程式使用 Android XR Extensions Package for Unity 1.0.0 以上版本或 Unity OpenXR: Android XR Package 0.5.0-exp.1 以上版本,就不必手動將這個元素新增至應用程式資訊清單。這兩個套件會為您將這個元素插入應用程式資訊清單。

裝置可以指定這項功能適用的版本,指出裝置支援的最高 OpenXR 版本。較高的 16 位元代表主要編號,較低的 16 位元代表次要編號。舉例來說,如要指定 OpenXR 1.1 版,值會設為 "0x00010001"

應用程式可使用功能版本,指出應用程式所需的 OpenXR 最低版本。舉例來說,如果應用程式需要支援 OpenXR 1.1 版,請宣告下列功能:

<uses-feature android:name="android.software.xr.api.openxr"
    android:version="0x00010001"
    android:required="true" />

android.hardware.xr.input.controller

這項功能表示應用程式需要高精確度的 6DoF (自由度) 動作控制器輸入,才能正常運作。如果應用程式支援控制器,且沒有控制器就無法運作,請將值設為 true。如果應用程式支援控制器,但沒有控制器也能運作,請將其設為 false

<!-- Sets android:required to true, indicating that your app can't function on devices without controllers. -->
<uses-feature android:name="android.hardware.xr.input.controller" android:required="true" />

android.hardware.xr.input.hand_tracking

這個標記表示應用程式需要高精確度的手部追蹤功能才能正常運作,包括使用者手部關節的位置、方向和速度。如果應用程式支援手部追蹤功能,且必須有這項功能才能運作,請將值設為 true。如果應用程式支援手部追蹤,但沒有這項功能也能運作,請將其設為 false

<!-- Sets android:required to true, indicating that your app can't function on devices without hand tracking. -->
<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="true" />

android.hardware.xr.input.eye_tracking

這個標記表示應用程式需要高精確度的眼動追蹤功能,才能正確接收輸入內容。如果應用程式支援眼球追蹤輸入功能,且無法在沒有這項功能的情況下運作,請將值設為 true。如果應用程式支援眼球追蹤輸入,但沒有這項功能也能運作,請將其設為 false

<!-- Sets android:required to true, indicating that your app can't function on devices without eye tracking. -->
<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />

行動裝置和大螢幕應用程式的應用程式資訊清單相容性考量

如「XR 應用程式的 PackageManager 功能」一節所述,應用程式會在應用程式資訊清單的 <uses-feature> 元素中宣告使用的功能。部分功能 (例如電話或 GPS) 可能無法在所有裝置上使用。

不支援的功能

Google Play 商店會篩選應用程式,只顯示可安裝在裝置上的應用程式,篩選依據是下列 Android 功能聲明。

攝影機硬體

android.hardware.camera.ar

android.hardware.camera.autofocus

android.hardware.camera.capability.manual_post_processing

android.hardware.camera.capability.manual_sensor

android.hardware.camera.capability.raw

android.hardware.camera.concurrent

android.hardware.camera.external

android.hardware.camera.flash

android.hardware.camera.level.full

連線能力

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

裝置設定

android.hardware.ram.low

板型規格設定

android.hardware.type.automotive

android.hardware.type.embedded

android.hardware.type.pc

android.hardware.type.television

android.hardware.type.watch

android.software.leanback

android.software.leanback_only

android.software.live_tv

輸入

android.hardware.consumerir

android.software.input_methods

位置

android.hardware.location.gps

近距離無線通訊

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

安全性設定和硬體

android.hardware.se.omapi.ese

android.hardware.se.omapi.sd

android.hardware.se.omapi.uicc

android.hardware.biometrics.face

android.hardware.fingerprint

android.hardware.identity_credential

android.hardware.identity_credential_direct_access

android.hardware.keystore.limited_use_key

android.hardware.keystore.single_use_key

android.hardware.strongbox_keystore

感應器

android.hardware.sensor.accelerometer_limited_axes

android.hardware.sensor.accelerometer_limited_axes_uncalibrated

android.hardware.sensor.ambient_temperature

android.hardware.sensor.barometer

android.hardware.sensor.gyroscope_limited_axes

android.hardware.sensor.gyroscope_limited_axes_uncalibrated

android.hardware.sensor.heading

android.hardware.sensor.heartrate

android.hardware.sensor.heartrate.ecg

android.hardware.sensor.hinge_angle

android.hardware.sensor.light

android.hardware.sensor.relative_humidity

android.hardware.sensor.stepcounter

android.hardware.sensor.stepdetector

軟體設定

android.software.backup

android.software.connectionservice

android.software.expanded_picture_in_picture

android.software.live_wallpaper

android.software.picture_in_picture

android.software.telecom

android.software.wallet_location_based_suggestions

電話通訊系統

android.hardware.telephony

android.hardware.telephony.calling

android.hardware.telephony.cdma

android.hardware.telephony.data

android.hardware.telephony.euicc

android.hardware.telephony.euicc.mep

android.hardware.telephony.gsm

android.hardware.telephony.ims

android.hardware.telephony.mbms

android.hardware.telephony.messaging

android.hardware.telephony.radio.access

android.hardware.telephony.subscription

android.software.sip

android.software.sip.voip

虛擬實境 (舊版)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

小工具

android.software.app_widgets

瞭解 XR 的權限

與行動裝置和其他板型規格的應用程式一樣,XR 應用程式提供的部分功能可能需要應用程式在 AndroidManifest 檔案中宣告權限。如果是危險權限,應用程式可能需要要求執行階段權限。如要瞭解更多深入資訊,請參閱「Android 中的權限」和權限最佳做法

XR 應用程式可能會使用下列權限。本節中的所有權限都屬於危險權限,因此您必須在應用程式資訊清單中宣告這些權限在執行階段要求。

android.permission.EYE_TRACKING_COARSE

代表使用者的眼睛姿勢、狀態和方向,例如用於虛擬人偶。需要低精確度眼動追蹤資料時,請使用這項權限。

Jetpack XR SDK

不適用

OpenXR 擴充功能

Unity 功能

android.permission.EYE_TRACKING_FINE

透過眼球控制選取、輸入和互動。

Jetpack XR SDK

不適用

OpenXR 擴充功能

Unity 功能

android.permission.FACE_TRACKING

追蹤及算繪臉部表情。

Jetpack XR SDK

不適用

OpenXR 擴充功能

Unity 功能

android.permission.HAND_TRACKING

追蹤手部關節姿勢、角速度和線速度;使用使用者雙手的網格表示法。

android.permission.SCENE_UNDERSTANDING_COARSE

光線估算;將透視畫面投影到網格表面;對環境中的可追蹤項目執行光線投射;平面追蹤;物件追蹤;持續性錨點。

android.permission.SCENE_UNDERSTANDING_FINE

深度紋理。

Jetpack XR SDK

不適用

OpenXR 擴充功能

Unity 功能

驗證 Android XR 應用程式品質

如要確認應用程式提供優質的使用者體驗,請參閱 Android XR 應用程式品質指南

封裝及發布 Android XR 應用程式

Android XR 透過 Google Play,在 XR 頭戴式裝置上提供各式各樣的應用程式和體驗。請參閱這份指南,瞭解如何封裝及發行 Android XR 應用程式,包括如何開始使用 Play 商店和 Play 管理中心、發布測試群組、準備 Android App Bundle,以及應用程式大小限制。


OpenXR™ 和 OpenXR 標誌是 The Khronos Group Inc. 的商標,已在中國、歐盟、日本和英國註冊為商標。