אחרי שמתקינים ומגדירים את Android Studio, יוצרים פרויקט ומגדירים את Jetpack XR SDK, אפשר להתחיל לפתח חוויות סוחפות למכשירים כמו משקפי VR עם Android XR ומשקפי XR עם חיבור חוטי.
לפני שמתחילים לבדוק את כל הדרכים שבהן אפשר לפתח, כדאי לעיין במידע ולבצע את המשימות שמפורטות בקטעים הבאים כדי לוודא שהאפליקציה מוגדרת לפיתוח XR אימרסיבי.
הגדרת קובץ המניפסט של האפליקציה
כמו בפרויקטים אחרים של אפליקציות ל-Android, לאפליקציה ל-Android XR צריך להיות קובץ AndroidManifest.xml עם הגדרות מניפסט ספציפיות. קובץ המניפסט מתאר מידע חיוני על האפליקציה לכלי ה-build של 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_HOME_SPACE
כדי להפעיל את האפליקציה ב"מרחב הבית", צריך להשתמש במצב ההפעלה הזה. במרחב הבית, אפשר להפעיל כמה אפליקציות זו לצד זו, כך שהמשתמשים יכולים לבצע כמה משימות בו-זמנית. כל אפליקציה ל-Android לנייד או למסך גדול יכולה לפעול במרחב הבית, וגם אפליקציות XR שנוצרו באמצעות 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
כדי להפעיל את האפליקציה במצב "מרחב מלא", צריך להשתמש במצב ההפעלה הזה. במצב "מרחב מלא", רק אפליקציה אחת פועלת בכל פעם, בלי גבולות של המרחב, וכל שאר האפליקציות מוסתרות.
<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>
המאפיין PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED
המאפיין 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>
תכונות של PackageManager לאפליקציות XR
כשאתם מפיצים אפליקציות דרך חנות Google Play, אתם יכולים לציין את תכונות החומרה או התוכנה הנדרשות בקובץ המניפסט של האפליקציה. הרכיב uses-feature מאפשר לחנות Play לסנן בצורה מתאימה את האפליקציות שמוצגות למשתמשים.
התכונות הבאות ספציפיות לאפליקציות שמותאמות ל-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.hardware.xr.input.controller
התכונה הזו מציינת שהאפליקציה דורשת קלט מבקר תנועה מדויק עם 6 דרגות חופש (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" />
android.hardware.xr.input.face_tracking
הדגל הזה מציין שהאפליקציה צריכה חומרה למעקב אחרי הבעות הפנים כדי לפעול כמו שצריך. אם האפליקציה תומכת במעקב אחרי הבעות הפנים ולא יכולה לפעול בלעדיו, מגדירים את הערך true. אם האפליקציה תומכת במעקב אחרי הבעות הפנים, אבל יכולה לפעול בלעדיו, צריך להגדיר את הערך false.
<!-- Sets android:required to true, indicating that your app can't function on devices without face tracking. -->
<uses-feature android:name="android.hardware.xr.input.face_tracking" android:required="true" />
שיקולים בנושא תאימות של קובץ המניפסט של האפליקציה לאפליקציות לנייד ולמסכים גדולים
כמו שמתואר בקטע תכונות PackageManager לאפליקציות XR, אפליקציות מצהירות שהן משתמשות בתכונה מסוימת באמצעות הצהרה עליה ברכיב <uses-feature> בקובץ המניפסט של האפליקציה. יכול להיות שתכונות מסוימות, כמו טלפוניה או GPS, לא יהיו תואמות לכל המכשירים.
כדי לקבל רשימה של התכונות שמופעלות במכשיר, מריצים את הפקודה adb
shell pm list features.
תכונות שאינן נתמכות
חנות 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
מיקום
תקשורת מטווח קצר (NFC)
הגדרות אבטחה וחומרה
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
ווידג'טים
השלבים הבאים
עכשיו, אחרי שסיימתם להגדיר את המניפסט של האפליקציה וקראתם את המידע החשוב, אתם יכולים לבדוק איך אפשר ליצור חוויות סוחפות:
- איך להפוך את אפליקציית Android לתלת-ממדית באמצעות XR
- פיתוח ממשק משתמש מרחבי באמצעות Jetpack Compose ל-XR
- הטמעת Material Design בממשק המשתמש המרחבי
- הוספת סביבות מרחביות לאפליקציה
- יצירה, בקרה וניהול של ישויות