פלטפורמת 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 开始,Android 蓝牙堆栈会更严格地遵循 蓝牙核心规范 5.2 版,并在第一个 GATT 客户端使用 BluetoothGatt#requestMtu(int)
API 请求 MTU 时将 BLE ATT MTU 请求设为 517 字节,并忽略该 ACL 连接上的所有后续 MTU 请求。
如需解决此更改并使您的应用更为稳健,请考虑以下选项:
- 您的外围设备应使用外围设备可以容纳的合理值来响应 Android 设备的 MTU 请求。最终协商的值将是 Android 请求的值和远程提供的值(例如
min(517, remoteMtu)
)的较小值- 实现此修复程序可能需要更新外围设备的固件
- 或者,您也可以根据外围设备的已知支持值与收到的 MTU 更改值之间的最小值来限制 GATT 特征写入
- 提醒您,应将标头的支持大小减小 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 מוגבל ל-64KB
ב-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%
החל מגרסה 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 מסננת את החשיפה של חבילות למטרות פרטיות.