איך מתחילים להשתמש ב-OpenXR ל-Android XR

מכשירי XR רלוונטיים
ההנחיות האלה יעזרו לכם ליצור חוויות למכשירי XR מהסוגים האלה.
משקפי XR
משקפי AR חוטיים

לפני שמתחילים לפתח באמצעות תוספים נתמכים של OpenXR או באמצעות מנוע נתמך, כדאי לעיין במידע ולבצע את המשימות שבקטעים הבאים כדי לוודא שהאפליקציה מוגדרת לפיתוח של חוויות 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_FULL_SPACE_UNMANAGED (OpenXR בלבד)

XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED

אפליקציות שנוצרו באמצעות OpenXR מופעלות במסך מלא וצריכות להשתמש במצב הפעלה 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 המקורית כדי לטעון את זמן הריצה שלהן בהצלחה. בלי ההצהרה הזו, זמן הריצה לא נטען.

<manifest ... >

    <application ... >

    <uses-native-library android: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.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" />

השלבים הבאים

אחרי שסיימתם להגדיר את המניפסט של האפליקציה ולעיין במידע חשוב, כדאי לבדוק איך אפשר לפתח באמצעות OpenXR: