שינויים במסגרת התאימות (Android {7/}12)

איור 1. במסך 'שינויים בתאימות האפליקציה' באפשרויות למפתחים מפורטים השינויים שאפשר להפעיל או להשבית.

בדף הזה מתואר כל שינוי בהתנהגות שנובע ממסגרת התאימות ב-Android 12 (רמת API 31). כדאי להשתמש ברשימה הזו בשילוב עם אפשרויות למפתחים ופקודות ADB כדי לבדוק את האפליקציה ולנפות בה באגים כשמתכוננים לתמיכה ב-Android 12 ולטרגט אותה.

ריכזנו כאן כמה מהדברים שאפשר לעשות באמצעות הכלים של מסגרת התאימות:

  • בודקים שינויים ממוקדים בלי לשנות בפועל את targetSdkVersion של האפליקציה. אתם יכולים להשתמש במתגי ההפעלה/השבתה כדי להפעיל בכוח שינויים ספציפיים בהתנהגות של משתמשים מטורגטים, כדי להעריך את ההשפעה על האפליקציה הקיימת.
  • מקדישים את הבדיקות לשינויים ספציפיים בלבד. במקום לטפל בכל השינויים המטורגטים בבת אחת, המתגים מאפשרים להשבית את כל השינויים המטורגטים מלבד אלה שרוצים לבדוק.
  • ניהול מתגים באמצעות adb. אפשר להשתמש בפקודות adb כדי להפעיל ולהשבית את השינויים שאפשר להחליף בסביבת הבדיקה האוטומטית.
  • ניפוי באגים מהיר יותר באמצעות מזהי שינויים רגילים. לכל שינוי שאפשר להפעיל או להשבית יש מזהה ייחודי ושם ייחודי, שאפשר להשתמש בהם כדי לנפות באגים במהירות בגורם השורש בפלט היומן.

פרטים מלאים על השימוש בכלים בכל אחד מהתרחישים לדוגמה האלה זמינים במאמר כלים של מסגרת התאימות.

שינויים בהתנהגות שכלולים במסגרת התאימות

ברשימה שבקטע הזה מתוארים כל השינויים בהתנהגות שכלולים במסגרת התאימות של Android 12.

ניתן לסנן את רשימת השינויים לפי מצב ברירת מחדל.

שינויים בהתנהגות שנוספו למסגרת התאימות ב-Android 12

ALWAYS_SANDBOX_DISPLAY_APIS

מזהה שינוי: 185004937
מצב ברירת מחדל: מושבת בכל האפליקציות.

כשהאפשרות הזו מופעלת, המערכת מחילה ארגז חול של Display API על חבילה, ללא קשר למצב של עיבוד החלק הנצפה בלבד. ממשקי ה-API לרשת המדיה תמיד יספקו את גבולות האפליקציה.

מידע נוסף על השינוי הזה זמין בקטע שיטות תצוגה שהוצאו משימוש בדף של השינויים בהתנהגות ב-Android 12.

AUTOFILL_NON_TEXT_REQUIRES_ON_RECEIVE_CONTENT_LISTENER

מזהה שינוי: 163400105
מצב ברירת מחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 32) ואילך.

החל מ-Android 12, הפלטפורמה יכולה לספק הצעות שאינן טקסט (כמו תמונות) באמצעות מסגרת המילוי האוטומטי המשודרג (ראו שירותי מילוי אוטומטי). כדי שאפליקציה תוכל לטפל בהצעות האלה, בדרך כלל צריך להטמיע בה את ה-API של OnReceiveContentListener.

כדי להקל על האימוץ של ה-API הזה באפליקציות שכבר הטמיעו בעבר את ה-API‏ InputConnection.commitContent(InputContentInfo, int, Bundle), אנחנו משתמשים בו שוב כחלופה אם ה-API‏ OnReceiveContentListener עדיין לא הוטמע באפליקציה. החלופה הזו מופעלת רק ב-Android 12 (רמת API ‏31). מזהה השינוי הזה משבית את חלון החירום, כך שאפליקציות שמטרגטות ל-Android 12 (רמת API 32) ומעלה חייבות להטמיע את API ‏OnReceiveContentListener כדי לקבל הצעות שאינן טקסט.

BLOCK_FLAG_SLIPPERY

מזהה השינוי: 157929241
מצב ברירת המחדל: מופעל בכל האפליקציות.

באפליקציות שפועלות ב-Android 12 (רמת API 31), המערכת בודקת אם נעשה שימוש ב-FLAG_SLIPPERY בחלונות כלשהם באפליקציה. סביר להניח שרכיבי המערכת הם היחידים שישתמשו בדגל הזה, כי הוא שדה לא נתמך. אם כן, הוא יוגבל.

BLOCK_GPS_STATUS_USAGE

מזהה השינוי: 144027538
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, צריך להחליף את כל השימוש ב-API של GpsStatus ב-API של GnssStatus.

BLOCK_IMMUTABLE_PENDING_INTENTS

מזהה השינוי: 171317480
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, אובייקטים PendingIntent שלא ניתן לשנות אותם, שמועברים לממשקי API למיקום, ייצרו IllegalArgumentException.

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

מזהה שינוי: 169887240
מצב ברירת מחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות את Android מגרסה 12 ואילך (רמת API ‏31), אי אפשר להשתמש בממשקי ה-API של המערכת LocationRequest עם בקשות למיקום PendingIntent.

BLOCK_UNTRUSTED_TOUCHES

מזהה השינוי: 158002302
מצב ברירת המחדל: מופעל בכל האפליקציות.

כדי לשמור על אבטחת המערכת ועל חוויית משתמש טובה, ב-Android 12 האפליקציות לא יכולות להשתמש באירועי מגע כששכבת-על חוסמת את האפליקציה באופן לא בטוח.

מידע נוסף על השינוי הזה זמין במאמר אירועי מגע לא מהימנים חסומים.

CALL_ACTIVITY_RESULT_BEFORE_RESUME

מזהה השינוי: 78294732
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות את Android מגרסה 12 ואילך (רמת API‏ 32).

באפליקציות שמטרגטות את Android 12 (רמת API ‏32) ואילך, מתקן את מחזור החיים של תוצאת הפעילות כדי להבטיח שהפעילות תקבל את תוצאת הפעילות ממש לפני ההמשך.

CAMERA_MIC_INDICATORS_NOT_PRESENT

מזהה השינוי: 162547999
מצב ברירת המחדל: מושבת בכל האפליקציות.

סימן לכך שהמכשיר תומך בסמלי מצלמה ומיקרופון. הערך יהיה false אם הוא קיים, כי השיטה CompatChanges#isChangeEnabled מחזירה true אם מזהה השינוי לא קיים.

CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS

מזהה השינוי: 146211400
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות את Android מגרסה 12 ואילך (רמת API‏ 32).

באפליקציות שמטרגטות ל-Android 12 (רמת API 32) ומעלה, מנהל החבילות לא יותקן חבילה אם יש בה קבוצות הרשאות עם פורמט שגוי. מומלץ לשתף קבוצות הרשאות רק בין אפליקציות שמשתתפות באותו אישור. אם הרשאה שייכת לקבוצה, צריך להגדיר גם את הקבוצה הזו.

CHANGE_ID_AUTH_STATE_DENIED

מזהה שינוי: 181350407
מצב ברירת מחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

באפליקציות לקוח שמטורגטות ל-Android 12 (רמת API 31) ואילך, מתרחשת הטלת SecurityException כשהן נמצאות במצב הרשאה נדחתה ומנסות לשלוח הודעה ל-nanoapp.

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

מזהה השינוי: 136069189
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, מתרחשת הטלת SecurityException כשהן לא מקבלות את ההרשאה HIGH_SAMPLING_RATE_SENSORS, פועלות במצב ניפוי באגים ומבקשות תדירות דגימה מהירה יותר מ-200 הרץ.

DELIVER_HISTORICAL_LOCATIONS

מזהה השינוי: 73144566
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

באפליקציות שמיועדות ל-Android 12 (רמת API 31) ואילך, ייתכן שבמקרים מסוימים לקוחות המיקום יקבלו מיקומים היסטוריים (מהתקופה שלפני זמן הבדיקה הנוכחי).

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

מזהה השינוי: 181658987
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ומעלה, מספקת תאימות לאחור לשינויים ב-TelephonyDisplayInfo.

DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE

מזהה השינוי: 170503758
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, הפלטפורמה עשויה לצמצם את קצב הפריימים של האפליקציה למכפיל של קצב הרענון, אם זה עדיף (לדוגמה, אם האפליקציה התקשרה ל-Surface.setFrameRate(float, int)). באפליקציות יתרחשו Choreographer.postFrameCallback(Choreographer.FrameCallback) קריאות חזרה (callbacks) וזרימת נתונים חוזרת (backpressure) בקצב הפריימים המותאם. אפליקציות משתמשות ב-Display.getRefreshRate() וב-Display.Mode.getRefreshRate() כדי לדעת מהו קצב הרענון של המסך. Display.getRefreshRate() תמיד יחזיר את קצב הפריימים של האפליקציה ולא את קצב הרענון הפיזי של המסך כדי לאפשר לאפליקציות לעשות את קצב הפריימים בצורה נכונה. הפונקציה Display.Mode.getRefreshRate() תחזיר את קצב הפריימים של האפליקציה אם היא תעבור הידור לגרסה קודמת, והחל מ-Android 12 (רמת API 31) היא תחזיר את קצב הרענון של המסך הפיזי.

DOWNSCALED

מזהה שינוי: 168419799
מצב ברירת מחדל: מושבת בכל האפליקציות.

השינוי הזה הוא שומר הסף של כל השינויים בהחלשת המאגר לכל אפליקציה. הפעלת השינוי הזה מאפשרת להחיל את גורמי ההתאמה הבאים:

כשמפעילים את השינוי הזה בחבילת אפליקציה, המערכת משנה את גודל האפליקציה בכוח לפי גורם ההתאמה הגבוה ביותר שפועל. לדוגמה, אם מופעלים גם הערך 80% וגם הערך 70% (DOWNSCALE_80 ו-DOWNSCALE_70), המערכת תשתמש בערך 80%.

DOWNSCALE_30

מזהה שינוי: 189970040
מצב ברירת מחדל: מושבת בכל האפליקציות.

כשגם DOWNSCALED מופעל, הפעלת השינוי הזה בחבילה מאלצת את האפליקציה להניח שהיא פועלת במסך עם רזולוציה של 30% מהרזולוציה האנכית והרוחבית של המסך האמיתי.

DOWNSCALE_35

מזהה השינוי: 189969749
מצב ברירת המחדל: מושבת בכל האפליקציות.

כשגם ההגדרה DOWNSCALED מופעלת, הפעלת השינוי הזה בחבילה מאלצת את האפליקציה להניח שהיא פועלת במסך עם רזולוציה של 35% מהרזולוציה האנכית והרוחבית של המסך האמיתי.

DOWNSCALE_40

מזהה השינוי: 189970038
מצב ברירת המחדל: מושבת בכל האפליקציות.

כשגם DOWNSCALED מופעל, הפעלת השינוי הזה בחבילה מאלצת את האפליקציה להניח שהיא פועלת במסך עם רזולוציה אנכית ואופקטלית של 40% מהרזולוציה של המסך האמיתי.

DOWNSCALE_45

מזהה השינוי: 189969782
מצב ברירת המחדל: מושבת בכל האפליקציות.

כשגם ההגדרה DOWNSCALED מופעלת, הפעלת השינוי הזה בחבילה מאלצת את האפליקציה להניח שהיא פועלת במסך עם רזולוציה של 45% מהרזולוציה האנכית והרוחבית של המסך האמיתי.

DOWNSCALE_50

מזהה השינוי: 176926741
מצב ברירת המחדל: מושבת בכל האפליקציות.

כשגם DOWNSCALED מופעל, הפעלת השינוי הזה בחבילה מאלצת את האפליקציה להניח שהיא פועלת במסך עם רזולוציה אנכית ואופקטלית של 50% מהרזולוציה של המסך האמיתי.

DOWNSCALE_55

מזהה השינוי: 189970036
מצב ברירת המחדל: מושבת בכל האפליקציות.

כשגם DOWNSCALED מופעל, הפעלת השינוי הזה בחבילה מאלצת את האפליקציה להניח שהיא פועלת במסך עם רזולוציה אנכית ואופקית של 55% מהרזולוציה של המסך האמיתי.

DOWNSCALE_60

מזהה שינוי: 176926771
מצב ברירת מחדל: מושבת בכל האפליקציות.

כשגם DOWNSCALED מופעל, הפעלת השינוי הזה בחבילה מאלצת את האפליקציה להניח שהיא פועלת במסך עם 60% מהרזולוציה האנכית והרוחבית של המסך האמיתי.

DOWNSCALE_65

מזהה השינוי: 189969744
מצב ברירת המחדל: מושבת בכל האפליקציות.

כשגם DOWNSCALED מופעל, הפעלת השינוי הזה בחבילה מאלצת את האפליקציה להניח שהיא פועלת במסך עם 65% מהרזולוציה האנכית והאופקית של המסך האמיתי.

DOWNSCALE_70

מזהה השינוי: 176926829
מצב ברירת המחדל: מושבת בכל האפליקציות.

כשגם DOWNSCALED מופעל, הפעלת השינוי הזה בחבילה מאלצת את האפליקציה להניח שהיא פועלת במסך עם 70% מהרזולוציה האנכית והאופקית של המסך האמיתי.

DOWNSCALE_75

מזהה השינוי: 189969779
מצב ברירת המחדל: מושבת בכל האפליקציות.

כשגם DOWNSCALED מופעל, הפעלת השינוי הזה בחבילה מאלצת את האפליקציה להניח שהיא פועלת במסך עם רזולוציה אנכית ואופקטלית של 75% מהרזולוציה של המסך האמיתי.

DOWNSCALE_80

מזהה שינוי: 176926753
מצב ברירת מחדל: מושבת בכל האפליקציות.

כשגם DOWNSCALED מופעל, הפעלת השינוי הזה בחבילה מאלצת את האפליקציה להניח שהיא פועלת במסך עם רזולוציה אנכית ואופקטלית של 80% מהרזולוציה של המסך האמיתי.

DOWNSCALE_85

מזהה שינוי: 189969734
מצב ברירת מחדל: מושבת בכל האפליקציות.

כשגם DOWNSCALED מופעל, הפעלת השינוי הזה בחבילה מאלצת את האפליקציה להניח שהיא פועלת במסך עם 85% מהרזולוציה האנכית והאופקית של המסך האמיתי.

DOWNSCALE_90

מזהה השינוי: 182811243
מצב ברירת המחדל: מושבת בכל האפליקציות.

כשגם ההגדרה DOWNSCALED מופעלת, הפעלת השינוי הזה בחבילה מאלצת את האפליקציה להניח שהיא פועלת במסך עם 90% מהרזולוציה האנכית והרוחבית של המסך האמיתי.

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

מזהה השינוי: 157629738
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

אפליקציות ל-Android TV שמטרגטות ל-Android 12 (רמת API 31) ואילך אמורות לטפל בכל גודל חלון, כולל גדלים של חלונות גדולים מ-1080p. אפליקציות שמטרגטות גרסאות קודמות של Android לא צפויות לקבל Windows ברזולוציה גבוהה יותר מ-1080p, ולכן Windows שלהן מצומצם ל-1080p במקרה הצורך.

DROP_CLOSE_SYSTEM_DIALOGS

מזהה השינוי: 174664120
מצב ברירת המחדל: מופעל בכל האפליקציות.

כדי לשפר את השליטה של המשתמשים בזמן אינטראקציה עם האפליקציות ועם המערכת, פעולת Intent ACTION_CLOSE_SYSTEM_DIALOGS הוצאה משימוש ב-Android 12.

מידע נוסף על השינוי הזה זמין במאמר אפליקציות לא יכולות לסגור תיבת דו-שיח של מערכת.

ENABLE_CHECKS_FOR_PRIVATE_FILES

מזהה השינוי: 172100307
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android מגרסה 12 ואילך (רמת API‏ 31).

אפליקציות שמטרגטות ל-Android מגרסה 12 ואילך (רמת API ‏31) לא יכולות להוסיף או לעדכן קבצים פרטיים באמצעות ספק מדיה.

ENABLE_DEFERRED_SCAN

מזהה השינוי: 180326732
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

מפעילים את האפשרות הזו כדי לדחות את הסריקה שמופעלת כחלק מ-MediaProvider#update().

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

מזהה השינוי: 157233955
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך, מפעילים הגנה מסוג READ_PHONE_STATE בממשקי API ששולחים שאילתות לגבי מצב השיחה ומעדכנים עליו, כמו TelecomManager#getCallState, TelephonyManager.getCallStateForSubscription() ו-TelephonyCallback.CallStateListener.

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

מזהה שינוי: 183407956
מצב ברירת מחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, מפעילים הגנות של READ_PHONE_NUMBERS או READ_PRIVILEGED_PHONE_STATE ב-getPhoneAccount(PhoneAccountHandle).

ENABLE_INCLUDE_ALL_VOLUMES

מזהה השינוי: 182734110
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

הפעלת האפשרות הזו כדי לכלול שורות במסד הנתונים של קבצים מנפח אחסון שהתנתק לאחרונה ב-MediaProvider#query.

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

מזהה השינוי: 178209446
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

מפעילים את האפשרות הזו כדי לאפשר לאפליקציות עם ההרשאה Manifest.permission.MANAGE_EXTERNAL_STORAGE לבקש גישה לאחסון חיצוני גולמי.

ENFORCE_MINIMUM_WINDOW_ON_INEXACT_ALARMS

מזהה השינוי: 185199076
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android מגרסה 12 ואילך (רמת API‏ 31), לכל ההתראות הלא מדויקות צריך להיות חלון זמן מינימלי, שצפוי להיות באורך של כמה דקות. בפועל, התראות שדורשות חלונות קטנים יותר זהות להתראות מדויקות וצריכות להשתמש בממשקי ה-API המתאימים שסופקו, כמו setExact(int, long, PendingIntent). חלונות של התראות לא מדויקות שצוינו עבור חלונות קצרים יתארכו במערכת.

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

מזהה שינוי: 142191088
מצב ברירת מחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

אפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך צריכות להצהיר על יחסי תלות בספריות הציבוריות המשותפות (native) שמוגדרות על ידי יצרן המכשיר באמצעות התג uses-native-library ב-AndroidManifest.xml שלו. אם לא ניתן לעמוד באף אחת מהתלות – לדוגמה, אחת מהתלות לא קיימת – מנהל החבילות לא יטמיע את האפליקציה. אפשר לציין את התלות כאופציונלית באמצעות המאפיין android:required בתג, ובמקרה כזה, אי-עמידה בתלות לא תעצור את ההתקנה.

לאחר ההתקנה, האפליקציה מספקת רק את הספריות המקוריות המשותפות, שצוינו במניפסט של האפליקציה. קריאה ל-dlopen בספרייה משותפת ילידית שלא מופיעה במניפסט של האפליקציה תיכשל, גם אם היא קיימת בפועל במכשיר.

ENFORCE_STRICT_QUERY_BUILDER

מזהה שינוי: 143231523
מצב ברירת מחדל: מושבת בכל האפליקציות.

כשההגדרה מופעלת, SQLiteQueryBuilder מאמת את כל בחירות השאילתות של CalendarProvider2 מול ארגומנטים זדוניים.

FGS_BG_START_RESTRICTION_CHANGE_ID

מזהה השינוי: 170668199
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, יש הגבלה על המקרים שבהם אפליקציות יכולות להפעיל שירותים שפועלים בחזית בזמן שהן פועלות ברקע.

FGS_START_EXCEPTION_CHANGE_ID

מזהה השינוי: 174041399
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך, ההגדרה הזו מאפשרת למערכת להפעיל אירוע IllegalStateException אם אפליקציה מנסה להפעיל שירות שפועל בחזית בזמן שהיא פועלת ברקע.

FINISH_INPUT_NO_FALLBACK_CONNECTION

מזהה השינוי: 156215187
מצב ברירת המחדל: מושבת בכל האפליקציות.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, צריך לסיים את InputConnection כשהמכשיר הופך להיות non-interactive.

אם ההגדרה הזו מופעלת על ידי input method הנוכחי, חיבור הקלט הנוכחי יהיה finished בכל פעם שהמכשירים לא יהיו אינטראקטיביים.

אם לא מופעל מצב כזה, חיבור הקלט הנוכחי יושבת באופן שקט כשהמכשירים לא יהיו אינטראקטיביים, וצמד onFinishInput() ו-onStartInput() יישלח כשהמכשיר יחזור להיות אינטראקטיבי.

FORCE_DISABLE_HEVC_SUPPORT

מזהה שינוי: 174227820
מצב ברירת מחדל: מושבת בכל האפליקציות.

השבתה בכפייה של תמיכה של אפליקציה ביכולת המדיה HEVC. אפליקציות צריכות להצהיר על יכולות המדיה הנתמכות שלהן במניפסט, אבל אפשר להשתמש בדגל הזה כדי לאלץ אפליקציה לא לתמוך ב-HEVC, וכך לאלץ המרה (transcode) בזמן הגישה לתוכן מדיה שמקודד ב-HEVC. הגדרת הדגל הזה מבטלת את ברירת המחדל של האפליקציות ברמת מערכת ההפעלה. הוא מושבת כברירת מחדל, כלומר ברירת המחדל של מערכת ההפעלה מקבלת עדיפות. אם גם הדגל הזה וגם FORCE_ENABLE_HEVC_SUPPORT מופעלים, מערכת ההפעלה תתעלם משני הדגלים.

FORCE_ENABLE_HEVC_SUPPORT

מזהה השינוי: 174228127
מצב ברירת המחדל: מושבת בכל האפליקציות.

הפעלה בכפייה של אפליקציה שתומכת ביכולת המדיה HEVC. האפליקציות צריכות להצהיר על יכולות המדיה הנתמכות שלהן במניפסט, אבל אפשר להשתמש בדגל הזה כדי לאלץ אפליקציה לתמוך ב-HEVC, וכך למנוע המרה (טרנסקודינג) בזמן הגישה למדיה שקודדה ב-HEVC. הגדרת הדגל הזה מבטלת את הגדרות ברירת המחדל של האפליקציות ברמת מערכת ההפעלה. היא מושבתת כברירת מחדל, כלומר ברירת המחדל של מערכת ההפעלה תהיה בעדיפות. אם גם הדגל הזה וגם הדגל FORCE_DISABLE_HEVC_SUPPORT מופעלים, מערכת ההפעלה מתעלמת משניהם.

FORCE_NON_RESIZE_APP

מזהה השינוי: 181136395
מצב ברירת המחדל: מושבת בכל האפליקציות.

אילוץ האפשרות לשינוי גודל של החבילות עליהן הוא מופעל.

FORCE_RESIZE_APP

מזהה השינוי: 174042936
מצב ברירת המחדל: מושבת בכל האפליקציות.

מאלץ את החבילות שאליו הוא מיושם להיות ניתנות לשינוי גודל. אנחנו מאפשרים לשנות את הגודל רק במצב חלון במסך מלא, אבל לא מאלצים את האפליקציה לעבור למצב ריבוי חלונות שניתן לשנות את הגודל שלו.

HIDE_PROP_ICUBINARY_DATA_PATH

מזהה שינוי: 171979766
מצב ברירת מחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, ההרשאה הזו מסירה את הגישה לנכס android.icu.impl.ICUBinary.dataPath.

IGNORE_ALLOW_BACKUP_IN_D2D

מזהה שינוי: 183147249
מצב ברירת מחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android מגרסה 12 ואילך (רמת API ‏31), המערכת מתעלמת מ-android:allowBackup באפליקציות במהלך העברות ממכשיר למכשיר (D2D).

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

מזהה השינוי: 180523564
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, המערכת מתעלמת מכללי ההכללה וההחרגה שצוינו באמצעות android:fullBackupContent במהלך העברות ממכשיר למכשיר (D2D).

IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY

מזהה השינוי: 169273070
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, getSupportedLocales() יחזיר עכשיו רשימה ריקה של לוקאלים אם היא לא מוגדרת, במקום את לוקאל המערכת שמוגדר כברירת מחדל.

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

מזהה שינוי: 158482162
מצב ברירת מחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 ואילך (רמת API 31 ואילך), ההרשאה BACKUP שנדרשת ל-isBackupServiceActive() נאכפת בצד השירות ולא בצד הלקוח ב-BackupManager.

KEYSTORE_OPERATION_CREATION_MAY_FAIL

מזהה השינוי: 169897160
מצב ברירת המחדל: מושבת בכל האפליקציות.

כשהאפשרות הזו מופעלת, יכול להיות שיצירת פעולה של מאגר מפתחות תיכשל בהתאם לאסטרטגיית החיתוך החדשה. בעבר, Keystore פעל על סמך ההנחה שהיצירה של פעולות קריפטוגרפיות תמיד מצליחה. עם זאת, לקצה העורפי של KeyMint יש רק מספר מוגבל של משבצות פעולה.

כדי לשמור על מצב של 'אין מגבלה על מספר משבצות הפעולות', דימון Keystore ידאג למחוק את הפעולות שבוצעו הכי מעט לאחרונה אם לא תהיה משבצת פעולה זמינה. כתוצאה מכך, יכול להיות שפעולות תקינות יופסקו לפני הזמן. כתוצאה מכך, AndroidKeystore נחשף להתקפת מניעת שירות (DoS) ולנעילה לא מכוונת (livelock). לדוגמה, אם מספר אפליקציות התעוררו באותו הזמן בגלל אופטימיזציות של ניהול צריכת החשמל וניסו לבצע פעולות קריפטוגרפיות, הן יתחילו לסיים את הפעולות של זו לזו בלי להתקדם.

כדי לבטל את המנעולים בשידור חי ולמנוע ניסיונות ל"מניעת שירות (DoS), שינינו את אסטרטגיית הקיצוץ כך שמעדיפים לקוחות שמשתמשים כרגע בכמה משבצות תפעול. כתוצאה מכך, פעולות יחידות שלא נמצאות במצב לא פעיל במשך יותר מ-5 שניות יסתיימו כמעט תמיד ללא הפרעה מאסטרטגיית החיתוך. יש עדיין כמה פעולות שקשורות להצפנה של מערכת הקבצים שיכולות להסיר אפילו את הפעולות האלה, אבל המקרים האלה הם נדירים ביותר. כתוצאה משיטת החיתוך החדשה, יכול להיות שהיצירה תיכשל אם ללקוח יש יכולת חיתוך נמוכה יותר מכל הפעולות הקיימות.

שיטת גיזום: כדי למצוא מועמד מתאים, אנחנו מחשבים את הפחתת הביצועים של מבצע הקריאה החוזרת ושל כל פעולה קיימת. הערך של malus הוא הערך ההפוך של עוצמת החיתוך (המבצע) או של עמידות החיתוך (הפעולה הקיימת). כדי שמבצע הקריאה החוזרת יוכל להסיר פעולה, הוא צריך למצוא פעולה עם פעולת מלוס שגבוהה ממנה. פרטים נוספים על אסטרטגיית החיתוך זמינים בהטמעה של operation.rs. ב-Android 11 (רמת API 30) ובגרסאות ישנות יותר, ‏KeyStore2 יבדוק אצל הדימון של Keystore אם יש מקום פנוי לביצוע פעולה. באפליקציות שמטרגטות ל-Android 11 (רמת API 30) וגרסאות ישנות יותר, עדיין נראה שההפעלה של הצופן ושל אובייקט החתימה תמיד מצליחה, אבל יכול להיות שיחלוף זמן רב יותר עד שהפעולה תתבצע. בכל הגרסאות של Android נהנים מתזמון הוגן של זמני הפעולה, ומסיכוי טוב יותר לסיים את הפעולה.

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

מזהה השינוי: 174664365
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, לא ניתן לשלוח את ההודעה Intent.ACTION_CLOSE_SYSTEM_DIALOGS אלא אם לאפליקציה יש גם את ההרשאה android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS. הערה: זוהי הגרסה המחמירה יותר של #DROP_CLOSE_SYSTEM_DIALOGS שמצפה שהאפליקציה תפסיק לשלוח את הכוונה Intent.ACTION_CLOSE_SYSTEM_DIALOGS ברגע שהאפליקציה תתחיל לטרגט את Android 12 (רמת API 31) ואילך.

LOCK_DOWN_COLLAPSE_STATUS_BAR

מזהה השינוי: 173031413
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, ההרשאה Manifest.permission.STATUS_BAR נדרשת כדי לכווץ את החלוניות בסרגל המצב מטעמי אבטחה. תוכנות זדוניות ניצלו את הבעיה הזו כדי למנוע מהמשתמשים לגשת להתראות קריטיות.

LOW_POWER_EXCEPTIONS

מזהה השינוי: 168936375
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, כל האובייקטים מסוג LocationRequest שמסומנים כחריגים של צריכת אנרגיה נמוכה אם אין לפונקציית קריאה חוזרת (caller) את ההרשאה LOCATION_HARDWARE, במקום להשמיט באופן שקט את החלק של רמת הטעינה הנמוכה של הבקשה.

MISSING_EXPORTED_FLAG

מזהה שינוי: 150232615
מצב ברירת מחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, צריך לציין ערך מפורש למאפיין android:exported בכל פעם שמגדירים מסנן כוונה.

מידע נוסף על השינוי הזה זמין במאמר ייצוא בטוח יותר של רכיבים.

NATIVE_HEAP_POINTER_TAGGING_APP_ZYGOTE

מזהה השינוי: 207557677
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API ‏32) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API ‏32) ואילך, הקצאות זיכרון נייח (heap) מקומיות בתהליך AppZygote ובצאצאיו משתמשות בתג שאינו אפס בייט המשמעותי ביותר.

אפשר לקרוא מידע נוסף על השינוי הזה במאמר בנושא מצביעים מתויגים.

NATIVE_HEAP_ZERO_INIT

מזהה השינוי: 178038272
מצב ברירת המחדל: מושבת בכל האפליקציות.

הפעלת איפוס אוטומטי לאפס של הקצאות זיכרון מקומיות בערימות (heap).

NATIVE_MEMTAG_ASYNC

מזהה השינוי: 135772972
מצב ברירת המחדל: מושבת בכל האפליקציות.

הפעלת בדיקה אסינכרונית (ASYNC) של תגי זיכרון בתהליך הזה. הדגל הזה משפיע רק על חומרה שתומכת בתוסף תיוג הזיכרון של ARM.

NATIVE_MEMTAG_SYNC

מזהה השינוי: 177438394
מצב ברירת המחדל: מושבת בכל האפליקציות.

הפעלת בדיקה של תג זיכרון סינכרוני (SYNC) בתהליך הזה. הדגל הזה משפיע רק על חומרה שתומכת בתוסף תיוג הזיכרון (MTE) של ARM. אם גם NATIVE_MEMTAG_ASYNC וגם האפשרות הזו מופעלות, האפשרות הזו מקבלת עדיפות ו-MTE מופעל במצב SYNC.

NEVER_SANDBOX_DISPLAY_APIS

מזהה השינוי: 184838306
מצב ברירת המחדל: מושבת בכל האפליקציות.

כשהאפשרות הזו מופעלת, היא מונעת את החלת ארגז החול של Display API על פעילות של תיבת דואר או SCM. ממשקי ה-API של רשת המדיה ימשיכו לספק את גבולות DisplayArea.

מידע נוסף על השינוי הזה זמין בקטע שיטות להצגה שהוצאו משימוש בדף 12 שינויים בהתנהגות ב-Android.

NOTIFICATION_CANCELLATION_REASONS

מזהה שינוי: 175319604
מצב ברירת מחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

מאפשרת למאזינים לקבל הסבר על סיבות ביטול חדשות ספציפיות יותר.

NOTIFICATION_TRAMPOLINE_BLOCK

מזהה שינוי: 167676448
מצב ברירת מחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

כדי לשפר את הביצועים ואת חוויית המשתמש של האפליקציות, אפליקציות שמטרגטות את Android מגרסה 12 לא יכולות להשתמש בשירותים או במקלטי שידורים בתור מכשירים להעברת התראות.

מידע נוסף על השינוי הזה זמין במאמר לא ניתן ליצור משטחי קפיצה להתרעות משירותים או ממקלטי שידור.

NULL_TELEPHONY_THROW_NO_CB

מזהה השינוי: 182185642
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

משמש לבדיקה אם גרסת היעד של ה-SDK של התהליך הנוכחי היא Android 12 (רמת API 31) ואילך.

האפשרות הזו רלוונטית לשיטות הבאות:

OVERRIDE_MIN_ASPECT_RATIO

מזהה השינוי: 174042980
מצב ברירת המחדל: מושבת בכל האפליקציות.

השינוי הזה הוא שומר הסף של כל השינויים שמאלצים יחס גובה-רוחב מינימלי נתון. הפעלת השינוי הזה מאפשרת להחיל את יחסי הגובה-רוחב המינימליים הבאים:

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

OVERRIDE_MIN_ASPECT_RATIO_LARGE

מזהה השינוי: 180326787
מצב ברירת המחדל: מושבת בכל האפליקציות.

כשגם OVERRIDE_MIN_ASPECT_RATIO מופעל, הפעלת השינוי הזה בחבילה מגדירה את יחס הגובה-רוחב המינימלי של הפעילות לערך גדול כפי שהוגדר על ידי OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE.

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

מזהה השינוי: 180326845
מצב ברירת המחדל: מושבת בכל האפליקציות.

כשהאפשרות OVERRIDE_MIN_ASPECT_RATIO מופעלת גם כן, הפעלת השינוי הזה לחבילה מגדירה את יחס הגובה-רוחב המינימלי של הפעילות לערך בינוני כפי שמוגדר ב-OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE.

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

מזהה השינוי: 160794467
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, צריך לציין את יכולת השינוי של כל אובייקט PendingIntent שנוצר על ידי האפליקציה. הדרישה הנוספת הזו משפרת את אבטחת האפליקציה.

מידע נוסף על השינוי הזה זמין במאמר צריך להצהיר על היכולת לשינוי של כוונות בהמתנה.

PREVENT_SETTING_PASSWORD_QUALITY_ON_PARENT

מזהה השינוי: 165573442
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

באפליקציות אדמין שמטרגטות ל-Android 12 (רמת API 31) ואילך לא ניתן להשתמש במדיניות DevicePolicyManager.setPasswordQuality(ComponentName, int) כדי להגדיר את איכות הסיסמה במכונה DevicePolicyManager שמתקבלת באמצעות הקריאה DevicePolicyManager.getParentProfileInstance(ComponentName). במקום זאת, הם צריכים להשתמש ב-DevicePolicyManager.setRequiredPasswordComplexity(int) כדי להגדיר דרישות סיסמה בפירוט גס בכל המכשיר.

RATE_LIMIT_TOASTS

מזהה השינוי: 174840628
מצב ברירת המחדל: לא ניתן להחליף את השינוי הזה. הוא מתועד רק במסגרת מסגרת התאימות.

הפעלת הגבלת קצב על מספר הקריאות ל-Toast.show() כדי למנוע עומס יתר על המשתמש עם יותר מדי הודעות טוסט בזמן מוגבל. כל ניסיון להציג יותר הודעות חסומות מעבר למה שמותר בפרק זמן מסוים יגרום למחיקה של ההודעה הקופצת.

REQUIRE_EXACT_ALARM_PERMISSION

מזהה השינוי: 171306433
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 ואילך (רמת API 31 ואילך), צריכה להיות לאפליקציות הרשאה Manifest.permission.SCHEDULE_EXACT_ALARM כדי להשתמש בממשקי API להגדרת התראות מדויקות, כמו setExactAndAllowWhileIdle(int, long, PendingIntent) ו-setAlarmClock(AlarmClockInfo, PendingIntent).

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_ACTIVE_DATA_SUB_ID

מזהה השינוי: 182478738
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, לאפליקציות צריכה להיות ההרשאה Manifest.permission.READ_PHONE_STATE כדי לבצע קריאה ל-TelephonyCallback.ActiveDataSubscriptionIdListener.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

מזהה שינוי: 184323934
מצב ברירת מחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, האפליקציות צריכות את ההרשאה Manifest.permission.READ_PHONE_STATE כדי להפעיל את TelephonyCallback.CellInfoListener.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

מזהה השינוי: 183164979
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android מגרסה 12 ואילך (רמת API‏ 31).

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, האפליקציות צריכות את ההרשאה Manifest.permission.READ_PHONE_STATE כדי להפעיל את TelephonyCallback.DisplayInfoListener.

RESTRICT_ADB_BACKUP

מזהה השינוי: 171032338
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, המדיניות adb backup מופעלת באופן אוטומטי באפליקציות שפועלות כניתנות לניפוי באגים (android:debuggable מוגדרת לערך true) ולא זמינה לאפליקציות אחרות.

RESTRICT_DOMAINS

מזהה שינוי: 175408749
מצב ברירת מחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך, נדרש הטופס המעודכן של ממשק ה-API לאימות קישורים לאפליקציות. המשמעות של הדרישה הזו היא שאפליקציה חייבת להצהיר על דומיינים בתוך מסנן כוונה (intent) שכולל את כל הפרטים הבאים:

  • android:autoVerify="true"
  • Intent.ACTION_VIEW
  • Intent.CATEGORY_BROWSABLE
  • Intet.CATEGORY_DEFAULT
  • רק IntentFilter.SCHEME_HTTP ו/או IntentFilter.SCHEME_HTTPS, ללא סכמות אחרות

בגרסאות קודמות של Android, Intent.CATEGORY_BROWSABLE לא הייתה דרישה, סכימות אחרות היו מותרות והגדרת autoVerify ל-true בכל מסנן כוונה הייתה מתיימרת באופן משתמע שכל מסנני הכוונה הוגדרו ל-autoVerify="true".

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

מזהה השינוי: 151105954
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 ואילך (רמת API 31 ואילך), המערכת אוכפת שכל הערכים של attributionTags שנשלחים אל noteOp(String, int, String),‏ noteProxyOp(String, String) ו-startOp(String, int, String) מוגדרים במניפסט של החבילה שצוינה כפרמטר של השיטות.

כדי להפעיל את השינוי הזה, צריך להפעיל אותו גם בחבילה שמפעילה את noteOp(String, int, String) וגם בחבילה שצוינה כפרמטר של השיטה.

SELINUX_LATEST_CHANGES

מזהה השינוי: 143539591
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך, צריך להביע הסכמה לשינויים האחרונים ב-SELinux. השבתת השינוי הזה באפליקציה שמטרגטת את Android 12 (רמת API 31) ואילך היא פעולה ללא תוצאה. אין לה השפעה על אפליקציות שמשתמשות במזהה משתמש משותף.

SETTINGS_API_V2

מזהה השינוי: 178111421
מצב ברירת המחדל: מופעל בכל האפליקציות.

ממשק ה-API החדש של העדפות המשתמשים לאימות דומיינים שמסומנים ב-autoVerify=true במסנני הכוונה של AndroidManifest.xml עדיין לא מיושם בתצוגה המקדימה הנוכחית של הפלטפורמה. בשלב הזה, אפשר לראות תצוגה מקדימה של השינויים החדשים בהעדפות המשתמשים על ידי הפעלת ChangeId הזה ושימוש בפקודה adb shell pm set-app-links-user-selection ובפקודות דומות.

USE_SHORT_FGS_USAGE_INTERACTION_TIME

מזהה השינוי: 183972877
מצב ברירת המחדל: מופעל באפליקציות שמטרגטות את Android 12 (רמת API 31) ואילך.

באפליקציות שמטרגטות ל-Android 12 (רמת API 31) ואילך, קובע אם להשתמש בזמן קצוב קצר יותר לפני העלאת הקטגוריה 'המתנה' ל-ACTIVE כשאפליקציות מפעילות שירות שפועל בחזית.