פלטפורמת Android 13 כוללת שינויים בהתנהגות שעשויים להשפיע על האפליקציה שלכם. שינויי ההתנהגות הבאים חלים על כל האפליקציות כשהן פועלות ב-Android 13, בלי קשר ל-targetSdkVersion
. אתם צריכים לבדוק את האפליקציה ואז לשנות אותה לפי הצורך כדי שהיא תתמוך בהן בצורה תקינה, במקרים הרלוונטיים.
חשוב גם לעיין ברשימת השינויים בהתנהגות שמשפיעים רק על אפליקציות שמטרגטות את Android 13.
ביצועים וסוללה
מנהל המשימות
החל מ-Android 13 (רמת API 33), משתמשים יכולים להשלים תהליך עבודה ממגירת ההתראות כדי להפסיק אפליקציות שיש להן שירותים שפועלים בחזית, כמו שמוצג באיור 1. האפשרות הזו נקראת מרכז הבקרה. האפליקציות צריכות להיות מסוגלות לטפל בהפסקת הפעולה הזו שהמשתמש יזם.
שיפור הטיפול במשימות של אחזור מראש באמצעות JobScheduler
JobScheduler מספק לאפליקציות דרך לסמן משימות ספציפיות כמשימות של 'טעינה מראש' (באמצעות JobInfo.Builder.setPrefetch()
), כלומר, באופן אידיאלי הן צריכות לפעול בסמוך להפעלה הבאה של האפליקציה ולפניה, כדי לשפר את חוויית המשתמש.
בעבר, JobScheduler השתמש באות רק כדי לאפשר לעבודות אחזור מראש להשתמש באופן אופטימלי בנתונים פנויים או בנתונים עודפים.
ב-Android 13 (API ברמה 33) ומעלה, המערכת מנסה לקבוע את הפעם הבאה שבה אפליקציה תופעל, ומשתמשת בהערכה הזו כדי להריץ משימות של אחזור מראש. האפליקציות צריכות לנסות להשתמש במשימות של אחזור מראש לכל פעולה שהן רוצות לבצע לפני ההפעלה הבאה של האפליקציה.
ניצול משאבי הסוללה
Android 13 (API ברמה 33) מספקת את הדרכים הבאות לשיפור הניהול של חיי הסוללה במכשיר על ידי המערכת:
- עדכנו את הכללים לגבי המקרים שבהם המערכת מציבה את האפליקציה בדלי ההמתנה של האפליקציות עם הגישה המוגבלת.
- הגבלות חדשות על העבודה שהאפליקציה יכולה לבצע כשהמשתמש מעביר את האפליקציה למצב 'מוגבל' לשימוש בסוללה ברקע.
במהלך הבדיקה של האפליקציה עם השינויים האלה, חשוב לבדוק את הדברים הבאים:
בודקים איך האפליקציה מגיבה כשהמערכת ממקמת אותה בדלי של אפליקציות במצב המתנה עם הגבלות. כדי להקצות את האפליקציה לקטגוריה הזו, משתמשים בפקודה הבאה של ממשק הגישור של Android (ADB):
adb shell am set-standby-bucket PACKAGE_NAME restricted
כדאי לבדוק איך האפליקציה מגיבה להגבלות הבאות שחלות בדרך כלל על אפליקציות שנמצאות במצב מוגבל מבחינת שימוש בסוללה ברקע:
- אי אפשר להפעיל שירותים שפועלים בחזית
- שירותים קיימים שפועלים בחזית מוסרים מהחזית
- ההתראות לא מופעלות
- המשימות לא מבוצעות
כדי להעביר את האפליקציה למצב 'מוגבל', משתמשים בפקודת ה-ADB הבאה:
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
מכסות של הודעות בעדיפות גבוהה בענן ב-Firebase (FCM)
ב-Android 13 (רמת API 33) עודכבו המכסות של העברת הודעות בענן ב-Firebase (FCM) כדי לשפר את המהימנות של מסירת הודעות FCM בעדיפות גבוהה לאפליקציות שמציגות התראות בתגובה להודעות FCM בעדיפות גבוהה. בוצעו השינויים הבאים ב-Android 13 (רמת API 33):
- ההגדרות בApp Standby Buckets כבר לא קובעות כמה הודעות FCM בעדיפות גבוהה אפליקציה יכולה להשתמש בהן.
- המערכת מורידה עכשיו את העדיפות של הודעות בעדיפות גבוהה אם היא מזהה שאפליקציה שולחת באופן עקבי הודעות בעדיפות גבוהה שלא מובילות להצגת התראה.
כמו בגרסאות קודמות של Android, הודעות FCM בעדיפות גבוהה שחורגות מהמכסה מורדות לעדיפות רגילה. כשמתחילים Foreground Services (FGS) בתגובה ל-FCM, מומלץ לבדוק את התוצאה של RemoteMessage.getPriority()
ולוודא שהיא PRIORITY_HIGH
או לטפל בחריגים פוטנציאליים של ForegroundServiceStartNotAllowedException
.
אם האפליקציה לא תמיד מפרסמת התראות בתגובה להודעות FCM בעדיפות גבוהה, מומלץ לשנות את העדיפות של הודעות ה-FCM האלה לרגילה כדי שההודעות שמובילות להתראה לא יסווגו מחדש.
פרטיות
הרשאה לשליחת התראות בתחילת ההפעלה
ב-Android 13 (רמת API 33) נוספה הרשאת הודעות בתחילת ההפעלה:
POST_NOTIFICATIONS
.
השינוי הזה עוזר למשתמשים להתמקד בהתראות שהכי חשובות להם.
מומלץ מאוד לטרגט ל-Android 13 ומעלה בהקדם האפשרי כדי ליהנות מהשליטה והגמישות הנוספות של התכונה הזו.
מידע נוסף על שיטות מומלצות למתן הרשאות לאפליקציות
הסתרה של תוכן רגיש מהלוח
אם האפליקציה מאפשרת למשתמשים להעתיק תוכן רגיש, כמו סיסמאות או פרטי כרטיס אשראי, ללוח, צריך להוסיף דגל ל-ClipDataClipDescription
לפני שמפעילים את ClipboardManager#setPrimaryClip()
. הוספת הדגל הזה מונעת את הצגת התוכן הרגיש בתצוגה המקדימה של התוכן.


כדי לסמן תוכן רגיש, מוסיפים ערך בוליאני ל-ClipDescription
. כל האפליקציות צריכות לעשות את זה, ללא קשר לרמת ה-API המטורגטת.
// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
}
}
// If your app is compiled with a lower SDK
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean("android.content.extra.IS_SENSITIVE", true)
}
}
מידע נוסף על ממשק המשתמש החדש של הלוח זמין בדף התכונה העתקה והדבקה.
אבטחה
מעבר משימוש במזהה משתמש משותף
אם האפליקציה שלכם משתמשת במאפיין android:sharedUserId
שהוצא משימוש, והיא כבר לא מסתמכת על הפונקציונליות של המאפיין, אתם יכולים להגדיר את המאפיין android:sharedUserMaxSdkVersion
לערך 32
, כמו שמוצג בקטע הקוד הבא:
<manifest ...> <!-- To maintain backward compatibility, continue to use "android:sharedUserId" if you already added it to your manifest. --> android:sharedUserId="SHARED_PACKAGE_NAME" android:sharedUserMaxSdkVersion="32" ... </manifest>
המאפיין הזה מציין למערכת שהאפליקציה שלכם כבר לא מסתמכת על מזהה משתמש משותף. אם האפליקציה שלכם מצהירה על android:sharedUserMaxSdkVersion
והיא מותקנת במכשירים עם Android 13 ואילך, האפליקציה מתנהגת כאילו מעולם לא הגדרתם android:sharedUserId
. אפליקציות מעודכנות עדיין משתמשות במזהה המשתמש המשותף הקיים.
מזהי משתמשים משותפים גורמים להתנהגות לא דטרמיניסטית במנהל החבילות. במקום זאת, האפליקציה צריכה להשתמש במנגנוני תקשורת מתאימים, כמו שירותים וספקי תוכן, כדי לאפשר פעולה הדדית בין רכיבים משותפים.
חוויית משתמש
התראות על שירותים שפועלים בחזית שאפשר לסגור
במכשירים עם Android 13 ואילך, המשתמשים יכולים לסגור התראות שמשויכות לשירותים שפועלים בחזית כברירת מחדל.
פונקציונליות עיקרית
הוסר עותק מדור קודם של הטמעה של שירות הדיבור
ב-Android 13, ההטמעה של SpeechService
הוסרה – כולל Voice IME, RecognitionService
ו-API מבוסס-intent – מאפליקציית Google.
ב-Android 12, בוצעו השינויים הבאים:
- הפונקציות של
SpeechService
הועברו אל אפליקציית שירותי הדיבור של Google, שהפכה לספק ברירת המחדל שלSpeechService
. - הפונקציונליות של
RecognitionService
הועברה לאפליקציית Android System Intelligence כדי לתמוך בזיהוי דיבור במכשיר.
כדי לשמור על תאימות האפליקציות ב-Android 12, אפליקציית Google משתמשת בטכניקת טרמפולינה כדי להפנות תנועה לאפליקציית שירותי הדיבור של Google. ב-Android 13, טכניקת הטרמפולינה הזו הוסרה.
אפליקציות צריכות להשתמש בספק ברירת המחדל של המכשיר עבור SpeechService
, ולא לקודד באופן קשיח אפליקציה ספציפית.