Android XR là một phần mở rộng của nền tảng và hệ sinh thái Android. Android XR SDK được thiết kế để cho phép bạn tạo các ứng dụng thực tế mở rộng (XR) bằng cách sử dụng các khung và công cụ quen thuộc của Android hoặc sử dụng các tiêu chuẩn mở như OpenXR và WebXR. Tất cả ứng dụng di động hoặc ứng dụng màn hình lớn tương thích đều có thể cài đặt trên kính XR thông qua Cửa hàng Play. Xem xét những điểm cần lưu ý về khả năng tương thích để biết ứng dụng của bạn có tương thích hay không.
Hướng dẫn này giải thích các khía cạnh sau:
- Chọn công cụ và công nghệ phát triển
- Thiết kế ứng dụng cho Android XR
- Định cấu hình tệp kê khai của ứng dụng
- Những điểm cần cân nhắc về khả năng tương thích của tệp kê khai ứng dụng
- Tìm hiểu về các quyền đối với Android XR
- Xác minh chất lượng ứng dụng Android XR
- Đóng gói và phân phối ứng dụng cho Android XR
Chọn các công cụ và công nghệ phát triển
Khi tạo ứng dụng cho Android XR, bạn có thể chọn trong số các nền tảng và công nghệ phát triển sau:
Jetpack XR SDK
Jetpack XR SDK chứa các thư viện Jetpack Android XR được xây dựng để tận dụng các chức năng riêng biệt của thiết bị XR. Hãy bắt đầu bằng SDK này nếu bạn muốn thực hiện một trong những việc sau:
- Tối ưu hoá hoặc cải thiện một ứng dụng hiện có cho thiết bị di động hoặc máy tính bảng Android
- Tạo một ứng dụng Android XR mới bằng Android Studio và Jetpack
Nếu bạn đã quen phát triển bằng Android Jetpack, thì Jetpack XR SDK sẽ là lựa chọn phù hợp với bạn. Thư viện này được thiết kế để tích hợp liền mạch với các khung và thư viện đó, đồng thời cho phép bạn sử dụng kiến thức hiện có để tạo trải nghiệm XR sống động.
Tìm hiểu thêm về cách phát triển bằng SDK Jetpack XR.
Unity
Unity Engine là một công cụ phát triển 3D theo thời gian thực, cho phép các nghệ sĩ, nhà thiết kế và nhà phát triển cộng tác để tạo ra những trải nghiệm sống động và mang tính tương tác. Khả năng hỗ trợ Android XR của Unity giúp bạn kiểm soát ở mức cao các trải nghiệm 3D mà bạn phát triển, đồng thời hưởng lợi từ khả năng hỗ trợ OpenXR đã được thiết lập và hệ sinh thái nhà phát triển của Unity.
Nếu bạn đã có trải nghiệm XR được tạo bằng Unity hoặc nếu bạn quen thuộc với quá trình phát triển Unity, hãy bắt đầu bằng lựa chọn này.
Tìm hiểu thêm về cách phát triển bằng Unity cho Android XR.
OpenXR
OpenXR là một tiêu chuẩn mở, miễn phí bản quyền mà bạn có thể dùng để tạo trải nghiệm XR hiệu suất cao trên nhiều nền tảng. Android XR hỗ trợ OpenXR 1.0 và 1.1, đồng thời chúng tôi đang mở rộng quy cách này bằng các tiện ích mới cho Android XR. Vì Android XR được xây dựng dựa trên các tiêu chuẩn mở, nên các công cụ phát triển hỗ trợ OpenXR và Android sẽ tương thích với Android XR.
Tìm hiểu thêm về khả năng hỗ trợ OpenXR cho Android XR.
WebXR
WebXR cho phép bạn tạo trải nghiệm sống động cho web. Nền tảng này cung cấp quyền truy cập vào các thiết bị thực tế ảo (VR) và thực tế tăng cường (AR) trong các trình duyệt web tương thích, chẳng hạn như Chrome trên Android XR.
Hãy bắt đầu với lựa chọn này nếu bạn muốn tạo trải nghiệm XR cho web hoặc nếu bạn muốn thêm các chức năng XR vào một ứng dụng web. Các trải nghiệm WebXR hiện có cũng sẽ hoạt động trên Android XR.
Tìm hiểu thêm về cách tạo ứng dụng web bằng WebXR.
Thiết kế cho XR
XR mở rộng bề mặt thiết kế vượt ra ngoài màn hình phẳng truyền thống; bạn có thể thiết kế trải nghiệm sống động kết hợp giữa thực tế vật lý và thực tế ảo. Dù bạn đang xây dựng một trải nghiệm hoàn toàn mới hay thêm các phần tử sống động vào một ứng dụng hiện có, hướng dẫn thiết kế cho Android XR có thể giúp bạn bắt đầu.
Định cấu hình tệp kê khai của ứng dụng
Giống như các dự án ứng dụng Android khác, ứng dụng Android XR của bạn phải có một tệp AndroidManifest.xml với các chế độ cài đặt tệp kê khai cụ thể. Tệp kê khai mô tả thông tin thiết yếu về ứng dụng của bạn cho các công cụ xây dựng của Android, hệ điều hành Android và Google Play. Hãy xem hướng dẫn tổng quan về tệp kê khai ứng dụng để biết thêm thông tin.
Đối với các ứng dụng có sự khác biệt về XR, tệp kê khai của bạn phải chứa các phần tử và thuộc tính sau:
Thuộc tính PROPERTY_XR_ACTIVITY_START_MODE
Thuộc tính android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
cho phép hệ thống biết rằng một hoạt động sẽ được chạy ở một chế độ cụ thể khi hoạt động đó bắt đầu.
Thuộc tính này có thể có 3 giá trị:
XR_ACTIVITY_START_MODE_HOME_SPACE
(Chỉ SDK Jetpack XR)XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED
(Chỉ SDK Jetpack XR)XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
(Chỉ OpenXR)
XR_ACTIVITY_START_MODE_HOME_SPACE
(Chỉ dành cho các ứng dụng được tạo bằng SDK Jetpack XR)
Sử dụng chế độ khởi động này để chạy ứng dụng trong Không gian chính. Trong Không gian chính, nhiều ứng dụng có thể chạy song song để người dùng có thể làm nhiều việc cùng lúc. Mọi ứng dụng Android dành cho thiết bị di động hoặc màn hình lớn đều có thể hoạt động ở chế độ Không gian chính, cũng như các ứng dụng XR được tạo bằng Jetpack XR SDK.
<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
(Chỉ dành cho các ứng dụng được tạo bằng SDK Jetpack XR)
Sử dụng chế độ khởi động này để khởi chạy ứng dụng ở chế độ Toàn không gian. Ở chế độ Toàn không gian, chỉ có một ứng dụng chạy tại một thời điểm mà không bị giới hạn về không gian và tất cả các ứng dụng khác đều bị ẩn.
<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
(Chỉ dành cho ứng dụng được xây dựng bằng OpenXR)
Các ứng dụng được tạo bằng OpenXR sẽ khởi chạy ở chế độ Toàn không gian và phải sử dụng chế độ khởi động XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
. Tín hiệu Toàn không gian không được quản lý cho Android XR biết rằng ứng dụng sử dụng 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>
Thuộc tính PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED
Thuộc tính android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
cho biết rằng ứng dụng sẽ được khởi chạy với một loại ranh giới cụ thể. Ứng dụng của bạn cần chỉ định XR_BOUNDARY_TYPE_LARGE
nếu được thiết kế để cho phép người dùng di chuyển trong không gian thực của họ. Việc chỉ định XR_BOUNDARY_TYPE_NO_RECOMMENDATION
không đưa ra đề xuất nào cho loại ranh giới an toàn, vì vậy, hệ thống sẽ sử dụng loại đang được dùng.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
android:value="XR_BOUNDARY_TYPE_LARGE" />
</application>
</manifest>
<uses-native-library> OpenXR
(Chỉ dành cho ứng dụng được xây dựng bằng OpenXR)
Các ứng dụng OpenXR phải khai báo việc sử dụng thư viện OpenXR gốc để tải thành công thời gian chạy của thư viện này. Nếu không có khai báo này, thời gian chạy sẽ không tải được.
<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>
Các tính năng của PackageManager cho ứng dụng XR
Khi phân phối ứng dụng thông qua Cửa hàng Google Play, bạn có thể chỉ định các tính năng phần cứng hoặc phần mềm bắt buộc trong tệp kê khai ứng dụng. Phần tử uses-feature
cho phép Cửa hàng Play lọc các ứng dụng được hiển thị cho người dùng một cách phù hợp.
Các tính năng sau đây dành riêng cho những ứng dụng có sự khác biệt về XR.
android.software.xr.api.spatial
Những ứng dụng được tạo bằng SDK Jetpack XR phải có tính năng này trong tệp kê khai ứng dụng. Giá trị bạn đặt cho thuộc tính android:required
phụ thuộc vào kênh phát hành của ứng dụng.
Nếu gói ứng dụng của bạn có các tính năng hoặc nội dung khác biệt của XR trong một tệp APK hiện có dành cho thiết bị di động và được xuất bản trên kênh phát hành dành cho thiết bị di động, thì hãy đặt thuộc tính android:required
thành 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" />
Nếu ứng dụng của bạn được tạo riêng cho các thiết bị hỗ trợ XR và được xuất bản lên kênh phát hành chuyên biệt Android XR, hãy đặt thuộc tính android:required
thành 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
Các ứng dụng nhắm đến nền tảng Android XR và được tạo bằng OpenXR hoặc Unity phải có tính năng này trong tệp kê khai ứng dụng với thuộc tính android:required
được đặt thành true
.
Những ứng dụng sử dụng Gói tiện ích Android XR cho Unity phiên bản 1.0.0 trở lên hoặc Unity OpenXR: Gói Android XR phiên bản 0.5.0-exp.1 trở lên không cần thêm phần tử này theo cách thủ công vào tệp kê khai ứng dụng. Hai gói này sẽ chèn phần tử này vào tệp kê khai ứng dụng cho bạn.
Các thiết bị có thể chỉ định một phiên bản cho tính năng này, cho biết phiên bản OpenXR cao nhất mà thiết bị hỗ trợ. Số 16 bit lớn hơn đại diện cho số chính và số 16 bit nhỏ hơn đại diện cho số phụ. Ví dụ: để chỉ định OpenXR phiên bản 1.1, giá trị sẽ được đặt thành "0x00010001"
.
Các ứng dụng có thể sử dụng phiên bản tính năng để cho biết phiên bản OpenXR tối thiểu mà ứng dụng yêu cầu. Ví dụ: nếu ứng dụng yêu cầu hỗ trợ OpenXR phiên bản 1.1, hãy khai báo tính năng sau:
<uses-feature android:name="android.software.xr.api.openxr"
android:version="0x00010001"
android:required="true" />
android.hardware.xr.input.controller
Tính năng này cho biết ứng dụng cần có dữ liệu đầu vào từ một bộ điều khiển chuyển động 6DoF (bậc tự do) có độ chính xác cao để hoạt động chính xác. Nếu ứng dụng của bạn hỗ trợ bộ điều khiển và không hoạt động được nếu không có bộ điều khiển, hãy đặt giá trị thành true
.
Nếu ứng dụng của bạn hỗ trợ bộ điều khiển nhưng có thể hoạt động mà không cần bộ điều khiển, hãy đặt thành 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
Cờ này cho biết ứng dụng yêu cầu tính năng theo dõi bàn tay có độ trung thực cao để hoạt động chính xác, bao gồm cả vị trí, hướng và vận tốc của các khớp trong bàn tay người dùng. Nếu ứng dụng của bạn hỗ trợ tính năng theo dõi bàn tay và không hoạt động được nếu không có tính năng này, hãy đặt giá trị thành true
. Nếu ứng dụng của bạn hỗ trợ tính năng theo dõi bàn tay nhưng có thể hoạt động mà không cần tính năng này, hãy đặt thành 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
Cờ này cho biết ứng dụng yêu cầu tính năng theo dõi ánh mắt có độ trung thực cao để hoạt động chính xác. Nếu ứng dụng của bạn hỗ trợ tính năng theo dõi bằng mắt để nhập dữ liệu và không thể hoạt động nếu không có tính năng này, hãy đặt giá trị thành true
. Nếu ứng dụng của bạn hỗ trợ tính năng theo dõi bằng mắt để nhập dữ liệu nhưng có thể hoạt động mà không cần tính năng này, hãy đặt thành 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" />
Những điểm cần cân nhắc về khả năng tương thích của tệp kê khai ứng dụng đối với ứng dụng di động và ứng dụng màn hình lớn
Như mô tả trong phần Các tính năng của PackageManager cho ứng dụng thực tế mở rộng, các ứng dụng khai báo rằng chúng sử dụng một tính năng bằng cách khai báo tính năng đó trong phần tử <uses-feature>
trong tệp kê khai ứng dụng. Một số tính năng, chẳng hạn như tính năng gọi điện hoặc GPS, có thể không tương thích với một số thiết bị.
Tính năng không được hỗ trợ
Cửa hàng Google Play lọc các ứng dụng có thể cài đặt trên thiết bị bằng cách sử dụng các khai báo tính năng Android sau.
Phần cứng camera
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
Khả năng kết nối
android.hardware.ipsec_tunnel_migration
Cấu hình thiết bị
Cấu hình kiểu dáng
android.hardware.type.automotive
android.hardware.type.embedded
android.hardware.type.television
android.software.leanback_only
Đầu vào
android.software.input_methods
Vị trí
Giao tiếp phạm vi gần
Cấu hình bảo mật và phần cứng
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
Cảm biến
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
Cấu hình phần mềm
android.software.connectionservice
android.software.expanded_picture_in_picture
android.software.live_wallpaper
android.software.picture_in_picture
android.software.wallet_location_based_suggestions
Điện thoại
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
Thực tế ảo (cũ)
android.hardware.vr.headtracking
android.hardware.vr.high_performance
Tiện ích
Tìm hiểu về các quyền đối với thực tế mở rộng (XR)
Giống như các ứng dụng trên thiết bị di động và các hệ số hình dạng khác, một số chức năng do ứng dụng XR cung cấp có thể yêu cầu ứng dụng của bạn khai báo quyền trong tệp AndroidManifest của ứng dụng. Trong trường hợp các quyền nguy hiểm, ứng dụng của bạn có thể cần yêu cầu quyền khi bắt đầu chạy. Hãy đọc bài viết Quyền trên Android và các phương pháp hay nhất về quyền để biết thêm thông tin chi tiết.
Các ứng dụng thực tế mở rộng (XR) có thể sử dụng các quyền sau. Tất cả các quyền trong phần này đều được coi là quyền nguy hiểm, vì vậy, bạn phải khai báo các quyền đó trong tệp kê khai ứng dụng và yêu cầu các quyền đó trong thời gian chạy.
android.permission.EYE_TRACKING_COARSE
Biểu thị tư thế, trạng thái và hướng mắt của người dùng, chẳng hạn như để sử dụng với hình đại diện. Sử dụng quyền này khi bạn cần dữ liệu theo dõi ánh mắt có độ chính xác thấp.
Jetpack XR SDK
Không có
Tiện ích OpenXR
Các tính năng của Unity
android.permission.EYE_TRACKING_FINE
Sử dụng ánh mắt để chọn, nhập và tương tác.
Jetpack XR SDK
Không có
Tiện ích OpenXR
Các tính năng của Unity
android.permission.FACE_TRACKING
Theo dõi và kết xuất biểu cảm trên khuôn mặt.
Jetpack XR SDK
Không có
Tiện ích OpenXR
Các tính năng của Unity
android.permission.HAND_TRACKING
Theo dõi tư thế khớp bàn tay và vận tốc góc và vận tốc tuyến tính; Sử dụng bản trình bày dạng lưới của bàn tay người dùng.
Jetpack XR SDK
Tiện ích OpenXR
Các tính năng của Unity
android.permission.SCENE_UNDERSTANDING_COARSE
Ước tính ánh sáng; chiếu chế độ xem xuyên thấu lên các bề mặt lưới; thực hiện raycast đối với các đối tượng có thể theo dõi trong môi trường; theo dõi mặt phẳng; theo dõi đối tượng; điểm neo cố định.
Jetpack XR SDK
Tiện ích OpenXR
Các tính năng của Unity
android.permission.SCENE_UNDERSTANDING_FINE
Kết cấu chiều sâu.
Jetpack XR SDK
Không có
Tiện ích OpenXR
Các tính năng của Unity
Xác minh chất lượng ứng dụng Android XR
Để xác minh rằng ứng dụng của bạn mang lại trải nghiệm tuyệt vời cho người dùng, hãy xem Nguyên tắc về chất lượng cho ứng dụng Android XR.
Đóng gói và phân phối ứng dụng cho Android XR
Android XR mang đến nhiều ứng dụng và trải nghiệm cho thiết bị đeo đầu XR thông qua Google Play. Trong hướng dẫn đóng gói và phân phối ứng dụng cho Android XR, bạn sẽ tìm thấy thông tin về cách bắt đầu sử dụng Cửa hàng Play và Play Console, xuất bản các kênh, chuẩn bị Android App Bundle và các hạn chế về kích thước ứng dụng.
OpenXR™ và biểu trưng OpenXR là các nhãn hiệu thuộc sở hữu của The Khronos Group Inc. và được đăng ký làm nhãn hiệu ở Trung Quốc, Liên minh Châu Âu, Nhật Bản và Vương quốc Anh.