Jetpack פיתוח נייטיב ל-XR

יצירה של פריסות של ממשק משתמש מרחבי באופן דקלרטיבי, שמנצלות את היכולות המרחביות של Android XR.
העדכון האחרון גרסה יציבה גרסה מועמדת להפצה גרסת בטא גרסת אלפא
12 בפברואר 2025 - - - 1.0.0-alpha02

הצהרת יחסי תלות

כדי להוסיף תלות ב-XR compose, צריך להוסיף את מאגר Google Maven לפרויקט. מידע נוסף זמין במאגר Maven של Google.

מוסיפים את יחסי התלות של הארטיפקטים הנדרשים בקובץ build.gradle של האפליקציה או המודול:

מגניב

dependencies {
    implementation "androidx.xr.compose:compose:1.0.0-alpha01"

    // Use to write unit tests
    testImplementation "androidx.xr.compose:compose-testing:1.0.0-alpha01"
}

Kotlin

dependencies {
    implementation("androidx.xr.compose:compose:1.0.0-alpha01")

    // Use to write unit tests
    testImplementation("androidx.xr.compose:compose-testing:1.0.0-alpha01")
}

מידע נוסף על יחסי תלות זמין במאמר הוספת יחסי תלות ל-build.

משוב

המשוב שלכם עוזר לנו לשפר את Jetpack. אם נתקלתם בבעיות חדשות או שיש לכם רעיונות לשיפור הספרייה הזו, נשמח לשמוע מכם. לפני שיוצרים בעיה חדשה, כדאי לעיין בבעיות הקיימות בספרייה הזו. כדי להצביע על בעיה קיימת, לוחצים על לחצן הכוכב.

דיווח על בעיה חדשה

מידע נוסף זמין במסמכי התיעוד של Issue Tracker.

גירסה 1.0

גרסה 1.0.0-alpha02

12 בפברואר 2025

androidx.xr.compose:compose:1.0.0-alpha02 ו-androidx.xr.compose:compose-testing:1.0.0-alpha02 משוחררים. הגרסה 1.0.0-alpha02 כוללת את ההוספות האלה.

תכונות חדשות

  • עכשיו אפשר להקטין את התוכן של חלונית הפעילות כשמתבצעת שיחה במרחב המשותף.
  • עכשיו אפשר להשתמש ב-API של Orbiter בהקשרים של SubspaceComposable, והוא יצרף את Orbiters להורה המורכב הקרוב ביותר שמבוסס על SubspaceLayout.
  • הוספנו את LayoutCoordinatesAwareModifierNode כדי לאפשר שימוש במשתני שינוי מותאמים אישית שמבוססים על מיקום.
  • נוספו ל-SubspaceModifier.Node שיטות מחזור חיים של צירוף/ניתוק.
  • הוספת scaleWithDistance למשתנה הקבוע שניתן להזיז. כשהאפשרות scaleWithDistance מופעלת, רכיב המרחב המשני שהועבר יתרחב או יתכווץ. הוא גם ישמור על כל קנה מידה מפורש שהיה לו לפני התנועה.

שינויים ב-API

  • הוסר SessionCallbackProvider לטובת SpatialCapabilities.

שינויים אחרים

  • הפחתנו את minSDK ל-24. כל ממשקי ה-API של Jetpack XR עדיין דורשים API 34 בסביבת זמן הריצה.
  • ה-constructors של Orbiter, ‏ EdgeOffset.inner, ‏ EdgeOffset.outer ו-EdgeOffset.overlap כבר לא הם שיטות @Composable, כך שאפשר להשתמש בהם בהקשרים שלא ניתן לשלב.
  • עדכון רמות הגובה המרחביות בהתאם למפרט העדכני ביותר של חוויית המשתמש.
  • מטמיעים את הממשק SubspaceSemanticsInfo ב-MeasurableLayout.
  • השם של SubspaceModifierElement השתנה ל-SubspaceModifierNodeElement.

תיקוני באגים

  • תיקונים לשיפור היציבות של ההזמנות ב-SubspaceModifier. SubspaceModifier אמור לפעול בצורה מהימנה יותר. עכשיו אפשר להשתמש במודיפיקטור 'הזזה', 'סיבוב', 'שינוי קנה מידה', 'הזזה' ו'שינוי גודל' בכל סדר.

גרסה 1.0.0-alpha01

12 בדצמבר 2024

androidx.xr.compose:compose-*1.0.0-alpha01 משוחרר.

תכונות של הגרסה הראשונית

  • גרסה ראשונית למפתחים של Jetpack Compose ל-XR. אתם יכולים להשתמש במושגים מוכרים של Compose, כמו שורות ועמודות, כדי ליצור פריסות של ממשק משתמש מרחבי ב-XR, בין שאתם מעבירים אפליקציה קיימת ב-2D ל-XR ובין שאתם יוצרים אפליקציית XR חדשה מאפס. הספרייה הזו מספקת רכיבים שאפשר ליצור מהם מרחבים משניים ומרחבים תלת-ממדיים, כמו לוחות תלת-ממדיים ורכיבי 'מסלול', שמאפשרים למקם את ממשק המשתמש הקיים שלכם ב-Compose 2D או מבוסס-Views בפריסה תלת-ממדית. העדכון כולל את הרכיב Volume subspace composable, שמאפשר למקם ישויות של SceneCore, כמו מודלים תלת-ממדיים, ביחס לממשק המשתמש. מידע נוסף זמין במדריך למפתחים:

    • Subspace: אפשר למקם את הרכיב הזה בכל מקום בהיררכיית ממשק המשתמש של האפליקציה, וכך לשמור על פריסות לממשק משתמש דו-ממדי ומרחבי בלי לאבד את ההקשר בין הקבצים. כך קל יותר לשתף דברים כמו ארכיטקטורת אפליקציה קיימת בין XR לבין גורמי צורה אחרים, בלי שתצטרכו להעביר את המצב דרך כל עץ ממשק המשתמש או לתכנן מחדש את הארכיטקטורה של האפליקציה.

    • SpatialPanel: ‏SpatialPanel הוא מרחבים משניים שניתן ליצור מהם רכיבים, ומאפשר להציג תוכן של אפליקציות. לדוגמה, אפשר להציג הפעלת סרטון, תמונות סטילס או כל תוכן אחר ב-SpatialPanel.

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

    • נפח: מיקום של ישויות SceneCore, כמו מודלים תלת-ממדיים, ביחס לממשק המשתמש.

  • פריסה מרחבית: אפשר ליצור כמה לוחות מרחבים ולהציב אותם בפריסה מרחבית באמצעות SpatialRow, SpatialColumn, SpatialBox ו-SpatialLayoutSpacer. משתמשים בסמלי SubspaceModifier כדי להתאים אישית את הפריסה.

  • רכיבי ממשק משתמש מרחבי: אפשר לעשות שימוש חוזר ברכיבים האלה בממשק המשתמש הדו-מימדי, והמאפיינים המרחביים שלהם יהיו גלויים רק כשהיכולות המרחביות מופעלות.

    • SpatialDialog: החלונית תזוז מעט לאחור ב-z-depth כדי להציג תיבת דו-שיח מוגבהת.
    • SpatialPopUp: החלונית תזוז מעט לאחור ב-z-depth כדי להציג חלון קופץ מוגבה
    • SpatialElevation: אפשר להגדיר את SpatialElevationLevel כך שיוסיף גובה.
  • SpatialCapabilities: יכולות המרחב יכולות להשתנות כאשר המשתמשים יוצרים אינטראקציה עם האפליקציה או המערכת, או אפילו על ידי האפליקציה עצמה – לדוגמה, מעבר למרחב הבית או למרחב המלא. כדי למנוע בעיות, האפליקציה צריכה לבדוק את LocalSpatialCapabilities.current כדי לקבוע אילו ממשקי API נתמכים בסביבה הנוכחית. isSpatialUiEnabled: רכיבי ממשק משתמש מרחבי (למשל, SpatialPanel) isContent3dEnabled: אובייקטים תלת-ממדיים isAppEnvironmentEnabled: הסביבה isPassthroughControlEnabled: האם האפליקציה יכולה לשלוט במצב העברה או לא isSpatialAudioEnabled: אודיו מרחבי

בעיות מוכרות

  • נכון לעכשיו, נדרש minSDK של 30 כדי להשתמש ב-Jetpack Compose for XR. כפתרון עקיף, אפשר להוסיף את רשומת המניפסט הבאה <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> כדי שתוכלו לבנות ולהריץ עם minSDK של 23.
  • אפליקציות Jetpack XR מחייבות כרגע לבקש הרשאה android.permission.SCENE_UNDERSTANDING ב-AndroidManifest.
  • כשאפליקציה מופעלת ישירות במרחב מלא באמצעות המאפיין PROPERTY_XR_ACTIVITY_START_MODE במניפסט שלה, הפעילויות או האפליקציות נפתחות בהתחלה במרחב הבית לפני המעבר למרחב המלא.
  • קובצי glTF ב-Volume Composables עשויים להבהב בהתחלה במיקום הלא נכון.
  • שימוש ב-SpatialDialog בחלונית שנדחקה באופן משמעותי ידחוף את התוכן לכיוון הלא נכון.