Android XR 是 Android 平台和生態系統的擴充功能。Android XR SDK 可讓您使用熟悉的 Android 架構和工具,或使用 OpenXR 和 WebXR 等開放標準,建構 XR 應用程式。所有相容的行動或大螢幕應用程式,都可以透過 Play 商店安裝在 XR 頭戴式裝置上。請參閱相容性注意事項,瞭解您的應用程式是否相容。
本指南將說明下列各項內容:
- 選擇開發工具和技術
- 為 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 for 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。
設計 XR
XR 可擴展設計介面,讓您不必侷限於傳統的平面螢幕,設計出結合實境與虛擬實境的沉浸式體驗。無論您是要打造全新體驗,還是要為現有應用程式新增沉浸式元素,都可以參考 Android XR 設計指南,輕鬆上手。
設定應用程式的資訊清單檔案
與其他 Android 應用程式專案一樣,Android XR 應用程式必須有 AndroidManifest.xml 檔案,其中包含特定的資訊清單設定。資訊清單檔案會將您應用程式的基本資訊提供給 Android 建構工具、Android 作業系統和 Google Play。詳情請參閱應用程式資訊清單總覽指南。
對於XR 差異化應用程式,資訊清單檔案必須包含下列元素和屬性:
PROPERTY_ACTIVITY_XR_START_MODE 屬性
android:name="android.window.PROPERTY_ACTIVITY_XR_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 建構的應用程式)
使用這個啟動模式,即可在 Google Home 空間中啟動應用程式。在 Home Space 中,多個應用程式可以並排執行,讓使用者執行多項工作。任何行動或大螢幕 Android 應用程式都能在 Home Space 中運作,包括使用 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 建構的應用程式)
使用這個啟動模式,即可在 Full Space 中啟動應用程式。在「Full Space」模式中,一次只能執行一個應用程式,且沒有空間邊界,所有其他應用程式都會隱藏。
<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 建構的應用程式會在 Full Space 中啟動,且必須使用 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>
XR 應用程式的 PackageManager 功能
透過 Google Play 商店發行應用程式時,您可以在應用程式資訊清單中指定所需的硬體或軟體功能。uses-feature
元素可讓 Play 商店適當篩選向使用者顯示的應用程式。
以下功能僅適用於 XR 應用程式。
android.software.xr.immersive
如果應用程式指定 Android XR 平台,且只在支援 XR 的平台上執行,請將值設為 true。如果應用程式具有部分 XR 最佳化功能,但也可在非 XR 裝置上執行,請將值設為 false。
使用 OpenXR 或 Unity 建構的應用程式必須將這個值設為 true。
<uses-feature android:name="android.software.xr.immersive" android:required="true" />
android.hardware.xr.input.controller
這項功能表示應用程式需要高精確度的 6DoF (自由度) 動作控制器輸入內容才能正常運作。如果您的應用程式支援控制器,且無法在沒有控制器的情況下運作,請將值設為 true。如果應用程式支援控制器,但不必使用控制器即可運作,請將其設為 false。
<uses-feature android:name="android.hardware.xr.input.controller" android:required="true" />
android.hardware.xr.input.hand_tracking
這個標記表示應用程式需要高精確度的手部追蹤功能才能正常運作,包括使用者手部關節的位置、方向和速度。如果應用程式支援手勢追蹤,且無法在沒有手勢追蹤的情況下運作,請將值設為 true。如果應用程式支援手勢追蹤,但不必使用這項功能,請將其設為 false。
<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="true" />
android.hardware.xr.input.eye_tracking
這個標記表示應用程式需要高精確度的眼球追蹤輸入功能才能正常運作。如果您的應用程式支援眼睛追蹤輸入功能,且無法在沒有該功能的情況下運作,請將值設為 true。如果應用程式支援眼睛追蹤輸入功能,但不必使用這項功能,請將其設為 false。
<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />
行動和大螢幕應用程式的應用程式資訊清單相容性考量
如適用於 XR 應用程式的 PackageManager 功能一節所述,應用程式會在應用程式資訊清單的 <uses-feature>
元素中宣告功能,以便宣告使用該功能。某些功能 (例如電話或 GPS) 可能無法與所有裝置相容。
不支援的功能
Google Play 商店篩選應用程式會使用下列 Android 功能宣告,篩選可在裝置上安裝的應用程式。
相機硬體
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.level.full
連線能力
android.hardware.ipsec_tunnel_migration
裝置設定
板型規格設定
android.hardware.type.automotive
android.hardware.type.embedded
android.hardware.type.television
android.software.leanback_only
輸入
android.software.input_methods
位置
近距離無線通訊
安全性設定和硬體
android.hardware.se.omapi.uicc
android.hardware.biometrics.face
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.relative_humidity
android.hardware.sensor.stepcounter
android.hardware.sensor.stepdetector
軟體設定
android.software.connectionservice
android.software.expanded_picture_in_picture
android.software.live_wallpaper
android.software.picture_in_picture
android.software.wallet_location_based_suggestions
電話通訊系統
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.hardware.vr.headtracking
android.hardware.vr.high_performance
小工具
瞭解 XR 的權限
就像行動裝置和其他板型規格的應用程式一樣,XR 應用程式提供的部分功能可能需要在應用程式的 AndroidManifest 檔案中宣告權限。在危險權限的情況下,應用程式可能需要要求執行階段權限。如需更深入的資訊,請參閱「Android 中的權限」和「權限最佳做法」。
延展實境功能的權限
XR 應用程式可能會使用下列權限。本節中的所有權限都視為危險權限,因此您必須在應用程式資訊清單中宣告這些權限,並在執行階段提出要求。
android.permission.EYE_TRACKING
需要此權限的用途
代表使用者的眼睛姿勢和方向,用於顯示圖片
需要此權限的 Jetpack XR SDK 功能
不適用
需要此權限的 OpenXR 擴充功能
需要此權限的 Unity 功能
Android XR:擴增實境臉部
android.permission.EYE_TRACKING_FINE
需要此權限的用途
視線輸入和互動
需要此權限的 Jetpack XR SDK 功能
不適用
需要此權限的 OpenXR 擴充功能
需要此權限的 Unity 功能
android.permission.FACE_TRACKING
需要此權限的用途
追蹤及算繪臉部表情
需要此權限的 Jetpack XR SDK 功能
不適用
需要此權限的 OpenXR 擴充功能
需要此權限的 Unity 功能
android.permission.HAND_TRACKING
需要此權限的用途
追蹤手部關節姿勢和角速度和線速度;使用網格表示使用者的手
需要此權限的 Jetpack XR SDK 功能
不適用
需要此權限的 OpenXR 擴充功能
需要此權限的 Unity 功能
android.permission.SCENE_UNDERSTANDING
需要此權限的用途
光線估算;將穿透投影到網格表面;針對環境中的可追蹤項目執行光線投射;平面追蹤;物件追蹤;使用遮蔽和命中測試的深度;持續錨點。
需要此權限的 Jetpack XR SDK 功能
飛機追蹤
點擊測試
錨定持續性
需要此權限的 OpenXR 擴充功能
需要此權限的 Unity 功能
確保 Android XR 應用程式品質
如要確保應用程式提供良好的使用者體驗,請詳閱 Android XR 應用程式品質指南。
封裝及發布 Android XR 應用程式
Android XR 可透過 Google Play,為 XR 頭戴式裝置提供各式各樣的應用程式和體驗。在封裝及發行 Android XR 應用程式的指南中,您可以找到有關 Play 商店和 Play 管理中心的入門資訊、發布途徑、準備 Android 應用程式套件,以及應用程式大小限制的資訊。