Sau khi cài đặt và định cấu hình Android Studio, tạo một dự án và thiết lập SDK Jetpack XR, bạn đã sẵn sàng bắt đầu xây dựng trải nghiệm sống động.
Trước khi bắt đầu khám phá tất cả các cách bạn có thể tạo, hãy xem xét thông tin và hoàn tất mọi việc cần làm trong các phần sau để đảm bảo ứng dụng của bạn được định cấu hình cho quá trình phát triển XR sống động.
Đị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 XR riêng biệt, 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ó các giá trị sau:
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_HOME_SPACE
Sử dụng chế độ khởi động này để chạy ứng dụng của bạn ở chế độ 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
Sử dụng chế độ khởi động này để khởi chạy ứng dụng ở chế độ Toàn bộ không gian. Ở chế độ Toàn bộ 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>
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 về 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>
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 thích 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
Các ứng dụng được tạo bằng Jetpack XR SDK phải có tính năng này trong tệp kê khai ứng dụng. Giá trị mà 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 hợp nhất các tính năng hoặc nội dung phân biệt XR vào một tệp APK hiện có dành cho thiết bị di động và được phát hành trên kênh phát hành dành cho thiết bị di động, 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 của 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.hardware.xr.input.controller
Tính năng này cho biết ứng dụng yêu cầu 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 XR, 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ị.
Để xem danh sách các tính năng được bật cho một thiết bị, hãy chạy adb
shell pm list features.
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
Các bước tiếp theo
Giờ đây, sau khi hoàn tất việc định cấu hình tệp kê khai của ứng dụng và xem xét thông tin quan trọng, hãy khám phá những cách bạn có thể tạo trải nghiệm sống động:
- Đưa ứng dụng Android của bạn vào không gian 3D bằng XR
- Phát triển giao diện người dùng không gian bằng Jetpack Compose cho XR
- Triển khai Material Design cho giao diện người dùng không gian
- Thêm môi trường không gian vào ứng dụng
- Tạo, kiểm soát và quản lý thực thể