שינויים בהתנהגות: כל האפליקציות

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

חשוב גם לבדוק את רשימת השינויים בהתנהגות שמשפיעים רק על אפליקציות שמטרגטות ל-Android 14.

פונקציונליות עיקרית

כברירת מחדל, נדחות בקשות לתזמון התראות מדויקות

התראות מדויקות מיועדות להתראות שהמשתמשים רוצים לקבל, או לפעולות שצריכות להתרחש בשעה מדויקת. החל מגרסה 14 של Android, ההרשאה SCHEDULE_EXACT_ALARM לא מוענקת מראש לרוב האפליקציות החדשות שמותקנות ומטרגטות את Android מגרסה 13 ואילך – ההרשאה נדחית כברירת מחדל.

מידע נוסף על השינויים בהרשאה לתזמון התראות מדויקות

שידורים רשומים בהקשר מסוים מוכנסים לתור בזמן שהאפליקציות נמצאות במטמון

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.

אפליקציות יכולות להפסיק רק את התהליכים שלהן ברקע

Starting in Android 14, when your app calls killBackgroundProcesses(), the API can kill only the background processes of your own app.

If you pass in the package name of another app, this method has no effect on that app's background processes, and the following message appears in Logcat:

Invalid packageName: com.example.anotherapp

Your app shouldn't use the killBackgroundProcesses() API or otherwise attempt to influence the process lifecycle of other apps, even on older OS versions. Android is designed to keep cached apps in the background and kill them automatically when the system needs memory. If your app kills other apps unnecessarily, it can reduce system performance and increase battery consumption by requiring full restarts of those apps later, which takes significantly more resources than resuming an existing cached app.

ערך ה-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

In Android 14 (API level 34) and higher, the platform reduces the maximum memory that can be locked using mlock() to 64 KB per process. In previous versions, the limit was 64 MB per process. This restriction promotes better memory management across apps and the system. To provide more consistency across devices, Android 14 adds a new CTS test for the new mlock() limit on compatible devices.

המערכת אוכפת את השימוש במשאבים של אפליקציות שנשמרו במטמון

כחלק מהעיצוב, התהליך של האפליקציה נמצא במצב שמאוחסן במטמון כשהיא מועברת לרקע ואין רכיבים אחרים של תהליך האפליקציה שפועלים. תהליך אפליקציה כזה עלול להיפסק בגלל לחץ על זיכרון המערכת. כל עבודה שמבצעות מכונות 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%, וכך מספקת למשתמשים אפשרויות נגישות נוספות.

אם אתם כבר משתמשים ביחידות של פיקסלים שניתן לשנות (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 מסננת את החשיפה של חבילות למטרות פרטיות.

דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן.‏ Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.

עדכון אחרון: 2025-12-19 (שעון UTC).