פלטפורמת Android 14 כוללת שינויים בהתנהגות שעשויים להשפיע על האפליקציה שלכם. השינויים הבאים בהתנהגות חלים על כל האפליקציות כשהן פועלות ב-Android 14, בלי קשר ל-targetSdkVersion
. אתם צריכים לבדוק את האפליקציה ולשנות אותה לפי הצורך כדי שהיא תתמוך בהן בצורה תקינה, במקרים הרלוונטיים.
חשוב גם לבדוק את רשימת השינויים בהתנהגות שמשפיעים רק על אפליקציות שמטרגטות ל-Android 14.
פונקציונליות עיקרית
כברירת מחדל, אין אפשרות לתזמן התראות מדויקות
Exact alarms are meant for user-intentioned notifications, or for actions that
need to happen at a precise time. Starting in Android 14, the
SCHEDULE_EXACT_ALARM
permission is no longer being pre-granted to most newly installed apps
targeting Android 13 and higher—the permission is denied by default.
Learn more about the changes to the permission for scheduling exact alarms.
שידורים שנרשמו בהקשר מסוים מתווספים לתור בזמן שהאפליקציות נמצאות במטמון
On Android 14, the system can place context-registered broadcasts in a queue while the app is in the cached state. This is similar to the queuing behavior that Android 12 (API level 31) introduced for async binder transactions. Manifest-declared broadcasts aren't queued, and apps are removed from the cached state for broadcast delivery.
When the app leaves the cached state, such as returning to the foreground, the system delivers any queued broadcasts. Multiple instances of certain broadcasts might be merged into one broadcast. Depending on other factors, such as system health, apps might be removed from the cached state, and any previously queued broadcasts are delivered.
אפליקציות יכולות להפסיק רק את התהליכים שלהן ברקע
החל מ-Android 14, כשהאפליקציה קוראת ל-killBackgroundProcesses()
, ה-API יכול לסגור רק את תהליכי הרקע של האפליקציה שלכם.
אם מעבירים את שם החבילה של אפליקציה אחרת, השיטה הזו לא משפיעה על תהליכי הרקע של אותה אפליקציה, ותופיע ההודעה הבאה ב-Logcat:
Invalid packageName: com.example.anotherapp
אסור לאפליקציה להשתמש ב-API של killBackgroundProcesses()
או לנסות להשפיע בדרך אחרת על מחזור החיים של תהליכים באפליקציות אחרות, גם בגרסאות ישנות יותר של מערכת ההפעלה.
Android תוכנן לשמור ברקע אפליקציות שנשמרו במטמון ולעצור אותן
באופן אוטומטי כשהמערכת זקוקה לזיכרון. אם האפליקציה שלכם תסגור אפליקציות אחרות שלא לצורך, היא עלולה להפחית את ביצועי המערכת ולהגדיל את צריכת הסוללה, כי תצטרכו להפעיל מחדש את האפליקציות האלה מאוחר יותר. הפעלה מחדש של אפליקציה קיימת ששמורה במטמון דורשת הרבה פחות משאבים.
ערך ה-MTU מוגדר ל-517 עבור לקוח ה-GATT הראשון שמבקש MTU
Starting from Android 14, the Android Bluetooth stack more strictly adheres to
Version 5.2 of the Bluetooth Core Specification and requests
the BLE ATT MTU to 517 bytes when the first GATT client requests an MTU using
the BluetoothGatt#requestMtu(int)
API, and disregards all subsequent MTU
requests on that ACL connection.
To address this change and make your app more robust, consider the following options:
- Your peripheral device should respond to the Android device's MTU request
with a reasonable value that can be accommodated by the peripheral. The
final negotiated value will be a minimum of the Android requested value and
the remote provided value (for example,
min(517, remoteMtu)
)- Implementing this fix could require a firmware update for peripheral
- Alternatively, limit your GATT characteristic writes based on the minimum
between the known supported value of your peripheral and the received MTU
change
- A reminder that you should reduce 5 bytes from the supported size for the headers
- For example:
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()
במכשירים התואמים.
המערכת אוכפת את השימוש במשאבים של אפליקציות שנשמרו במטמון
By design, an app's process is in a cached state when it's moved to the
background and no other app process components are running. Such an app process
is subject to being killed due to system memory pressure. Any work that
Activity
instances perform after the onStop()
method has been called and
returned, while in this state, is unreliable and strongly discouraged.
Android 14 introduces consistency and enforcement to this design. Shortly after an app process enters a cached state, background work is disallowed, until a process component re-enters an active state of the lifecycle.
Apps that use typical framework-supported lifecycle APIs – such as
services, JobScheduler
, and Jetpack WorkManager – shouldn't be
impacted by these changes.
חוויית משתמש
שינויים בחוויית המשתמש לגבי התראות שלא ניתן לסגור
אם האפליקציה מציגה למשתמשים התראות בחזית שלא ניתן לסגור, 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% באופן לא לינארי
החל מגרסה 14 של Android, המערכת תומכת בהגדלת גופן עד 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
יכול להיות ששמות החבילות של בעלי המדיה יוסתרו
The media store supports queries for the OWNER_PACKAGE_NAME
column, which
indicates the app that stored a particular media file. Starting in Android
14, this value is redacted unless at least one of the following conditions is
true:
- The app that stored the media file has a package name that is always visible to other apps.
The app that queries the media store requests the
QUERY_ALL_PACKAGES
permission.
Learn more about how Android filters package visibility for privacy purposes.