ב-Android 11 נוספו כלים חדשים למפתחים לבדיקה ולניפוי באגים באפליקציה, בהתאם לשינויים בהתנהגות בגרסאות חדשות יותר של פלטפורמת Android. הכלים האלה הם חלק ממסגרת תאימות שמאפשרת למפתחי אפליקציות להפעיל ולהשבית שינויים שעלולים לשבור את האפליקציה באופן פרטני באמצעות אפשרויות למפתחים או ADB. כדאי לנצל את הגמישות הזו כשמתכוננים לטרגט את גרסת ה-API היציבה העדכנית ביותר וכשבודקים את האפליקציה באמצעות גרסת הטרום-השקה של גרסת Android הבאה.
כשמשתמשים בכלים של מסגרת התאימות, פלטפורמת Android מתאימה באופן אוטומטי את הלוגיקה הפנימית שלה, כך שלא צריך לשנות את targetSDKVersion
או לקמפל מחדש את האפליקציה כדי לבצע בדיקות בסיסיות. מכיוון שאפשר להפעיל או להשבית כל שינוי בנפרד, אתם יכולים לבודד, לבדוק ולפתור בעיות בשינוי התנהגות אחד בכל פעם, או להשבית שינוי יחיד שגורם לבעיות אם אתם צריכים לבדוק משהו אחר קודם.
איך מזהים אילו שינויים מופעלים
כשמפעילים שינוי בהתנהגות, הוא יכול להשפיע על האופן שבו האפליקציה ניגשת לממשקי ה-API של הפלטפורמה שמושפעים מהשינוי הזה. אפשר לבדוק אילו שינויים בהתנהגות מופעלים באמצעות אפשרויות למפתחים, logcat או פקודות ADB.
זיהוי שינויים שהופעלו באמצעות אפשרויות למפתחים

איור 1. מסך השינויים בתאימות האפליקציה באפשרויות למפתחים.
באפשרויות למפתחים במכשיר, אפשר לראות אילו שינויים מופעלים ולהפעיל או להשבית אותם. כדי לגשת לאפשרויות האלה, פועלים לפי השלבים הבאים:
- אם האפשרויות למפתחים עדיין לא הופעלו, מפעילים אותן.
- פותחים את אפליקציית ההגדרות במכשיר ועוברים אל מערכת > אפשרויות מתקדמות > אפשרויות למפתחים > שינויים בתאימות האפליקציה.
בוחרים את האפליקציה מהרשימה.
כל שינוי בהתנהגות שייך בדרך כלל לאחת משתי הקטגוריות הבאות:
שינויים שמשפיעים על כל האפליקציות שפועלות בגרסה הזו של Android, בלי קשר ל
targetSdkVersion
של האפליקציה.השינויים האלה מופעלים כברירת מחדל במסגרת התאימות, והם מפורטים בממשק המשתמש בקטע שינויים שמופעלים כברירת מחדל.
שינויים שמשפיעים רק על אפליקציות שמטרגטות גרסאות מסוימות של Android. השינויים האלה משפיעים רק על אפליקציות שמטרגטות גרסה ספציפית של Android, ולכן הם נקראים גם שינויים מוגבלים על ידי
targetSDKVersion
.השינויים האלה מופעלים כברירת מחדל במסגרת התאימות אם האפליקציה שלכם מטרגטת גרסה גבוהה יותר מגרסת ה-API שמופיעה ברשימה. לדוגמה, שינוי בהתנהגות שמוגבל על ידי
targetSDKVersion
ב-Android 13 (רמת API 33) יופיע בממשק המשתמש בקטע שנקרא Enabled for targetSdkVersion >=33. בגרסאות Android ישנות יותר, הכותרת של הקטע הזה היא 'הופעלה לאחר SDK API_LEVEL'.
באיור 1 יש גם קטע שנקרא Default Disabled Changes (שינויים שמושבתים כברירת מחדל). שינויים שמופיעים בקטע הזה יכולים לשמש למגוון מטרות. לפני שמפעילים את השינויים האלה, חשוב לקרוא את תיאור השינוי ברשימת מסגרות התאימות לגרסת Android הזו.
זיהוי שינויים שהופעלו באמצעות logcat
בכל שינוי בהתנהגות, בפעם הראשונה במהלך התהליך של האפליקציה שבה האפליקציה קוראת ל-API המושפע, המערכת מוציאה פלט של הודעת logcat כמו זו:
D CompatibilityChangeReporter: Compat change id reported: 194833441; UID 10265; state: ENABLED
כל הודעה ב-logcat כוללת את הפרטים הבאים:
- שינוי המזהה
- מציין איזה שינוי משפיע על האפליקציה. הערך הזה ממופה לאחד מהשינויים בהתנהגות שמפורטים במסך שינויים בתאימות האפליקציה (ראו איור 1). בדוגמה הזו,
194833441
ממופה ל-NOTIFICATION_PERM_CHANGE_ID
. - UID
- מציין על איזו אפליקציה השינוי משפיע.
- מדינה
מציין אם השינוי משפיע על האפליקציה.
הסטטוס יכול להיות אחד מהערכים הבאים:
מדינה משמעות ENABLED
השינוי מופעל וישפיע על התנהגות האפליקציה אם: האפליקציה משתמשת בממשקי ה-API שהשתנו. DISABLED
השינוי מושבת ולא ישפיע על האפליקציה.
הערה: אם השינוי הזה מושבת כי
targetSDKVersion
של האפליקציה נמוך מהסף הנדרש, השינוי יופעל כברירת מחדל כשהאפליקציה תגדיל אתtargetSDKVersion
שלה כדי לטרגט גרסה גבוהה יותר.LOGGED
השינוי מתועד באמצעות מסגרת התאימות, אבל אי אפשר להפעיל או להשבית אותו. למרות שאי אפשר להפעיל או להשבית את השינוי הזה, הוא עדיין עשוי להשפיע על התנהגות האפליקציה. מידע נוסף זמין בתיאור השינוי ברשימת מסגרות התאימות לגרסת Android הזו. במקרים רבים, סוגי השינויים האלה הם ניסיוניים ואפשר להתעלם מהם.
זיהוי שינויים מופעלים באמצעות ADB
מריצים את פקודת ה-ADB הבאה כדי לראות את כל השינויים (גם אלה שהופעלו וגם אלה שהושבתו) בכל המכשיר:
adb shell dumpsys platform_compat
בפלט מפורטים הפרטים הבאים לגבי כל שינוי:
- שינוי המזהה
- מזהה ייחודי של שינוי ההתנהגות הזה. לדוגמה,
194833441
. - שם
- השם של שינוי ההתנהגות הזה. לדוגמה,
NOTIFICATION_PERM_CHANGE_ID
. - קריטריונים של targetSDKVersion
באילו תנאים השינוי מוגבל (אם בכלל).
targetSDKVersion
לדוגמה, אם השינוי הזה מופעל רק באפליקציות שמיועדות לגרסה 33 ואילך של SDK, הפלט הוא
enableAfterTargetSdk=32
. אם השינוי לא מוגבל על ידיtargetSDKVersion
, הפלט הואenableAfterTargetSdk=0
.- שינויים בחבילה
השם של כל חבילה שבה מצב ברירת המחדל של השינוי (מופעל או מושבת) בוטל.
לדוגמה, אם מדובר בשינוי שמופעל כברירת מחדל, שם החבילה של האפליקציה יופיע אם השבתתם את השינוי באמצעות אפשרויות למפתחים או ADB. במקרה כזה, הפלט יהיה:
packageOverrides={com.my.package=false}
אפשר להפעיל או להשבית שינויים שמוגבלים על ידי
targetSDKVersion
כברירת מחדל, כך שרשימת החבילות יכולה לכלול מקרים שלtrue
אוfalse
, בהתאם לtargetSDKVersion
של כל אחת מהאפליקציות האלה. לדוגמה:packageOverrides={com.my.package=true, com.another.package=false}
מידע נוסף על שינויים ספציפיים
הרשימה המלאה של שינויי ההתנהגות במסגרת התאימות כלולה במסמכים של כל גרסת Android. בקישורים הבאים אפשר לקבל מידע נוסף, בהתאם לגרסת Android שבה בודקים את האפליקציה:
- Android 16 (רמת API 36)
- Android 15 (רמת API 35)
- Android 14 (רמת API 34)
- Android 13 (רמת API 33)
- Android 12 (רמות API 31 ו-32)
- Android 11 (רמת API 30)
מתי כדאי להפעיל או להשבית שינויים
המטרה העיקרית של מסגרת התאימות היא לספק לכם שליטה וגמישות כשאתם בודקים את האפליקציה שלכם בגרסאות חדשות יותר של Android. בקטע הזה מתוארות כמה אסטרטגיות שאפשר להשתמש בהן כדי לקבוע מתי להפעיל או להשבית שינויים בזמן בדיקה וניפוי באגים באפליקציה.
מתי כדאי להשבית את השינויים
ההחלטה מתי להשבית את השינויים תלויה בדרך כלל בשאלה אם השינוי מוגבל על ידי targetSDKVersion
או לא.
- השינויים מופעלים לכל האפליקציות
שינויים שמשפיעים על כל האפליקציות מופעלים כברירת מחדל לגרסה ספציפית של פלטפורמה, בלי קשר ל-
targetSDKVersion
של האפליקציה שלכם. כך תוכלו לבדוק אם האפליקציה שלכם מושפעת מהפעלת האפליקציה בגרסה הזו של הפלטפורמה.לדוגמה, אם אתם מתכוננים לטרגט ל-Android 16 (רמת API 36), תוכלו להתחיל בהתקנת האפליקציה במכשיר עם Android 16 ולבדוק את האפליקציה באמצעות תהליכי העבודה הרגילים שלכם לבדיקה. אם נתקלתם בבעיות באפליקציה, תוכלו להשבית את השינוי שגורם לבעיה כדי להמשיך לבדוק בעיות אחרות.
השינויים האלה יכולים להשפיע על כל האפליקציות בלי קשר ל-
targetSDKVersion
, ולכן בדרך כלל מומלץ לבדוק ולעדכן את האפליקציה כדי להתאים אותה לשינויים האלה לפני שינויים שמוגבלים על ידיtargetSDKVersion
. כך תוכלו לוודא שהמשתמשים לא יחוו ירידה באיכות השימוש באפליקציה כשהם מעדכנים את המכשיר לגרסה חדשה של הפלטפורמה.חשוב גם לתת עדיפות לבדיקת השינויים האלה, כי כשמשתמשים בגרסת Android ציבורית אי אפשר להשבית אותם. מומלץ לבצע בדיקות של השינויים האלה לכל גרסה של Android בזמן שהגרסה נמצאת בתצוגה מקדימה.
- שינויים שמוגבלים על ידי
targetSDKVersion
אם האפליקציה שלכם מטרגטת
targetSDKVersion
ספציפי, כל השינויים שמוגבלים על ידי הגרסה הזו מופעלים כברירת מחדל. לכן, כשמעבירים את האפליקציה מגרסהtargetSDKVersion
לגרסה חדשה, הרבה שינויים חדשים מתחילים להשפיע על האפליקציה בבת אחת.יכול להיות שהאפליקציה שלכם מושפעת ביותר מאחד מהשינויים האלה, ולכן יכול להיות שתצטרכו להשבית חלק מהשינויים האלה בנפרד בזמן הבדיקה והניפוי באגים של האפליקציה.
מתי כדאי להפעיל את השינויים
שינויים שמוגבלים על ידי targetSDKVersion
ספציפי מושבתים כברירת מחדל
כשאפליקציה מטרגטת גרסת SDK נמוכה יותר מהגרסה המוגבלת.
בדרך כלל, כשמתכוננים לטרגט targetSdkVersion
חדש, יש רשימה של שינויים בהתנהגות שצריך לבדוק ולנפות באגים באפליקציה.
לדוגמה, יכול להיות שאתם בודקים את האפליקציה שלכם מול סדרה של שינויים בפלטפורמה
במהלך targetSdkVersion
. באמצעות אפשרויות למפתחים או פקודות ADB, אפשר להפעיל ולבדוק כל שינוי מוגבל בנפרד, במקום לשנות את מניפסט האפליקציה ולהצטרף לכל השינויים בבת אחת. השליטה הנוספת הזו יכולה לעזור לכם לבדוק שינויים בבידוד ולמנוע ניפוי באגים ועדכון של כמה חלקים באפליקציה בבת אחת.
אחרי שמפעילים שינוי, אפשר לבדוק את האפליקציה ולנפות בה באגים באמצעות תהליכי העבודה הרגילים לבדיקה. אם נתקלים בבעיות, כדאי לבדוק את היומנים כדי לנסות להבין מה הגורם לבעיה. אם לא ברור אם הבעיה נגרמת בגלל שינוי בפלטפורמה שהופעל, נסו להשבית את השינוי הזה ואז לבדוק מחדש את האזור הזה באפליקציה.
הפעלה או השבתה של שינויים
מסגרת התאימות מאפשרת להפעיל או להשבית כל שינוי באמצעות האפשרויות למפתחים או פקודות ADB. הפעלת שינויים או השבתתם עלולה לגרום לקריסת האפליקציה או להשבתת שינויים חשובים באבטחה, ולכן יש הגבלות על הפעלת שינויים או השבתתם.
החלפת שינויים באמצעות האפשרויות למפתחים
משתמשים באפשרויות למפתחים כדי להפעיל או להשבית שינויים. כדי למצוא את האפשרויות למפתחים, פועלים לפי השלבים הבאים:
- אם האפשרויות למפתחים עדיין לא הופעלו, מפעילים אותן.
- פותחים את אפליקציית ההגדרות במכשיר ועוברים אל מערכת > אפשרויות מתקדמות > אפשרויות למפתחים > שינויים בתאימות האפליקציה.
- בוחרים את האפליקציה מהרשימה.
ברשימת השינויים, מוצאים את השינוי שרוצים להפעיל או להשבית ומקישים על המתג.
החלפת מצב השינויים באמצעות ADB
כדי להפעיל או להשבית שינוי באמצעות ADB, מריצים אחת מהפקודות הבאות:
adb shell am compat enable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
adb shell am compat disable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
מעבירים את CHANGE_ID
(למשל, 194833441
) או את CHANGE_NAME
(למשל, NOTIFICATION_PERM_CHANGE_ID
) ואת PACKAGE_NAME
של האפליקציה.
אפשר גם להשתמש בפקודה הבאה כדי לאפס שינוי למצב ברירת המחדל שלו, ולהסיר כל שינוי שהגדרתם באמצעות ADB או אפשרויות למפתחים:
adb shell am compat reset (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
הגבלות על החלפת שינויים
כברירת מחדל, כל שינוי בהתנהגות מופעל או מושבת. שינויים שמשפיעים על כל האפליקציות מופעלים כברירת מחדל. שינויים אחרים מוגבלים על ידי
targetSdkVersion
. השינויים האלה מופעלים כברירת מחדל כשאפליקציה מיועדת לגרסת ה-SDK המתאימה או לגרסה חדשה יותר, ומושבתים כברירת מחדל כשאפליקציה מיועדת לגרסת SDK ישנה יותר. כשמשנים את המצב של שינוי מסוים, מבטלים את ברירת המחדל שלו.
כדי למנוע שימוש זדוני במסגרת התאימות, יש כמה הגבלות על המקרים שבהם אפשר להפעיל או להשבית שינויים. האפשרות להפעיל או להשבית שינוי תלויה בסוג השינוי, בשאלה אם האפליקציה ניתנת לניפוי באגים ובסוג הבנייה שפועלת במכשיר. בטבלה הבאה מתואר מתי מותר להפעיל או להשבית סוגים שונים של שינויים:
סוג build | אפליקציה שלא ניתן לנפות בה באגים | אפליקציה שאפשר לבצע בה ניפוי באגים | |
---|---|---|---|
כל השינויים | שינויים שמוגבלים על ידי targetSDKVersion | כל שאר השינויים | |
גרסת בטא או תצוגה מקדימה למפתחים | אי אפשר להפעיל או להשבית את ההגדרה | אפשר להפעיל או להשבית | אפשר להפעיל או להשבית |
משתמש build ציבורי | אי אפשר להפעיל או להשבית את ההגדרה | אפשר להפעיל או להשבית | אי אפשר להפעיל או להשבית את ההגדרה |