סקירה כללית על פיתוח ל-Android XR

‫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>

המאפיין 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.ar

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.flash

android.hardware.camera.level.full

קישוריות

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

תצורת המכשיר

android.hardware.ram.low

הגדרת גורם צורה

android.hardware.type.automotive

android.hardware.type.embedded

android.hardware.type.pc

android.hardware.type.television

android.hardware.type.watch

android.software.leanback

android.software.leanback_only

android.software.live_tv

קלט

android.hardware.consumerir

android.software.input_methods

מיקום

android.hardware.location.gps

תקשורת מטווח קצר

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

תצורת אבטחה וחומרה

android.hardware.se.omapi.ese

android.hardware.se.omapi.sd

android.hardware.se.omapi.uicc

android.hardware.biometrics.face

android.hardware.fingerprint

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.light

android.hardware.sensor.relative_humidity

android.hardware.sensor.stepcounter

android.hardware.sensor.stepdetector

הגדרת תוכנה

android.software.backup

android.software.connectionservice

android.software.expanded_picture_in_picture

android.software.live_wallpaper

android.software.picture_in_picture

android.software.telecom

android.software.wallet_location_based_suggestions

טלפוניה

android.hardware.telephony

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.software.sip

android.software.sip.voip

מציאות מדומה (גרסה קודמת)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

ווידג'טים

android.software.app_widgets

הסבר על ההרשאות ל-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

מעקב אחרי תנוחות של מפרקי הידיים ומהירויות זוויתיות ולינאריות; שימוש בייצוג רשת של הידיים של המשתמש.

android.permission.SCENE_UNDERSTANDING_COARSE

הערכת תאורה, הקרנת תצוגת מעבר על משטחי רשת, ביצוע raycasts על עצמים שניתנים למעקב בסביבה, מעקב אחר מישור, מעקב אחר אובייקט, עוגנים קבועים.

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. ‎ והם רשומים כסימן מסחרי בסין, באיחוד האירופי, ביפן ובבריטניה.