Android XR הוא הרחבה של פלטפורמת Android והסביבה העסקית שלה. Android XR SDK נועד לאפשר לכם ליצור אפליקציות XR באמצעות מסגרות וכלים מוכרים של Android, או באמצעות תקנים פתוחים כמו OpenXR ו-WebXR. כל האפליקציות התואמות לנייד או למסכים גדולים יהיו זמינות להתקנה במשקפי XR מחנות Play. כדאי לעיין בשיקולי התאימות כדי לראות אם האפליקציה שלכם תואמת.
במדריך הזה נסביר את הנושאים הבאים:
- בחירת הכלים והטכנולוגיות לפיתוח
- תכנון אפליקציות ל-Android XR
- הגדרת קובץ המניפסט של האפליקציה
- שיקולים לגבי תאימות של קובץ המניפסט של האפליקציה
- הסבר על ההרשאות ב-Android XR
- אימות האיכות של אפליקציות Android XR
- אריזה והפצה של האפליקציה ל-Android XR
בחירת הכלים והטכנולוגיות לפיתוח
כשמפתחים אפליקציה ל-Android XR, אפשר לבחור מבין הפלטפורמות והטכנולוגיות הבאות לפיתוח:
Jetpack XR SDK
ערכת Jetpack XR SDK מכילה ספריות של Android XR Jetpack שנבנו כדי לנצל את היכולות הייחודיות של מכשירי XR. כדאי להתחיל עם ה-SDK הזה אם רוצים לבצע אחת מהפעולות הבאות:
- אופטימיזציה או שיפור של אפליקציה קיימת לנייד או לטאבלט עם Android
- איך בונים אפליקציית Android XR חדשה באמצעות Android Studio ו-Jetpack
אם אתם כבר מנוסים בפיתוח באמצעות Android Jetpack, Jetpack XR SDK הוא פתרון טבעי בשבילכם. הוא נועד להשתלב בצורה חלקה עם המסגרות והספריות האלה, ומאפשר לכם להשתמש בידע הקיים כדי ליצור חוויות XR סוחפות.
מידע נוסף על פיתוח באמצעות Jetpack XR SDK
Unity
Unity Engine הוא מנוע פיתוח תלת-ממדי בזמן אמת שמאפשר לאומנים, למעצבים ולמפתחים לשתף פעולה כדי ליצור חוויות סוחפות ואינטראקטיביות. התמיכה של Unity ב-Android XR מאפשרת לכם שליטה ברמה גבוהה בחוויות התלת-ממד שאתם מפתחים, וליהנות מהתמיכה המבוססת של Unity ב-OpenXR וממערכת האקולוגית של המפתחים.
אם כבר יצרתם חוויית XR באמצעות Unity או אם אתם מכירים את הפיתוח ב-Unity, כדאי להתחיל עם האפשרות הזו.
מידע נוסף על פיתוח באמצעות Unity ל-Android XR
OpenXR
OpenXR הוא תקן פתוח ללא תמלוגים שאפשר להשתמש בו כדי ליצור חוויות XR חוצות פלטפורמות עם ביצועים גבוהים. Android XR תומך ב-OpenXR 1.0 וב-OpenXR 1.1, ואנחנו מרחיבים את המפרט עם תוספים חדשים ל-Android XR. מכיוון ש-Android XR מבוסס על תקנים פתוחים, כלי פיתוח שתומכים ב-OpenXR וב-Android אמורים להיות תואמים ל-Android XR.
מידע נוסף על התמיכה ב-OpenXR ב-Android XR
WebXR
WebXR מאפשר לכם ליצור חוויות סוחפות לאינטרנט. היא מאפשרת גישה למכשירי VR ולמכשירי AR בדפדפני אינטרנט תואמים כמו Chrome ב-Android XR.
כדאי להתחיל עם האפשרות הזו אם רוצים ליצור חוויית XR לאינטרנט או להוסיף יכולות XR לאפליקציית אינטרנט. חוויות WebXR קיימות יפעלו גם ב-Android XR.
מידע נוסף על יצירת אפליקציות אינטרנט באמצעות WebXR
עיצוב ל-XR
טכנולוגיית ה-XR מרחיבה את משטח העיצוב מעבר למסכים שטוחים רגילים. אתם יכולים לעצב חוויות סוחפות שמשלבות בין מציאות פיזית למציאות וירטואלית. המדריך לעיצוב ב-Android XR יכול לעזור לכם להתחיל, בין אם אתם יוצרים חוויה חדשה לגמרי או מוסיפים אלמנטים אימרסיביים לאפליקציה קיימת.
הגדרת קובץ המניפסט של האפליקציה
כמו בפרויקטים אחרים של אפליקציות ל-Android, אפליקציית ה-XR ל-Android חייבת לכלול קובץ 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_FULL_SPACE_UNMANAGED
(OpenXR בלבד)
XR_ACTIVITY_START_MODE_HOME_SPACE
(אפליקציות שנוצרו באמצעות Jetpack XR SDK בלבד)
משתמשים במצב ההתחלה הזה כדי להפעיל את האפליקציה במרחב הביתי. במרחב הבית, אפשר להפעיל כמה אפליקציות זו לצד זו, כך שהמשתמשים יכולים לבצע כמה משימות בו-זמנית. כל אפליקציית 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
(אפליקציות שנוצרו באמצעות 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 מופעלות במצב Full Space וצריך להשתמש במצב ההפעלה XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
. האותות של Full Space לא מנוהל מציינים ל-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>
המאפיין 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>
<uses-native-library> OpenXR
(אפליקציות שפותחו באמצעות OpenXR בלבד)
אפליקציות OpenXR חייבות להצהיר על השימוש בספריית OpenXR המקורית כדי לטעון בהצלחה את זמן הריצה שלה. ללא ההצהרה הזו, זמן הריצה לא ייטען.
<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>
תכונות של 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.software.xr.api.openxr
באפליקציות שמטרגטות את פלטפורמת Android XR ונבנות באמצעות OpenXR או Unity, חובה לכלול את התכונה הזו במניפסט של האפליקציה עם המאפיין android:required
שמוגדר לערך true
.
באפליקציות שמשתמשות בחבילת ההרחבות Android XR ל-Unity מגרסה 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
התכונה הזו מציינת שהאפליקציה דורשת קלט מבקר תנועה בעל דיוק גבוה עם 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, לא יהיו תואמות לכל המכשירים.
תכונות שאינן נתמכות
מסנני חנות 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
בדומה לאפליקציות במכשירים ניידים ובמכשירים אחרים, יכול להיות שחלק מהיכולות של אפליקציות XR ידרשו הצהרה על הרשאות בקובץ 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
מעקב אחרי הבעות פנים והצגתן.
Jetpack XR SDK
לא רלוונטי
תוספים ל-OpenXR
תכונות של Unity
android.permission.HAND_TRACKING
מעקב אחרי תנוחות של מפרקי הידיים ומהירויות זוויתיות ולינאריות; שימוש בייצוג רשת של הידיים של המשתמש.
Jetpack XR SDK
תוספים ל-OpenXR
תכונות של Unity
android.permission.SCENE_UNDERSTANDING_COARSE
הערכת תאורה, הקרנת תצוגת מעבר על משטחי רשת, ביצוע raycasts על עצמים שניתנים למעקב בסביבה, מעקב אחר מישור, מעקב אחר אובייקט, עוגנים קבועים.
Jetpack XR SDK
תוספים ל-OpenXR
תכונות של Unity
android.permission.SCENE_UNDERSTANDING_FINE
טקסטורת עומק.
Jetpack XR SDK
לא רלוונטי
תוספים ל-OpenXR
תכונות של Unity
אימות האיכות של אפליקציות Android XR
כדי לוודא שהאפליקציה מספקת חוויית משתמש מצוינת, כדאי לעיין בהנחיות האיכות לאפליקציות של Android XR.
אריזה והפצה של האפליקציה ל-Android XR
מערכת Android XR מביאה מגוון רחב של אפליקציות וחוויות למשקפי XR דרך Google Play. במדריך לאריזה ולהפצה של אפליקציות ל-Android XR אפשר למצוא מידע על תחילת העבודה עם Play Store ו-Play Console, על פרסום של מסלולי הפצה, על הכנת חבילות של אפליקציות ל-Android ועל הגבלות על גודל האפליקציה.
OpenXR™ והלוגו של OpenXR הם סימנים מסחריים בבעלות The Khronos Group Inc. והם רשומים כסימן מסחרי בסין, באיחוד האירופי, ביפן ובבריטניה.