Jetpack SceneCore
העדכון האחרון | גרסה יציבה | גרסה מועמדת להפצה | גרסת בטא | גרסת אלפא |
---|---|---|---|---|
7 במאי 2025 | - | - | - | 1.0.0-alpha04 |
הצהרה על יחסי תלות
כדי להוסיף תלות ב-XR SceneCore, צריך להוסיף את מאגר Google Maven לפרויקט. מידע נוסף זמין במאמר בנושא מאגר Maven של Google.
מוסיפים את יחסי התלות של הארטיפקטים שאתם צריכים בקובץ build.gradle
של האפליקציה או המודול:
מגניב
dependencies { implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha04" // Required for Java implementation "com.google.guava:listenablefuture:1.0" // Required for Kotlin implementation "org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0" // Use to write unit tests testImplementation "androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04" }
Kotlin
dependencies { implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha04") // Required for Java implementation("com.google.guava:listenablefuture:1.0") // Required for Kotlin implementation("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0") // Use to write unit tests testImplementation("androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04") }
מידע נוסף על יחסי תלות זמין במאמר הוספת יחסי תלות ב-Build.
משוב
המשוב שלכם עוזר לנו לשפר את Jetpack. נשמח לשמוע מכם אם תגלו בעיות חדשות או אם יש לכם רעיונות לשיפור הספרייה הזו. לפני שיוצרים ספרייה חדשה, כדאי לעיין בבעיות הקיימות בספרייה הזו. כדי להוסיף את ההצבעה שלכם לבעיה קיימת, לוחצים על לחצן הכוכב.
מידע נוסף זמין במאמרי העזרה בנושא כלי המעקב אחר בעיות.
גירסה 1.0
גרסה 1.0.0-alpha04
7 במאי 2025
הגרסאות androidx.xr.scenecore:scenecore:1.0.0-alpha04
ו-androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04
יוצאות לאור. גרסה 1.0.0-alpha04 מכילה את הקומטים האלה.
תכונות חדשות
- מעכשיו, טיפול בהחזרה יפעל בישויות של חלוניות ללא פעילויות מוטמעות. כדי שהטיפול בהחזרה יפעל, צריך לציין
android:enableOnBackInvokedCallback= "true"
במניפסט של Android. -
StereoSurfaceEntity
תומך עכשיו בהפעלה של MV-HEVC באמצעות שני ערכים חדשים שלStereoMode
: MULTIVIEW_LEFT_PRIMARY ו-MULTIVIEW_RIGHT_PRIMARY. - הגודל שמוחזר עכשיו על ידי
PanelEntity.setSize
ו-PanelEntity.getSize
הוא הגודל במרחב ההורה. - הפונקציות
Entity.setPose
, Entity.getPose
, Entity.setScale
, Entity.getScale
, Entity.setAlpha
ו-Entity.getAlpha
מקבלות עכשיו פרמטר חדשrelativeTo
, שמאפשר לקבל או להגדיר ערכים ביחס למרחבים שונים. הערכים הנתמכים הם Parent, Activity ו-Real World spaces, וערך ברירת המחדל של הפרמטר הזה הוא Parent. - נוספו שיטות הרחבה של קריאה חוזרת (callback) לזיהוי מרחבי ב-
SessionExt.kt
כדי לעקוב אחרי תנועת התוכן בסצנה בתוך שדה הראייה של המשתמש או מחוצה לו. - האפשרות
setPointSourceParams
נוספה ל-SpatialAudioTrack
, ועכשיו אפשר לעדכן את הפרמטרים אחרי שהמסלול נוצר. - נוספה מחלקה חדשה, Scene, עם הפניות לממשקי
Scenecore
API. הסצנה תהיה נגישה כמאפיין הרחבה של הסשן. הפונקציות בתוךSessionExt
הועברו ל-Scene, ולכן צריך לשנות את הייבוא. לדוגמה,SessionExt.getScene(session)
.addSpatialCapababilitiesChangedListener
לעומתSessionExt.addSpatialCapabilitiesChangedListener
. -
ActivityPose.hitTestAsync
נוסף, והוא מאפשרhitTest
נגד תוכן וירטואלי. - נוסף סוג רכיב חדש
SpatialPointerComponent
, שמאפשר ללקוחות לציין את הסמל שמוצג עבור המצביע, או להשבית את הסמל. בשלב הזה, אפשר לצרף את הרכיב הזה רק ל-PanelEntity
מקרים. - השקנו מפעל חדש
PanelEntity
שמקבל מידות של פאנלים במטרים או בפיקסלים. הוסרה חלונית ישנה שלPanelEntity
מפעל שמקבלת שני פרמטרים מסוג Dimension.
שינויים ב-API
- הוסרה ההגבלה
RequiresApi(34)
על כל חבילות Jetpack XR. המגבלה הזו הייתה מיותרת כי Jetpack XR זמין כרגע רק במכשירים עם רמת API 34 ומעלה. (Iae0f8) - כדי להשתמש בפרויקטים שפורסמו עם Kotlin 2.0, צריך KGP 2.0.0 או גרסה חדשה יותר (Idb6b5)
- הכיתה
PermissionHelper
הוסרה. - האפשרות
PanelEntity.getPixelDensity
הוצאה משימוש. - השדות
PanelEntity.setPixelDimensions
ו-PanelEntity.getPixelDimension
הוסרו והוחלפו בשדותsetSizeInPixels
ו-getSizeInPixels
. - האפשרות
Entity.getActivitySpaceAlpha
הוסרה. אפשר להחליף אותו ב-Entity.getAlpha(Space.Activity)
. - האפשרות
Entity.getWorldSpaceScale
הוסרה. אפשר להחליף אותו ב-Entity.getScale(Space.REAL\_WORLD)
. - המחלקות Session ב-
SceneCore
נמחקו לטובת Session ב-XR Runtime. - השם של
StereoSurfaceEntity
שונה ל-SurfaceEntity
. - הוסרו
Entity.setSize
ו-Entity.getSize
, ואותן שיטות נוספו ל-PanelEntity
. - השם של
PointSourceAttributes
שונה ל-PointSourceParams
. - השם של
SpatializerConstants.SOURCE\_TYPE\_BYPASS
שונה ל-SpatializerConstants.SOURCE\_TYPE\_DEFAULT
. - הגישה לישות
PointSourceParams
שונתה מגישה ציבורית לגישה פנימית. - כדי להשתמש ב-
AnchorEntity.create
, צריך להגדיר אתPlaneTrackingMode
ב-Session.configure()
. - עכשיו צריך להגדיר את
SpatialUser
ב-Session.configure()
כדי להשתמש בממשקי ה-API שלSpatialUser
.HeadTrackingMode
- אם לא מצרפים את
ResizableComponent
, יומן ברמת INFO יוצג במקום יומן ברמת ERROR. - מחלקת ה-FOV היא עכשיו מחלקת Kotlin רגילה.
- מפצלים את
Entity.kt
כדי להציב כל סוג ישות קונקרטי בקובץ משלו. - כשיוצרים
PanelEntity
חדש, רוב התצוגות המפורטות משויכות מחדש לFrameLayout
. כך קל יותר להשתמש ב-LayoutInspector
עם חלוניות מרחביות. - מופע
XrExtensions
שנמצא בשימוש כרגע רשום בפלטפורמה, בדרך הטובה ביותר, כדי לעזור בניפוי באגים באפליקציה.
תיקוני באגים
- נוסף תיקון כדי למנוע קריסה שיכולה לקרות כשמעבירים
PanelEntity
עםMovableComponent
ועםAnchorPlacement
- תוקנה בעיה שבה
ResizableComponent
סיפק גדלים לא עדכניים בקריאה חוזרת (callback) שלonResizeStart
. - תוקנה קריסה שקרתה כשבוצעה קריאה ל-
JxrPlatformAdapterAxr
שלdispose()
כמה פעמים.
גרסה 1.0.0-alpha03
26 בפברואר 2025
הגרסאות androidx.xr.scenecore:scenecore:1.0.0-alpha03
ו-androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03
יוצאות לאור. גרסה 1.0.0-alpha03 מכילה את הקומטים האלה.
תכונות חדשות
- יש עכשיו תמיכה ב-Proguard minification לקוד Jetpack XR
תיקוני באגים
- תיקונים נוספים לתמיכה בהקטנת קובץ Proguard עבור Jetpack XR SceneCore (I4f47e)
- עדכנו את הכלל Jetpack XR Scenecore
ProGuard
כדי למנועAbstractMethodError
עבור לקוחות שעברו מיניפיקציה. (I91a01)
גרסה 1.0.0-alpha02
12 בפברואר 2025
הגרסאות androidx.xr.scenecore:scenecore:1.0.0-alpha02
ו-androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02
יוצאות לאור. גרסה 1.0.0-alpha02 מכילה את ההתחייבויות האלה.
שינוי משמעותי שצפוי בקרוב וישפיע על אפליקציות שפותחו לפני גרסה 1.0.0-alpha02
- השיטות ליצירת אובייקטים הועברו מהמחלקה
Session
לשיטה תואמת בכל סוג:- השדה
Session.createActivityPanelEntity(Dimensions, String, Activity, Pose)
נמחק והוחלף בשדהActivityPanelEntity.create(Session, Dimensions, String, Pose)
- השדה
Session.createAnchorEntity(Anchor)
נמחק והוחלף בשדהAnchorEntity.create(Session, Anchor)
- השדה
Session.createAnchorEntity(Dimensions, Int, Int, Duration)
נמחק והוחלף בשדהAnchorEntity.create(Session, Dimensions, Int, Int, Duration)
- השדה
Session.createEntity(String, Pose)
נמחק והוחלף בשדהContentlessEntity.create(Session, String, Pose)
- השדה
Session.createExrImageResource(String)
נמחק והוחלף בשדהExrImage.create(Session, String)
- השדה
Session.createGltfEntity(GltfModel, Pose)
נמחק והוחלף בשדהGltfModelEntity.create(Session, GltfModel, Pose)
- השדה
Session.createGltfModelResource(String)
נמחק והוחלף בשדהGltfModel.create(Session, String)
- השדה
Session.createInteractableComponent(Executor, InputEventListener)
נמחק והוחלף בשדהInteractableComponent.create(Session, Executor, InputEventListener)
- השדה
Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean)
נמחק והוחלף בשדהMovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)
- השדה
Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose)
נמחק והוחלף בשדהPanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)
- השדה
Session.createResizableComponent(Dimensions, Dimensions)
נמחק והוחלף בשדהResizableComponent.create(Session, Dimensions, Dimensions)
- השדה
Session.createStereoSurfaceEntity(Int, Dimensions, Pose)
נמחק והוחלף בשדהStereoSurface.create(Session, Int, Dimensions, Pose)
- השדה
- השיטות הבאות שהוצאו משימוש הוסרו:
Session.canEmbedActivityPanel(Activity)
נמחק. במקום זאת, אתם צריכים להשתמש ב-getSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY)
.Session.hasSpatialCapability(Int)
נמחק. הוא הוחלף בשימוש ב-getSpatialCapabilities().hasCapability()
כדרך מופרדת יותר לבדיקת נוכחות של יכולות מרחביות, כיgetSpatialCapabilities()
מחזיר אובייקטSpatialCapabilities
.- השדה
Session.requestFullSpaceMode()
נמחק והוחלף בשדהSpatialEnvironment.requestFullSpaceMode()
- השדה
Session.requestHomeSpaceMode()
נמחק והוחלף בשדהSpatialEnvironment.requestHomeSpaceMode()
- הפונקציות
Session.setFullSpaceMode(Bundle)
ו-Session.setFullSpaceModeWithEnvironmentInherited(Bundle)
הועברו לפונקציות של תוספים. כדי לקבל גישה, המפתחים יצטרכו להוסיף את ההצהרות החדשות על ייבוא לקבצים שלהם:import androidx.xr.scenecore.setFullSpaceMode
import androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
- הפונקציה
Session.setPreferredAspectRatio(Activity, Float)
הועברה לפונקציית תוסף. בקובצי המפתח צריך להוסיף את הייבוא החדש כדי לקבל גישה:import androidx.xr.scenecore.setPreferredAspectRatio
- הפונקציות
Session.getEntitiesOfType(Class<out T>)
ו-Session.getEntityForRtEntity(RtEntity)
הועברו לפונקציות של תוספים. כדי לקבל גישה, המפתחים יצטרכו להוסיף את ההצהרות החדשות על ייבוא לקבצים שלהם:import androidx.xr.scenecore.getEntitiesOfType
import androidx.xr.scenecore.getEntityForRtEntity
- המרחב המשותף "
Session.unpersistAnchor(Anchor)
" נמחק - המרחב המשותף "
Session.createPersistedAnchorEntity(UUID)
" נמחק
בעיות מוכרות
- יכול להיות שהשינויים ב-
PanelEntity.setCornerRadius()
וב-ActivityPanelEntity.setCornerRadius()
ייכנסו לתוקף רק בפעם הבאה שתזיזו את החלונית. כדי לפתור את הבעיה, אפשר להזיז את החלונית למיקום הנוכחי שלה. - כשמתקשרים אל
BoundsChanged
ב-ActivitySpace
, יכול להיות שחלק מה-ActivityPose
לא עודכנו בצורה נכונה. הוא יעודכן בשיחה הבאהOnSpaceUpdated
בתאריךActivitySpace
שינויים שעלולים לגרום לכשל ושינויים בהתנהגות
- לרכיבים
PanelEntity
ו-ActivityPanelEntity
יהיה רדיוס פינות שמוגדר כברירת מחדל של 32dp או פחות, אם הרוחב או הגובה של החלונית קטנים מ-32dp
ממשקי API ויכולות חדשים
- השקנו את
StereoSurface.CanvasShape
, שמאפשר ליצור קנבסים שלSpherical
ושלHemispherical
לעיבוד של מדיה סוחפת. - הפרמטר
StereoSurfaceEntity.create()
מקבל עכשיו את הפרמטרCanvasShape
. (הפרמטר הזה מתעלם כרגע, אבל ייעשה בו שימוש בגרסה עתידית) - הפרמטר
StereoSurfaceEntity.create()
לא מקבל יותר את הפרמטרDimensions
. האפליקציות צריכות לשלוט בגודל של אזור הציור באמצעות הגדרתCanvasShape
-
StereoSurfaceEntity
כולל חברCanvasShape
שאפשר להגדיר באופן דינמי. -
StereoSurfaceEntity.dimensions
הוא עכשיו מאפיין לקריאה בלבד. אפליקציות צריכות להגדיר אתCanvasShape
כדי לשנות מאפיינים. - מעכשיו אפשר לאפס את
StereoMode
ב-StereoSurfaceEntity
אחרי הבנייה.
שינויים אחרים
- הפחתנו את הערך של minSDK בזמן ההידור ל-24. כל ממשקי Jetpack XR API עדיין דורשים API 34 בזמן הריצה.
- הפונקציה Session factory (
Session.create
) שלSceneCore
כבר לא מפעילה intent כדי לקבל את ההרשאהSCENE_UNDERSTANDING
. במקום זאת, אפליקציית הלקוח צריכה לבקש מהמשתמש את ההרשאות באופן מפורש, לפני שהיא מנסה ליצור את העוגנים. אם המשתמש לא מעניק את ההרשאה, יצירת העוגן תיכשל.
תיקוני באגים
- הפונקציה
getActivitySpacePose()
תוקנה כך שתתחשב בסולםActivitySpace
ותחזיר ערכי תרגום במטרים מותאמים, במקום להחזיר תמיד מטרים לא מותאמים. transformPoseTo
משתמש עכשיו גם ביחידות הנכונות כדי לחשב שינויים בקואורדינטות כש-ActivitySpace
מעורב במקור או ביעד. - ה-skybox יוגדר עכשיו ל-skybox שחור לחלוטין בכל פעם שמועברת העדפה של skybox null באמצעות
setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom))
. כדי לחזור לברירת המחדל של המערכת לגבי תיבת השמיים והגיאומטריה, משתמשים ב-setSpatialEnvironmentPreference(null).
גרסה 1.0.0-alpha01
12 בדצמבר 2024
androidx.xr.scenecore:scenecore-* 1.0.0-alpha01
משוחרר.
תכונות של הגרסה הראשונית גרסה ראשונית למפתחים של Jetpack SceneCore, ספריית גרפים של סצנות תלת-ממדיות ליצירה ולעריכה של סצנות וסביבות מרתקות. הספרייה הזו מאפשרת לכם למקם ולסדר מודלים תלת-ממדיים ולוחות תוכן ביחס אחד לשני וביחס לסביבות הווירטואליות או לסביבות בעולם האמיתי.
- SpatialEnvironment: יצירת חוויות סוחפות לחלוטין באמצעות תמונת skybox או גיאומטריית מודל תלת-ממד כרקע לסצנת ה-XR של הסביבה. אפשר גם להפעיל את התכונה 'העברה' כדי שהסצנה הווירטואלית תשתלב עם הסביבה האמיתית של המשתמש.
- PanelEntity: אפשר להוסיף תוכן דו-ממדי לסצנות תלת-ממדיות על ידי הטמעה של פריסות ופעילויות רגילות של Android בלוחות מרחביים שיכולים לצוף או להיות מעוגנים למשטחים בעולם האמיתי.
- GltfModelEntity: מאפשר להציב מודלים תלת-ממדיים בסצנה, להנפיש אותם ולבצע איתם אינטראקציה. SceneCore תומך בפורמט הקובץ glTF כדי להקל על השילוב עם מודלים קיימים.
- SpatialAudio: מוסיפים מקורות אודיו סביבתיים ונקודתיים לסצנת תלת-ממד כדי ליצור צליל מרחבי סוחף לחלוטין.
- StereoSurfaceEntity: SceneCore תומך בהעברת תוכן שמעובד ב-Android Surface לעין ימין או לעין שמאל. אפשר להשתמש בזה כדי להציג תוכן סטריאוסקופי בפורמט זה לצד זה או מלמעלה למטה, כמו תמונות סטריאו, סרטוני תלת-ממד או ממשקי משתמש אחרים שמוצגים באופן דינמי. אפליקציות צריכות להשתמש ב-MediaPlayer או ב-ExoPlayer לפענוח סרטונים.
- מערכת רכיבים: SceneCore מציעה מערכת רכיבים חזקה וגמישה להוספת יכולות לתוכן ה-XR שלכם, כולל אפשרויות למשתמשים להזיז מודלים ולוחות, לשנות את הגודל שלהם ולקיים איתם אינטראקציה.
- הצמדה: כשמפעילים את התכונה 'העברה', אפשר לצרף חלוניות ומודלים למשטחים אמיתיים, וכך המשתמשים יכולים לשלב תוכן וירטואלי בצורה חלקה בסביבה שלהם בעולם האמיתי.
- תנוחת המשתמש: גישה למיקום המשתמש בסצנה הווירטואלית, כדי להתאים את התוכן למיקום המשתמש.
- SpatialCapabilities: אפשר ליצור אפליקציות שמותאמות באופן מלא ומנצלות את היכולות המרחביות כשהן זמינות, כמו מיקום תלת-ממדי של תוכן ממשק המשתמש. בנוסף, האפליקציה יכולה לעקוב אחרי שינויים ביכולות בזמן שהיא פועלת, כדי לשנות את חוויית השימוש בהתאם לאופן שבו המשתמש משתמש במכשיר Android XR.
בעיות מוכרות
- נכון לעכשיו, נדרשת גרסת minSDK של 30 כדי להשתמש ב-Jetpack SceneCore. כפתרון עקיף, מוסיפים את רשומת המניפסט הבאה
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>
כדי שיהיה אפשר לבצע build ולהפעיל עם minSDK בערך 23. - סשן יכול להיות לא תקף במצבים שונים שבהם הפעילות נוצרת מחדש באופן אוטומטי, כולל שינוי הגודל של חלונית ראשית, חיבור ציוד היקפי ומעבר בין מצב בהיר למצב כהה. אם נתקלתם בבעיות שקשורות לביטול תוקף של סשן, יש כמה פתרונות אפשריים: להגדיר את החלונית הראשית ככזו שלא ניתן לשנות את הגודל שלה, להשתמש בישות של חלונית דינמית, להשבית את יצירת הפעילות מחדש לשינויים ספציפיים בהגדרות או להשבית את השינויים בערכת הנושא של מצב בהיר/כהה.
- אין תמיכה ברכיבים שאפשר להזיז ולשנות את הגודל שלהם ב-GltfEntity.
- אין תמיכה ב-Entity.getSize() ב-GltfEntity.
- אפליקציות Jetpack XR צריכות לבקש את ההרשאה
android.permission.SCENE_UNDERSTANDING
בקובץ AndroidManifest. - אפשר ליצור סשן רק במכשיר Android XR. בשלב הזה, אם תיצרו סשן ותנסו להשתמש בו במכשיר XR שאינו Android, תקבלו RuntimeException.
- הגדרת ה-skybox כ-null באמצעות `SpatialEnvironment.setSpatialEnvironmentPreference()` לא יוצרת skybox שחור מלא כמו שמתואר במסמכים. יכול להיות שהתוצאה תהיה תיבת שמיים שמוגדרת כברירת מחדל במערכת או שלא יהיה שינוי בתיבת השמיים הנוכחית.
- לקוחות SceneCore צריכים להוסיף
implementation(“com.google.guava:listenablefuture-1.0”)
להגדרת Gradle של התלות של האפליקציה שלהם. בגרסה עתידית, scenecore תכלול את הספרייה הזו כapi
תלות, כך שהלקוחות לא יצטרכו להצהיר עליה באופן מפורש. - SceneCore כולל בטעות את
com.google.guava:guava-31.1-android
ואתcom.google.protobuf:protobuf-javalite
כתלויות טרנזיטיביות. אם הפעולה הזו גורמת לשגיאות כפולות בכיתה ב-build, אפשר להחריג את שתי התלויות האלה בבטחה. - אם האפליקציה שלכם משתמשת ב-SceneCore ומופעל בה ProGuard, היא תקרוס כשתיצרו Session. כפתרון עקיף, אפשר להשבית את ProGuard. מידע נוסף על הפעלת ProGuard זמין במדריך הזה.