מערכת 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 מוצפן לאותו שם מארח כמו או מושבתת לטובת מקודד המערכת.
שינויי אבטחה ב-framework
ב-Android 9 יש כמה שינויים בהתנהגות שמשפרים את לאבטחת האפליקציה, אבל השינויים האלה ייכנסו לתוקף רק אם האפליקציה מטרגטת רמת API 28 ומעלה.
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
class כדי לשלוח שאילתה על התנועה הזו.
באופן ספציפי,
getMultipathPreference()
מחזירה ערך שמבוסס על תנועת הרשת שהוזכרו קודם לכן. מתחיל ב-
Android 9, השיטה מחזירה את הערך true
עבור נתוני התא, אבל כשכמות מסוימת של
התנועה שנצברת ביום, מתחילה לחזור false
. אפליקציות פועלות ב-
מערכת Android 9 חייבת להפעיל את השיטה ולפעול בהתאם לרמז הזה.
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).
בנוסף, פעילויות כבר לא מוקצות באופן מרומז את המיקוד הראשוני במצב מגע. במקום זאת, אתם צריכים לבקש במפורש את המיקוד הראשוני, הרצוי.
טיפול בערך הקסדצימלי של RGBA ב-CSS
צריך להפעיל את הטיוטה באפליקציות שמטרגטות את Android 9 ואילך רמה 4 של מודול צבע CSS לטיפול בצבעי CSS עם 4 ו-8 ספרות הקסדצימליות.
רמה 4 של מודול צבע CSS נתמכת ב-Chrome מאז גרסה 52, אבל WebView משבית כרגע את התכונה כי נמצא שהאפליקציות הקיימות ל-Android מכילות צבעים הקסדצימליים של 32 ביט בסדר של Android (ARGB), שיגרום לשגיאות עיבוד.
לדוגמה, הצבע #80ff8080
מעובד כרגע
WebView אטום
אדום בהיר (#ff8080
) לאפליקציות שמטרגטות לרמות API 27 ומטה. המובילים
(ש-Android יתפרש כרכיב האלפא)
שכרגע המערכת מתעלמת ממנו. אם אפליקציה מטרגטת רמת API 28 ומעלה, הערך של #80ff8080
הוא
מוגדר כ-50% בצבע ירוק בהיר שקוף (#80ff80
).
לכידת סוג MIME של קובץ: URIs
בגרסאות Android שקודמות ל-Android 9 יכול להיות שהמערכת תסיק סוגי MIME מהקובץ
תוכן. החל מ-Android 9 (רמת API 28), אפליקציות חייבות להשתמש ב
סיומת הקובץ הנכונה כשטוענים מזהי URI של file:
WebView.
השימוש בתוכן הקובץ כדי להסיק שסוגי MIME עלול להיות מקור לבאגים באבטחה, ובדרך כלל הדבר אסור על ידי דפדפנים מודרניים.
אם לקובץ יש סיומת קובץ מזוהה כמו .html
,
סוג ה-MIME ייקבע על ידי התוסף .txt
, .js
או .css
.
אם לקובץ אין סיומת או שהסיומת שלו לא מזוהה, סוג ה-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, התראות מאפליקציות מושעות בוטלו. החל מ-Android 9, התראות מאפליקציות מושעות מוסתרות עד להפעיל מחדש את האפליקציה.