אנדרואיד O היא פורצת אפליקציות שמכסות על גבי שורת המצב

Android O מוציא משימוש את TYPE_SYSTEM_OVERLAY לטובת TYPE_APPLICATION_OVERLAY, וכתוצאה מכך יישומים שכובים על גבי שורת המצב נשברים.

טפטוף הפוסטים המתארים תכונות חדשות הפונות למשתמש שנמצאו ב אנדרואיד O מתחיל להאט כעת, לאחר שהיו למשתמשים שבועות כדי לבדוק את התוכנה במכשיר שלהם. עם זאת, יש הרבה מאוד שינויים שבוצעו מתחת למכסה המנוע שנחשפים לאט לאט. פרסמנו על שינוי אחד כזה רק לפני כמה ימים על מכשירי Nexus ו-Pixel עם Android O אימוץ SDCardFS. אבל היום, ברצוננו לדון בשינוי שישפיע על מפתחי אפליקציות מסוימות, במיוחד אלו שכבת-על על גבי שורת המצב. נראה ליישומים אלה שבור בתצוגה המקדימה למפתחים של Android O, שבמבט ראשון אתה עלול לבטל אותו כבאג פשוט, אבל לצלול עמוק יותר לתוך תיעוד ההפניה, זה עשוי להיות שינוי מכוון על ידי גוגל.


שכבות-על של סרגל המצב של Android O Breaks

אחד הדברים האהובים עלי באנדרואיד הוא מידת ההתאמה שלו. משתמשים בעלי שורש או הפעלה של ROM מותאמים אישית יכולים לעצב את סרגלי מצב המערכת שלהם באופן מקורי ללא הגבלות, אבל אם המכשיר שלך לא מושרש יש לך פחות אפשרויות זמינות עבורך. למרבה המזל, יש אפליקציות רבות בחנות Google Play המאפשרות לך לשנות את האופן שבו שורת המצב נראית ברמה בסיסית. זה אפשרי הודות לשילוב חכם של חלונות שכבת-על להצגת שורת מצב מותאמת אישית על הקיים, מאזיני הודעות להצגת הודעות, ואופציונלי שירות נגישות כדי לאפשר גוון קונטקסטואלי של המותאם אישית שורת מצב.

שני צילומי המסך שלמעלה מראים כיצד ייראה שורת ההתראות שלי בעת שימוש באחת מיישומי שכבת העל הרבים של שורת המצב הזמינים בחנות Play. צילומי מסך אלה צולמו ב-Huawei Mate 9 ללא שורש עם EMUI 5.0. לאלו מכם שלא מכירים את EMUI, שורת המצב לא נראית כמו צילומי המסך שלעיל. במקום זאת, זה נראה כך:

אם לא אכפת לך איך נראה שורת מצב המניות שלך, אז אפליקציות כמו סטָטוּס אוֹ שורת מצב החומר הם מתנות אל. אבל אם, או כשהמכשיר שלך יתעדכן ל-Android O, ייתכן שהאפליקציות האלה לא יפעלו יותר. כך נראות אותן שתי אפליקציות ב-Google Pixel שמריץ את ה-Android O Developer Preview:

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

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

להלן רשימה של כמה אפליקציות פופולריות שעשויות להפוך לחסרות תועלת:

  • סטָטוּס (500,000 - 1,000,000 התקנות)
  • שורת מצב החומר (1,000,000 - 5,000,000 התקנות)
  • כלי מגניב - סטטיסטיקת מערכת (500,000 - 1,000,000 התקנות)
  • Telecine (50,000 - 100,000 התקנות)
  • שורת מצב נקייה (100,000 - 500,000 התקנות)
  • Tinycore (100,000 - 500,000 התקנות)

ורשימה של כמה אפליקציות שיעבדו, אבל לא יכולות עוד להסתובב על גבי שורת המצב (הגבלת פונקציונליות קודמת):

  • דמדומים (5,000,000 - 10,000,000 התקנות)
  • ראשים למעלה (100,000 - 500,000 התקנות)
  • Resource Monitor Mini (50,000 - 100,000 התקנות)
  • מוניטור רשת מיני (1,000,000 - 5,000,000 התקנות)

יש עוד אפליקציות רבות בחנות Play המשתמשות בשכבת-על כלשהי על גבי שורת המצב, אבל אתה כבר יכול לדעת ששינוי כזה ישפיע על אפליקציות רבות שנמצאות בשימוש על ידי מיליוני פוטנציאלים משתמשים. אז מה קורה כאן?


TYPE_SYSTEM_OVERLAY הוצא משימוש

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

TYPE_SYSTEM_OVERLAY

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

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

TYPE_APPLICATION_OVERLAY

סוג חלון: חלונות שכבת-על של יישומים מוצגים מעל כל חלונות הפעילות (סוגים בין FIRST_APPLICATION_WINDOW ו LAST_APPLICATION_WINDOW) אבל מתחת לחלונות מערכת קריטיים כמו שורת המצב או IME.

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

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

במערכות מרובות משתמשים מוצג רק במסך של המשתמש הבעלים.

כפי שאתה יכול לראות, סוג החלון החדש הזה מאפשר לאפליקציות לכסות תוכן על גבי כל חלונות הפעילות האחרים מלבד "חלונות מערכת קריטיים כמו שורת המצב או IME" (IME מתייחס למקלדת). זה בסדר עבור אפליקציות כמו Facebook Messenger, מכיוון שלראשי הצ'אט שמספקת אותה אפליקציה אין מטרה לשבת בראש שורת המצב, אבל זה משפיע לרעה על רוב האפליקציות שהזכרתי קודם לכן.

יתר על כן, לא נראה שיש דרך לעקיפת הבעיה עבור מפתחים להשתמש, בשלב זה. אפשר לצפות שכדי להימנע מבעיה זו ב-Android O, מפתחים פשוט בונים את האפליקציות שלהם כדי למקד ל-SDK 25 (אנדרואיד 7.1.1). עם זאת, כפי שצוין על ידי מפתח סטטוס ב-Reddit, יש לגוגל הוחלף TYPE_SYSTEM_OVERLAY עם TYPE_APPLICATION_OVERLAY, והשינוי הוא ללא תלות ב-SDK היעד גִרְסָה. מפתחים המשתמשים ב-TYPE_SYSTEM_OVERLAY צריכים כרגע להשתמש ב-TYPE_APPLICATION_OVERLAY כדי לשמור על תאימות, לפיכך, לא משנה על איזו גרסת SDK היעד מבוססת אפליקציה מסוימת, היא יכולה לא להשתמש יותר ב-TYPE_SYSTEM_OVERLAY ב-Android O.


מה ניתן לעשות בנידון?

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

מפתחים שמשתמשים בתכונה זו פתחו דוחות באגים ב- Issue Tracker של אנדרואיד (#260787 ו #36574245) כדי למחות על השינוי ולבקש ממשק API חלופי, אך גוגלר הגיב על המעקב עם ה- ההצהרה הבאה:

סטטוס: לא יתוקן (התנהגות מיועדת)

עקבנו אחרי צוות המוצר וההנדסה וקיבלנו הצעה שמפתחים יכולים להשתמש בפעילויות SHOW_WHEN_LOCKED כדי להראות כשהמכשיר נעול, אבל בכוונה כבר לא ניתן להראות על מסך הנעילה / מעל צל ההודעות

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

מכיוון שזוהי רק התצוגה המקדימה הראשונה למפתחים עבור Android O, עדיין אפשר לגוגל לשנות את התצוגה שלהם וספק את הפונקציונליות הזו עבור אפליקציות שאינן מכוונות ל-Android O, או ל-Google לשחזר TYPE_SYSTEM_OVERLAY. אבל אם הדברים יישארו כפי שהם כרגע, אתה יכול לנשק את האפליקציות האלה לשלום. וזה יהיה חבל.


תודה לאלי ארווין שבדק עבורי רבות מהאפליקציות הללו!