ב-Android 11 נוספו כלים חדשים למפתחים לבדיקה ול ניפוי באגים באפליקציה בתגובה לשינויים בהתנהגות בגרסאות חדשות יותר של Android הפלטפורמה. הכלים האלה הם חלק ממסגרת תאימות שמאפשרת לאפליקציה מפתחים מפעילים ומשביתים בנפרד את האפשרות לשינויי תוכנה באמצעות המפתחים או ADB. הגמישות הזו תעזור לכם להתכונן לטרגט את בגרסת API יציבה ובזמן שבודקים את האפליקציה עם מהדורת התצוגה המקדימה של בגרסה הבאה של Android.
כשמשתמשים בכלים של מסגרת התאימות, פלטפורמת Android
מתאים באופן אוטומטי את הלוגיקה הפנימית, כך שלא צריך לשנות
targetSDKVersion
או ליצור מחדש את האפליקציה כדי לבצע בדיקות בסיסיות. כי
כל שינוי יכול לעבור בנפרד. אפשר לבודד, לבדוק ולנפות באגים
בכל פעם, או להשבית שינוי יחיד שיוצר בעיות,
אתם צריכים לבדוק קודם משהו אחר.
איך מזהים אילו שינויים מופעלים
כשמפעילים שינוי התנהגות, הוא יכול להשפיע על האופן שבו האפליקציה ניגשת אל ממשקי API של פלטפורמות המושפעים מהשינוי הזה. אפשר לבדוק איזו התנהגות ושינויים מופעלים באמצעות אפשרויות המפתח, פקודות Logcat או פקודות ADB.
זיהוי השינויים שהופעלו באמצעות האפשרויות למפתחים
![](https://developer.android.com/static/images/guide/app-compatibility/appcompat-dev-options.png?authuser=1&hl=he)
איור 1. שינויים בתאימות האפליקציה במסך באפשרויות למפתחים.
אפשר לראות אילו שינויים מופעלים ולהפעיל או להשבית את השינויים בקטע האפשרויות למפתחים של מכשיר מסוים. כדי לגשת לאפשרויות האלו, יש לבצע את השלבים הבאים:
- אם האפשרויות למפתחים עדיין לא הופעלו, מפעילים אותן.
- פותחים את אפליקציית ההגדרות במכשיר ומנווטים אל מערכת > מתקדם > אפשרויות למפתחים > שינויים בתאימות האפליקציה.
בוחרים את האפליקציה מהרשימה.
כל שינוי בהתנהגות שייך בדרך כלל לאחת משתי הקטגוריות הבאות:
שינויים שמשפיעים על כל האפליקציות שפועלות בגרסה הזו של Android, בלי קשר של
targetSdkVersion
של האפליקציה.השינויים האלה מופעלים כברירת מחדל במסגרת התאימות, שמופיעות בממשק המשתמש, בקטע ברירת המחדל של השינויים המופעלים.
שינויים שמשפיעים רק על אפליקציות שמטרגטות לגרסאות מסוימות של Android. כי השינויים האלה משפיעים רק על אפליקציות שמטרגטות לגרסה ספציפית של ב-Android, הם מכונים גם שינויים שמוגבלים על ידי
targetSDKVersion
.השינויים האלה מופעלים כברירת מחדל במסגרת התאימות אם האפליקציה מטרגטת לגרסה גבוהה יותר מגרסת ה-API שצוינה ברשימה. לדוגמה, שינוי בהתנהגות שמוגבל על ידי
targetSDKVersion
ב- Android 13 (רמת API 33) יופיע בממשק המשתמש בקטע שנקרא מופעלת עבור targetSdkVersion >=33. בחלק מהגרסאות הקודמות של Android, הקטע הזה נקרא 'מופעל אחרי SDK API_LEVEL' במקום זאת.
בנוסף, מופיע סעיף מספר 1 שנקרא שינויים שמוגדרים כברירת מחדל להשבתה. שינויים בקטע הזה יכולים לשמש למגוון מטרות. לפני על ידי הפעלת השינויים האלה, יש לקרוא את תיאור השינוי בתאימות של גרסת 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
שמוגבל על ידי השינוי (אם יש כזה).לדוגמה, אם השינוי הזה מופעל רק באפליקציות שמטרגטות לגרסת SDK 33 ואילך,
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 15 (רמת API 35)
- Android 14 (רמת API 34)
- Android 13 (רמת API 33)
- Android 12 (רמות API 31 ו-32)
- Android 11 (רמת API 30)
מתי מפעילים או משביתים את השינויים
המטרה העיקרית של מסגרת התאימות היא לספק לכם שליטה וגמישות רבה יותר בזמן בדיקת האפליקציה בגרסאות חדשות יותר של Android. הזה בקטע מתוארות כמה אסטרטגיות שניתן להשתמש בהן כדי לקבוע מתי להחליף מצב משתנה בזמן שאתם בודקים ומנפים באגים באפליקציה.
מתי משביתים את השינויים?
ההחלטה מתי להשבית שינויים בדרך כלל תלויה בשאלה אם השינוי
מוגבל על ידי targetSDKVersion
או לא.
- השינויים הופעלו בכל האפליקציות
הפעלה של שינויים שמשפיעים על כל האפליקציות מתבצעת על ידי לגרסת ברירת המחדל של הפלטפורמה הספציפית, בלי קשר לפורמט
targetSDKVersion
, כדי שתוכל לראות אם האפליקציה מושפעת מהפעלת בגרסת הפלטפורמה הזו.לדוגמה, אם אתם מתכוננים לטרגט את Android 14 (רמת API 34), אתם יכולים להתחיל בהתקנת האפליקציה שלכם במכשיר שפועל Android 14 ובדיקת האפליקציה במסגרת הבדיקה הרגילה תהליכי עבודה. אם יש בעיות באפליקציה, אפשר להשבית את השינוי הגורם לבעיה, כך שתוכלו להמשיך לבדוק אם יש בעיות אחרות.
השינויים האלה יכולים להשפיע על כל האפליקציות, ללא קשר ל-
targetSDKVersion
, בדרך כלל צריך לבדוק ולעדכן את האפליקציה כדי לראות את השינויים האלה לפני השינויים שמוגבלים על ידיtargetSDKVersion
. כך נוכל לוודא שהמשתמשים אם הם יעדכנו את המכשיר לגרסה חדשה, חוויית השימוש באפליקציה תפגע. בגרסת הפלטפורמה.כמו כן, כדאי לתת עדיפות לבדיקת השינויים האלה, כי אי אפשר להחליף מצב השינויים האלה מושבתים כשמשתמשים בגרסת build ציבורית של 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 שפועל במכשיר. הטבלה הבאה מתארת מתי מותר לך לעבור בין סוגים שונים של שינויים:
סוג build | אפליקציה שלא ניתנת לניפוי באגים | אפליקציה שניתנת לניפוי באגים | |
---|---|---|---|
כל השינויים | שינויים שמוגבלים על ידי targetSDKVersion | כל שאר השינויים | |
תצוגה מקדימה למפתחים או build של גרסת בטא | לא ניתן להחליף מצב | אפשר להחליף מצב | אפשר להחליף מצב |
גרסת build ציבורית של משתמש | לא ניתן להחליף מצב | אפשר להחליף מצב | לא ניתן להחליף מצב |