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 為 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 建構的應用程式)
使用這個啟動模式,即可在首頁空間中啟動應用程式。在首頁空間中,多個應用程式可同時執行,因此使用者可以多工處理。任何行動裝置或大螢幕 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>
<uses-native-library> OpenXR
(僅限使用 OpenXR 建構的應用程式)
OpenXR 應用程式必須宣告使用原生 OpenXR 程式庫,才能成功載入執行階段。如果沒有這個宣告,執行階段就會載入失敗。
<manifest ... >
<application ... >
<uses-native-library android:name="libopenxr.google.so" android:required="true" />
<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.api.spatial
使用 Jetpack XR SDK 建構的應用程式必須在應用程式資訊清單中加入這項功能。您為 android:required
屬性設定的值取決於應用程式的發布版本群組。
如果應用程式將 XR 差異化功能或內容整合至現有的行動 APK,並發布至行動裝置測試群組,則應將 android:required
屬性設為 false
。如果您的應用程式是專為支援 XR 的裝置建構,且已發布至 Android XR 專屬的發布群組,則應將 android:required
屬性設為 true
。
<uses-feature android:name="android.software.xr.api.spatial" android:required="true" />
android.software.xr.api.openxr
以 Android XR 平台為目標,並使用 OpenXR 或 Unity 建構的應用程式,必須在應用程式資訊清單中加入此功能,並將 android:required
屬性設為 true
。
如果應用程式使用 適用於 Unity 的 Android XR 擴充功能套件 1.0.0 以上版本,或 Unity OpenXR:Android XR 套件 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。
<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 的權限
就像行動裝置和其他板型規格的應用程式一樣,XRAp 應用程式提供的部分功能可能需要在應用程式的 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
追蹤及算繪臉部表情。
android.permission.HAND_TRACKING
追蹤手部關節姿勢和角速度和線速度;使用網格表示使用者的手。
Jetpack XR SDK
OpenXR 擴充功能
Unity 功能
android.permission.SCENE_UNDERSTANDING_COARSE
光源估計;將穿透投影到網格表面;針對環境中的可追蹤項目執行光線投射;平面追蹤;物件追蹤;持續性錨點。
Jetpack XR SDK
OpenXR 擴充功能
Unity 功能
android.permission.SCENE_UNDERSTANDING_FINE
深度紋理。
確保 Android XR 應用程式品質
為確保應用程式能提供優質使用者體驗,請詳閱我們的 Android XR 應用程式品質指南。
封裝及發布 Android XR 應用程式
Android XR 可透過 Google Play,為 XR 頭戴式裝置提供各式各樣的應用程式和體驗。在 封裝及發行 Android XR 應用程式的指南中,您可以找到有關 Play 商店和 Play 管理中心的入門資訊、發布測試群組、準備 Android 應用程式套件,以及應用程式大小限制的資訊。