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

פלטפורמת 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

您的应用不应使用 killBackgroundProcesses() API,也不得以其他方式尝试影响其他应用的进程生命周期,即使在旧版操作系统上也是如此。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() 方法后执行的任何工作均不可靠,强烈建议不要这样做。

Android 14 对此设计引入了一致性和强制执行要求。在应用进程进入缓存状态后不久,系统会禁止后台工作,直到进程组件重新进入生命周期的活跃状态。

使用框架支持的典型生命周期 API(例如服务JobSchedulerJetpack 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%

החל מגרסה 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

ייתכן ששמות החבילות של בעלי המדיה יימחקו

מאגר המדיה תומך בשאילתות לגבי העמודה OWNER_PACKAGE_NAME, שמציינת את האפליקציה ששמרה קובץ מדיה מסוים. החל מגרסה Android 14, הערך הזה מושמט אלא אם מתקיים לפחות אחד מהתנאים הבאים:

  • לאפליקציה ששמרה את קובץ המדיה יש שם חבילה שגלוי תמיד לאפליקציות אחרות.
  • האפליקציה ששולחת שאילתה לחנות המדיה מבקשת את ההרשאה QUERY_ALL_PACKAGES.

מידע נוסף על האופן שבו מערכת Android מסננת את החשיפה של חבילות למטרות פרטיות.

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

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