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

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

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

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

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

精确的闹钟适用于用户指定的通知,或是在确切时间需要执行的操作。从 Android 14 开始,系统不再向以 Android 13 及更高版本为目标平台的大多数新安装应用预先授予 SCHEDULE_EXACT_ALARM 权限,该权限默认处于拒绝状态。

详细了解安排精确闹钟的权限变化

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

在 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 引入了一种可将应用放入受限待机模式存储分区的新原因。由于 onStartJobonStopJobonBind 方法超时,应用的作业多次触发 ANR 错误。(如需了解对 onStartJobonStopJob 的更改,请参阅 JobScheduler 强化了回调和网络行为。)

如需跟踪应用是否已进入受限待机分桶,我们建议您在作业执行时使用 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%, וכך מספקת למשתמשים אפשרויות נגישות נוספות.

אם אתם כבר משתמשים ביחידות של פיקסלים שניתן לשנות (sp) כדי להגדיר את גודל הטקסט, השינוי הזה כנראה לא ישפיע על האפליקציה שלכם. עם זאת, מומלץ לבצע בדיקות של ממשק המשתמש עם גודל הגופן המקסימלי (200%) כדי לוודא שהאפליקציה יכולה להכיל גדלי גופן גדולים יותר בלי לפגוע בשימושיות.

אבטחה

רמת ה-API המינימלית לטירגוט שאפשר להתקין

从 Android 14 开始,targetSdkVersion 低于 23 的应用无法安装。要求应用满足这些最低目标 API 级别要求有助于提高用户的安全性和隐私性。

恶意软件通常会以较旧的 API 级别为目标平台,以绕过在较新版本 Android 中引入的安全和隐私保护机制。例如,有些恶意软件应用使用 targetSdkVersion 22,以避免受到 Android 6.0 Marshmallow(API 级别 23)在 2015 年引入的运行时权限模型的约束。这项 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).