ב-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. כך תוכלו לוודא שהמשתמשים לא יחוו ירידה באיכות השימוש באפליקציה כשהם מעדכנים את המכשיר לגרסה חדשה של הפלטפורמה.חשוב גם לתת עדיפות לבדיקת השינויים האלה, כי כשמשתמשים בגרסת build ציבורית של Android, אי אפשר להשבית אותם. מומלץ לבצע בדיקות של השינויים האלה לכל גרסה של Android בזמן שהגרסה נמצאת בטרום-השקה (Preview).
- שינויים שמוגבלים על ידי
targetSDKVersion אם האפליקציה שלכם מטרגטת
targetSDKVersionספציפי, כל השינויים שמוגבלים על ידי הגרסה הזו מופעלים כברירת מחדל. לכן, כשמעבירים את האפליקציה מגרסהtargetSDKVersionלגרסה חדשה, הרבה שינויים חדשים מתחילים להשפיע על האפליקציה בבת אחת.יכול להיות שהאפליקציה שלכם מושפעת מכמה מהשינויים האלה, ולכן יכול להיות שתצטרכו להשבית חלק מהשינויים בנפרד בזמן הבדיקה והניפוי באגים של האפליקציה.
מתי כדאי להפעיל את השינויים
שינויים שמוגבלים על ידי targetSDKVersion ספציפי מושבתים כברירת מחדל בכל פעם שאפליקציה מטרגטת גרסת SDK נמוכה יותר מהגרסה המוגבלת.
בדרך כלל, כשמתכוננים לטרגט targetSdkVersion חדש, יש רשימה של שינויים בהתנהגות שצריך לבדוק ולנפות באגים באפליקציה.
לדוגמה, יכול להיות שאתם בודקים את האפליקציה שלכם מול סדרה של שינויים בפלטפורמה
במהלך targetSdkVersion. אתם יכולים להשתמש באפשרויות למפתחים או בפקודות ADB כדי להפעיל ולבדוק כל שינוי בנפרד, במקום לשנות את קובץ מניפסט של אפליקציה ולהצטרף לכל השינויים בבת אחת. השליטה הנוספת הזו יכולה לעזור לכם לבדוק שינויים בבידוד ולהימנע מניפוי באגים ומעדכון של כמה חלקים באפליקציה בבת אחת.
אחרי שמפעילים שינוי, אפשר לבדוק את האפליקציה ולנפות בה באגים באמצעות תהליכי העבודה הרגילים לבדיקה. אם נתקלתם בבעיות, כדאי לבדוק את היומנים כדי לנסות להבין מה הגורם לבעיה. אם לא ברור אם הבעיה נגרמת בגלל שינוי בפלטפורמה שהופעל, נסו להשבית את השינוי הזה ואז לבדוק מחדש את האזור הזה באפליקציה.
הפעלה או השבתה של שינויים
מסגרת התאימות מאפשרת להפעיל או להשבית כל שינוי באמצעות האפשרויות למפתחים או פקודות ADB. הפעלת שינויים או השבתתם עלולה לגרום לקריסת האפליקציה או להשבית שינויים חשובים באבטחה, ולכן יש הגבלות על הפעלת שינויים או השבתתם.
החלפת המצב של השינויים באמצעות האפשרויות למפתחים
כדי להפעיל או להשבית שינויים, משתמשים באפשרויות למפתחים. כדי למצוא את האפשרויות למפתחים, פועלים לפי השלבים הבאים:
- אם האפשרויות למפתחים עדיין לא מופעלות, מפעילים אותן.
- פותחים את אפליקציית ההגדרות במכשיר ועוברים אל מערכת > אפשרויות מתקדמות > אפשרויות למפתחים > שינויים בתאימות האפליקציה.
- בוחרים את האפליקציה מהרשימה.
ברשימת השינויים, מוצאים את השינוי שרוצים להפעיל או להשבית ומקישים על המתג.

החלפת מצב השינויים באמצעות ADB
כדי להפעיל או להשבית שינוי באמצעות ADB, מריצים אחת מהפקודות הבאות:
adb shell am compat enable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAMEadb 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 ציבורי | אי אפשר להפעיל או להשבית את ההגדרה | אפשר להחליף מצב | אי אפשר להפעיל או להשבית את ההגדרה |