אחרי ההתקנה וההגדרה של Android Studio, יצירת פרויקט וההגדרה של Jetpack XR SDK, אפשר להתחיל ליצור חוויות אימרסיביות.
לפני שמתחילים לבדוק את כל הדרכים שבהן אפשר לפתח, כדאי לעיין במידע ולבצע את כל המשימות שבקטעים הבאים כדי לוודא שהאפליקציה מוגדרת לפיתוח XR אימרסיבי.
הגדרת קובץ המניפסט של האפליקציה
כמו בפרויקטים אחרים של אפליקציות ל-Android, גם לאפליקציית Android XR צריך להיות קובץ AndroidManifest.xml עם הגדרות מניפסט ספציפיות. קובץ המניפסט
מתאר מידע חיוני על האפליקציה שלכם לכלי הבנייה של 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 תלוי במסלול ההפצה של האפליקציה.
אם חבילות ה-App Bundle שלכם כוללות תכונות או תוכן שמותאמים ל-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" />
שיקולים לגבי תאימות של מניפסט האפליקציה לאפליקציות לנייד ולאפליקציות למסך גדול
כמו שמתואר בקטע תכונות של 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
מיקום
תקשורת מטווח קצר
תצורת אבטחה וחומרה
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 for XR
- הטמעה של Material Design בממשק המשתמש המרחבי
- הוספת סביבות מרחביות לאפליקציה
- יצירה, שליטה וניהול של ישויות