פלטפורמת 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
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%
החל מגרסה 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 מסננת את החשיפה של חבילות למטרות פרטיות.