שינויים במסגרת התאימות (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) ומעלה, LocationRequest אי אפשר להשתמש בממשקי API של המערכת עם 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 כשהן במצב הרשאה denied (נדחתה) ומנסות לשלוח הודעה לאפליקציה קטנה.

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)). האפליקציות יחוו קריאות חוזרות (callback) ו-backpressure בקצב הפריימים המוגבל.Choreographer.postFrameCallback(Choreographer.FrameCallback) האפליקציות משתמשות ב-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 לא מצפות לקבל חלונות גדולים יותר מ-1080p, ולכן החלונות שלהן עוברים הקטנה ל-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 בתג, ובמקרה כזה, אם לא ניתן לספק את התלות, ההתקנה לא תיפסק.

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

ENFORCE_STRICT_QUERY_BUILDER

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

אם האפשרות הזו מופעלת, 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, וכך לאלץ טרנסקוד בזמן גישה למדיה שמקודדת ב-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 backend יש רק מספר מוגבל של משבצות פעולה.

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

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

אסטרטגיית גיזום: כדי למצוא מועמד מתאים, אנחנו מחשבים את הניקוד השלילי של המתקשר ושל כל פעולה קיימת. הקנס הוא ההופכי של עוצמת הגיזום (המתקשר) או של עמידות הגיזום (הפעולה הקיימת). כדי שהמתקשר יוכל לקצץ פעולה, הוא צריך למצוא פעולה עם קנס גבוה יותר משלו. פרטים נוספים על אסטרטגיית הגיזום זמינים בקטע על ההטמעה של 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‏ 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 שמסומן כצריכת הספק נמוכה יגרום לחריגות אם למתקשר אין הרשאת LOCATION_HARDWARE, במקום להשליך בשקט את החלק של צריכת הספק הנמוכה מהבקשה.

MISSING_EXPORTED_FLAG

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

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

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

NATIVE_HEAP_POINTER_TAGGING_APP_ZYGOTE

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

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

מידע נוסף על השינוי הזה זמין במאמר Tagged Pointers.

NATIVE_HEAP_ZERO_INIT

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

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

NATIVE_MEMTAG_ASYNC

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

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

NATIVE_MEMTAG_SYNC

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

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

NEVER_SANDBOX_DISPLAY_APIS

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

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

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

NOTIFICATION_CANCELLATION_REASONS

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

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

NOTIFICATION_TRAMPOLINE_BLOCK

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

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

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

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 שנוצר על ידי האפליקציה. הדרישה הנוספת הזו משפרת את האבטחה של האפליקציה.

מידע נוסף על השינוי הזה זמין במאמר Pending intents must declare mutability.

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) והיא לא זמינה לאפליקציות אחרות.\n

RESTRICT_DOMAINS

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

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

  • 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 כשאפליקציות מפעילות שירות שפועל בחזית.