מערכת Android 9 (רמת API 28) כוללת כמה שינויים במערכת Android.
השינויים הבאים בהתנהגות חלים רק על אפליקציות שמטרגטות
רמת API 28 ומעלה. באפליקציות שהגדירו את targetSdkVersion
לרמת API 28 ואילך, צריך לשנות את האפליקציות כך שישתמשו בהתנהגויות האלה בצורה תקינה, אם הדבר רלוונטי לאפליקציה.
לשינויים שמשפיעים על כל האפליקציות שפועלות ב-Android 9, בלי קשר ל-API ברמה שאליה הם מטרגטים, לראות שינויים בהתנהגות: כל האפליקציות.
שירותים שפועלים בחזית
אפליקציות שמטרגטות ל-Android מגרסה 9 ואילך ומשתמשות בשירותים שפועלים בחזית צריכות לבקש את ההרשאה FOREGROUND_SERVICE
. זו הרשאה רגילה,
כך שהמערכת מעניקה את ההרשאה באופן אוטומטי לאפליקציה ששלחה את הבקשה.
אם אפליקציה שמטרגטת ל-Android מגרסה 9 ואילך מנסה ליצור שירות שפועל בחזית בלי לבקש את ההרשאה FOREGROUND_SERVICE
, המערכת תשליך את השגיאה SecurityException
.
שינויים בנושא פרטיות
אם האפליקציה שלך מטרגטת את Android 9, עליך לשמור את הפרטים הבאים בהתנהגות של אנשים. העדכונים האלה במידע על המכשיר, המספר הסידורי וה-DNS משפרים את הפרטיות של המשתמשים.
הוצאה משימוש של מספרי סידורי ב-Build
ב-Android 9, הערך של Build.SERIAL
מוגדר תמיד ל-"UNKNOWN"
כדי להגן על פרטיות המשתמשים.
אם האפליקציה שלך צריכה גישה למספר הסידורי של החומרה של המכשיר, עליך
לבקש במקום זאת
READ_PHONE_STATE
ואז לבצע קריאה
getSerial()
פרטיות ב-DNS
אפליקציות שמטרגטות את Android 9 צריכות לפעול בהתאם לממשקי ה-API של DNS פרטי. באופן ספציפי, האפליקציות צריכות לוודא שאם מקודד המערכת משתמש ב-DNS-over-TLS, כל לקוח DNS מובנה ישתמש ב-DNS מוצפן לאותו שם מארח כמו המערכת, או יושבת לטובת מקודד המערכת.
שינויים באבטחת המסגרת
גרסת Android 9 כוללת כמה שינויים בהתנהגות שמשפרים את האבטחה של האפליקציה, אבל השינויים האלה נכנסים לתוקף רק אם האפליקציה מטרגטת לרמת API 28 ואילך.
Network TLS מופעל כברירת מחדל
אם האפליקציה שלכם מטרגטת ל-Android מגרסה 9 ואילך, השיטה isCleartextTrafficPermitted()
מחזירה את הערך false
כברירת מחדל. אם האפליקציה צריכה להפעיל טקסט ללא הצפנה
דומיינים ספציפיים, צריך להגדיר במפורש את cleartextTrafficPermitted
ל-true
עבור הדומיינים האלה באבטחת הרשת של האפליקציה שלך
הגדרה.
ספריות נתונים מבוססות-אינטרנט שמחולקות לפי תהליך
כדי לשפר את יציבות האפליקציה ואת תקינות הנתונים ב-Android 9, אפליקציות לא יכולות
לשתף נתונים בודדים של WebView
מאגר בין
מספר תהליכים. בדרך כלל,
ספריות נתונים כאלה יאחסנו קובצי Cookie, מטמוני HTTP ועוד
אחסון זמני שקשור לגלישה באינטרנט.
ברוב המקרים, צריך להשתמש באפליקציה בכיתות מחבילת android.webkit
, כמו WebView
ו-CookieManager
, בתהליך אחד בלבד. לדוגמה, צריך להעביר את כל
Activity
אובייקטים שנעשה בהם שימוש ב-WebView
לאותו תהליך. כדי לאכוף בצורה מחמירה יותר את הכלל 'תהליך אחד בלבד', אפשר לבצע קריאה ל-disableWebView()
בתהליכים האחרים של האפליקציה. הקריאה הזו מונעת את האיפוס של WebView
בטעות בתהליכים האחרים, גם אם היא נקראת מספרייה תלויה.
אם האפליקציה שלכם צריכה להשתמש במופעים של WebView
ביותר מתהליך אחד, עליכם להקצות סיומת ייחודית לספריית הנתונים לכל תהליך באמצעות השיטה WebView.setDataDirectorySuffix()
, לפני שמשתמשים במופע נתון של WebView
בתהליך הזה. בשיטה הזו, נתוני האתר מכל תהליך נשמרים בספרייה משלו בספריית הנתונים של האפליקציה.
דומיינים של SELinux לכל אפליקציה
אפליקציות שמטרגטות את Android 9 ואילך לא יכולות לשתף נתונים עם אפליקציות אחרות באמצעות הרשאות Unix נגישות לכל העולם. השינוי הזה משפר את התקינות של ארגז חול לאפליקציות ל-Android, ובעיקר לדרישה גישה למידע פרטי רק על ידי אותה האפליקציה.
כדי לשתף קבצים עם אפליקציות אחרות, צריך להשתמש בשדה תוכן ספק.
שינויים בקישוריות
ספירת נתוני קישוריות ומסלולים מרובים
באפליקציות שמטרגטות את Android מגרסה 9 ואילך, המערכת סופרת את תעבורת הנתונים ברשתות שאינן ברירת המחדל הנוכחית – למשל, תעבורת נתונים סלולרית בזמן שהמכשיר מחובר ל-Wi-Fi – ומספקת שיטות בכיתה NetworkStatsManager
לשליחת שאילתות לגבי התנועה הזו.
באופן ספציפי, הערך שמוחזר עכשיו על ידי getMultipathPreference()
מבוסס על תעבורת הנתונים ברשת שצוינה למעלה. מתחיל ב-
Android 9, השיטה מחזירה את הערך true
עבור נתוני התא, אבל כשכמות מסוימת של
התנועה שנצברת ביום, מתחילה לחזור false
. אפליקציות שפועלות ב-Android 9 חייבות לבצע קריאה ל-method ולפעול בהתאם להנחיה הזו.
הכיתה ConnectivityManager.NetworkCallback
שולחת עכשיו מידע על רשתות VPN לאפליקציות. השינוי הזה יהיה הרבה יותר קל
לאפליקציות להאזין לאירועי קישוריות מבלי לשלב בין
קריאות אסינכרוניות ושימוש בממשקי API מוגבלים. בנוסף, המשמעות היא שהעברת המידע פועלת כצפוי כשהמכשיר מחובר בו-זמנית למספר רשתות Wi-Fi או למספר רשתות סלולריות.
הוצאה משימוש של לקוח HTTP ב-Apache
עם Android 6.0, הסרנו את התמיכה בלקוח ה-HTTP Apache. החל מ-Android 9, הספרייה הזו מוסרת כברירת מחדל, מזהה האתחול לא זמין לאפליקציות.
כדי להמשיך להשתמש בלקוח ה-HTTP של Apache, אפליקציות שמטרגטות את Android מגרסה 9 ואילך יכולות להוסיף את הפרטים הבאים ל-AndroidManifest.xml
:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
כחלופה לשימוש בספריית Apache של סביבת זמן הריצה, אפליקציות יכולות לאגד את
גרסה משלו של הספרייה org.apache.http
ב-APK שלהם. אם תעשו זאת,
צריך לארוז מחדש את הספרייה (עם כלי שירות כמו
Jar Jar) כדי למנוע בעיות בתאימות לכיתות.
במסגרת המחלקות המסופקות בסביבת זמן הריצה.
שינויים בממשק המשתמש
הצגת המיקוד
כבר אי אפשר להתמקד בתצוגות עם אזור של 0 (רוחב או גובה של 0).
בנוסף, פעילויות לא מקצות יותר באופן משתמע את המיקוד הראשוני במצב מגע. במקום זאת, אם רוצים להתמקד ברכיב מסוים, צריך לבקש זאת במפורש.
טיפול בערכי CSS RGBA בפורמט הקסדצימלי
באפליקציות שמטרגטות את Android מגרסה 9 ואילך צריך להפעיל את התנהגות טיוטת CSS Color Module Level 4 לטיפול בצבעים של CSS ב-4 וב-8 ספרות הקסדצימליות.
Chrome תומך ב-CSS Color Module ברמה 4 מאז הגרסה 52, אבל WebView משבית את התכונה כרגע כי נמצאו אפליקציות קיימות ל-Android שמכילות צבעים הקסדצימליים של 32 ביט בסדר של Android (ARGB), שעלול לגרום לשגיאות עיבוד.
לדוגמה, הצבע #80ff8080
מעובד כרגע
WebView אטום
אדום בהיר (#ff8080
) לאפליקציות שמטרגטות לרמות API 27 ומטה. בשלב זה, המערכת מתעלמת מהרכיב המוביל (שמערכת Android תפרוס כרכיב האלפא). אם האפליקציה מטרגטת רמת API 28 ואילך, הערך #80ff8080
מפורש כירוק בהיר שקוף ב-50% (#80ff80
).
זיהוי סוג MIME של קובץ: מזהי URI
בגרסאות Android שקודמות ל-Android 9 יכול להיות שהמערכת תסיק סוגי MIME מהקובץ
תוכן. החל מ-Android 9 (רמת API 28), אפליקציות חייבות להשתמש ב
סיומת הקובץ הנכונה כשטוענים מזהי URI של file:
WebView.
השימוש בתוכן הקובץ כדי להסיק שסוגי MIME עלול להיות מקור לבאגים באבטחה, ובדרך כלל הדבר אסור על ידי דפדפנים מודרניים.
אם לקובץ יש סיומת קובץ מוכרת כמו .html
,.txt
, .js
או .css
, סוג ה-MIME יקבע לפי הסיומת.
אם לקובץ אין סיומת או שיש לו סיומת לא מזוהה, סוג ה-MIME יהיה טקסט פשוט.
לדוגמה, URI כמו file:///sdcard/test.html
יעובד
אבל URI כמו file:///sdcard/test
יוצג כטקסט פשוט.
גם אם הקובץ מכיל נתוני HTML.
רכיב גלילה במסמך
Android 9 מטפל כראוי בבקשות לרמה הבסיסית (root) של מסמך הוא רכיב הגלילה. בגרסאות קודמות, מיקום הגלילה הוגדר ברכיב הגוף לרכיב השורש היו אפס ערכי גלילה. ב-Android 9 אפשר להשתמש התנהגות שתואמת לתקנים, כשרכיב הגלילה הוא הרמה הבסיסית (root) לרכיב מסוים.
בנוסף, באמצעות גישה ישירה אל document.body.scrollTop
, document.body.scrollLeft
,
document.documentElement.scrollTop
או document.documentElement.scrollLeft
יפעלו באופן שונה בהתאם ל-SDK המטורגט. כדי לגשת לערכים של גלילה בחלון התצוגה, משתמשים ב-document.scrollingElement
, אם הוא זמין.
התראות מאפליקציות מושעות
לפני Android 9, התראות מאפליקציות מושעות בוטלו. החל מגרסה 9 של Android, ההתראות מאפליקציות מושעות מוסתרות עד שממשיכים להשתמש באפליקציה.