פלטפורמת Android 14 כוללת שינויים בהתנהגות שעשויים להשפיע על האפליקציה שלכם. שינויי ההתנהגות הבאים חלים על כל האפליקציות כשהן פועלות ב-Android 14, ללא קשר ל-targetSdkVersion
. אתם צריכים
לבדוק את האפליקציה ולאחר מכן לשנות אותה לפי הצורך כדי לתמוך בהן כראוי, במקרים שבהם
הרלוונטי.
חשוב גם לעיין ברשימה של שינויי התנהגות שמשפיעים רק על אפליקציות שמטרגטת את Android 14.
פונקציונליות עיקרית
כברירת מחדל, אי אפשר לתזמן התראות מדויקות
התראות מדויקות מיועדות להתראות שהמשתמשים רוצים לקבל, או לפעולות שצריכות להתרחש בשעה מדויקת. החל מגרסה 14 של Android, ההרשאה SCHEDULE_EXACT_ALARM
לא מוענקת מראש לרוב האפליקציות החדשות שמותקנות ומטרגטות את Android מגרסה 13 ואילך – ההרשאה נדחית כברירת מחדל.
מידע נוסף על השינויים בהרשאה לתזמון התראות מדויקות
שידורים עם רישום לפי הקשר נמצאים בתור בזמן שהאפליקציות נשמרות במטמון
ב-Android 14, המערכת יכולה להוסיף לשורה של ההעברות בשידור חי שנרשמו לפי הקשר בזמן שהאפליקציה נמצאת במצב שמאוחסן במטמון. ההתנהגות הזו דומה להתנהגות של תורים שהוצגה ב-Android 12 (רמת API 31) עבור טרנזקציות אסינכררוניות של Binder. שידורים שהוצהרו כמניפסט לא נמצאים בתור, והאפליקציות מוסרות ממצב המטמון בשביל לשדר שידורים.
כשהאפליקציה יוצאת ממצב המטמון, למשל חזרה לחזית, מספקת שידורים בתור. מופעים מרובים של שידורים מסוימים יכול להיות ימוזגו לשידור אחד. בהתאם לגורמים אחרים, כמו למשל המערכת תקינות, ייתכן שאפליקציות יוסרו ממצב המטמון שידורים חיים.
אפליקציות יכולות להשבית רק תהליכים שהן מתבצעות ברקע
החל מ-Android 14, כשהאפליקציה קוראת ל-killBackgroundProcesses()
, ה-API יכול לסגור רק את תהליכי הרקע של האפליקציה שלכם.
אם מעבירים את שם החבילה של אפליקציה אחרת, השיטה הזו לא משפיעה על תהליכי הרקע של אותה אפליקציה, ותופיע ההודעה הבאה ב-Logcat:
Invalid packageName: com.example.anotherapp
אסור לאפליקציה להשתמש ב-API של killBackgroundProcesses()
או לנסות להשפיע בדרך אחרת על מחזור החיים של תהליכים באפליקציות אחרות, גם בגרסאות ישנות יותר של מערכת ההפעלה.
Android תוכנן לשמור ברקע אפליקציות שנשמרו במטמון ולעצור אותן
באופן אוטומטי כשהמערכת זקוקה לזיכרון. אם האפליקציה שלכם תסגור אפליקציות אחרות שלא לצורך, היא עלולה להפחית את ביצועי המערכת ולהגדיל את צריכת הסוללה, כי תצטרכו להפעיל מחדש את האפליקציות האלה מאוחר יותר. הפעלה מחדש של אפליקציה קיימת ששמורה במטמון דורשת הרבה פחות משאבים.
ה-MTU מוגדר ל-517 עבור לקוח ה-GATT הראשון שמבקש MTU
החל מ-Android 14, סטאק ה-Bluetooth של Android פועל בהתאם ל-גרסה 5.2 של מפרט הליבה של Bluetooth באופן קפדני יותר, ומבקש את MTU של ATT ב-BLE ל-517 בייטים כשלקוח ה-GATT הראשון מבקש MTU באמצעות ה-API BluetoothGatt#requestMtu(int)
, ומתעלם מכל בקשות ה-MTU הבאות בחיבור ה-ACL הזה.
כדי להתמודד עם השינוי הזה ולשפר את האפליקציה, כדאי לשקול את האפשרויות הבאות:
- מכשיר ההיקפי צריך להגיב לבקשת ה-MTU של מכשיר Android עם ערך סביר שאפשר להכיל במכשיר ההיקפי. הערך הסופי של ההסכם יהיה הערך המינימלי של הערך המבוקש ב-Android והערך שסופק בשלט הרחוק (לדוגמה,
min(517, remoteMtu)
)- כדי להטמיע את התיקון הזה, יכול להיות שיהיה צורך בעדכון קושחה של הציוד ההיקפי
- לחלופין, אפשר להגביל את הכתיבה של מאפייני GATT על סמך הערך המינימלי בין הערך הנתמך הידוע של ההתקן ההיקפי לבין השינוי ב-MTU שהתקבל
- תזכורת: צריך להפחית 5 בייטים מהגודל הנתמך של הכותרות
- לדוגמה:
arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5
סיבה חדשה לכך שאפליקציה יכולה להיכלל בקטגוריה 'המתנה מוגבלת'
ב-Android 14 נוספה סיבה חדשה לכך שאפליקציה יכולה להיכלל בקטגוריית המתנה מוגבלת.
המשימות של האפליקציה גורמות לשגיאות ANR מספר פעמים בגלל תפוגת הזמן של השיטות onStartJob
, onStopJob
או onBind
.
(מידע על השינויים ב-onStartJob
וב-onStopJob
זמין במאמר JobScheduler משפר את ההתנהגות של קריאות חזרה (callbacks) ורשתות).
כדי לעקוב אחרי האפליקציה ולבדוק אם היא נכנסה לקטגוריה של סטטוס המתנה המוגבל, מומלץ לתעד את הנתונים באמצעות ה-API UsageStatsManager.getAppStandbyBucket()
בזמן ביצוע המשימה או UsageStatsManager.queryEventsForSelf()
בזמן הפעלת האפליקציה.
mlock מוגבל ל-64 KB
ב-Android 14 (API ברמה 34) ואילך, הפלטפורמה מצמצמת את נפח הזיכרון המקסימלי שניתן לנעול באמצעות mlock()
ל-64KB לכל תהליך. בגרסאות קודמות, המגבלה הייתה 64MB לכל תהליך. ההגבלה הזו משפרת את ניהול הזיכרון באפליקציות ובמערכת. כדי לשפר את העקביות במכשירים השונים, ב-Android 14 מתווסף בדיקת CTS חדשה למגבלה החדשה של mlock()
במכשירים התואמים.
המערכת אוכפת את השימוש במשאבים של אפליקציות שנשמרו במטמון
כחלק מהעיצוב, התהליך של האפליקציה נמצא במצב שמאוחסן במטמון כשהיא מועברת לרקע ואין רכיבים אחרים של תהליך האפליקציה שפועלים. תהליך אפליקציה כזה עלול להיפסק בגלל לחץ על זיכרון המערכת. כל עבודה שמבצעות מכונות Activity
אחרי שקריאת השיטה onStop()
הושלמה והיא החזירה תשובה, במצב הזה, לא מהימנה ומומלץ מאוד לא לבצע אותה.
בגרסה 14 של Android נוספו עקביות ואכיפה לתכנון הזה. זמן קצר אחרי שתהליך של אפליקציה נכנס למצב שמאוחסן במטמון, אסור לבצע משימות ברקע עד שרכיב של התהליך חוזר למצב פעיל במחזור החיים.
אפליקציות שמשתמשות בממשקי API רגילים של מחזור חיים שנתמכים במסגרת – כמו services, JobScheduler
ו-Jetpack WorkManager – לא אמורות להיות מושפעות מהשינויים האלה.
חוויית משתמש
שינויים באופן שבו המשתמשים רואים התראות שלא ניתן לסגור
如果您的应用向用户显示不可关闭的前台通知,请注意:Android 14 已更改此行为,允许用户关闭此类通知。
这项变更适用于阻止用户关闭前台的应用
将 Notification.FLAG_ONGOING_EVENT
设置为
Notification.Builder#setOngoing(true)
或
NotificationCompat.Builder#setOngoing(true)
。FLAG_ONGOING_EVENT
的行为已发生变化,使用户实际上能够关闭此类通知。
在以下情况下,此类通知仍不可关闭:
- 当手机处于锁定状态时
- 如果用户选择全部清除通知操作(有助于防止意外关闭)
此外,这一新行为不适用于以下用例中的通知:
CallStyle
条通知- 企业设备政策控制器 (DPC) 和支持软件包
- 媒体通知
- 默认的搜索选择器软件包
מידע על אבטחת הנתונים גלוי יותר
כדי לשפר את פרטיות המשתמשים, ב-Android 14 המערכת מציגה את המידע שהצהרתם עליו בטופס ב-Play Console במספר מקומות גדול יותר. בשלב זה, המשתמשים יכולים לראות את המידע הזה בקטע אבטחת נתונים בדף האפליקציה ב-Google Play.
מומלץ לבדוק את המדיניות של האפליקציה בנושא שיתוף נתוני המיקום, ולהקדיש כמה דקות לביצוע עדכונים רלוונטיים בקטע'אבטחת נתונים' ב-Google Play.
במדריך מוסבר איך מידע על אבטחת הנתונים מוצג בצורה בולטת יותר ב-Android 14.
נגישות
שינוי לא לינארי של גופנים עד 200%
从 Android 14 开始,系统支持字体放大高达 200%,为弱视用户提供了符合网络内容无障碍指南 (WCAG) 的其他无障碍功能选项。
如果您已使用放大像素 (sp) 单位来定义文本大小,这项更改可能不会对您的应用产生太大影响。不过,您应在启用最大字号 (200%) 的情况下执行界面测试,确保应用能够在不影响易用性的情况下适应较大的字号。
אבטחה
רמת ה-API המינימלית לטירגוט שניתן להתקנה
החל מ-Android 14, אפליקציות עם
targetSdkVersion
נמוך מ-23
לא ניתן להתקין את האפליקציה. דרישה שהאפליקציות צריכות לעמוד ברמת ה-API המינימלית לטירגוט
הדרישות משפרת את האבטחה והפרטיות של המשתמשים.
תוכנות זדוניות בדרך כלל מכוונות לרמות API ישנות יותר כדי לעקוף את האבטחה והפרטיות
באמצעי ההגנה שהושקו בגרסאות החדשות יותר של Android. לדוגמה,
אפליקציות זדוניות מסוימות משתמשות ב-targetSdkVersion
מתוך 22 כדי להימנע מחשיפה
את מודל ההרשאות בזמן ריצה הושק בשנת 2015 על ידי Android 6.0 Marshmallow (API
רמה 23). השינוי הזה ב-Android 14 מקשה על תוכנות זדוניות להימנע מאבטחה
ושיפורים בפרטיות.
ניסיון להתקין אפליקציה שמטרגטת רמת API נמוכה יותר יגרום
נכשלה ההתקנה, ומופיעה ההודעה הבאה ב-Logcat:
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7
במכשירים שמשדרגים ל-Android 14, כל אפליקציה עם ערך נמוך יותר ב-targetSdkVersion
יותר מ-23 מכשירים יישארו מותקנים.
אם אתם צריכים לבדוק אפליקציה שמטרגטת לרמת API ישנה יותר, צריך להשתמש בפקודה הבאה של ADB:
adb install --bypass-low-target-sdk-block FILENAME.apk
ייתכן ששמות החבילות של בעלי המדיה יימחקו
מאגר המדיה תומך בשאילתות לגבי העמודה OWNER_PACKAGE_NAME
, שמציינת את האפליקציה ששמרה קובץ מדיה מסוים. החל מגרסה Android 14, הערך הזה מושמט אלא אם מתקיים לפחות אחד מהתנאים הבאים:
- לאפליקציה ששמרה את קובץ המדיה יש שם חבילה שגלוי תמיד לאפליקציות אחרות.
האפליקציה ששולחת שאילתה לחנות המדיה מבקשת את ההרשאה
QUERY_ALL_PACKAGES
.
מידע נוסף על האופן שבו מערכת Android מסננת את החשיפה של חבילות למטרות פרטיות.