שינויים בהתנהגות: אפליקציות שמטרגטות ל-Android 11

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

חשוב גם לעיין ברשימת שינויי ההתנהגות שמשפיעים על כל האפליקציות שפועלות ב-Android 11.

פרטיות

ב-Android 11 יש שינויים והגבלות שמטרתם לשפר את הפרטיות של המשתמשים, כולל:

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

מידע נוסף זמין בדף פרטיות.

אבטחה

תיוג של מצביעים ב-heap

שינוי הפרטים

Change Name: NATIVE_HEAP_POINTER_TAGGING

Change ID: ‏ 135754954

איך עוברים בין המצבים

כשבודקים את התאימות של האפליקציה ל-Android 11, אפשר להפעיל או להשבית את השינוי הזה באמצעות פקודות ה-ADB הבאות:

adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME

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

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

כדי להשבית את התכונה הזו, אפשר לעיין במסמכי העזרה בנושא allowNativeHeapPointerTagging.

עדכונים בהתראות

הודעות טוסט בהתאמה אישית מהרקע חסומות

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

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

W/NotificationService: Blocking custom toast from package \
  <package> due to package not in the foreground

קריאות חזרה של Toast

אם רוצים לקבל התראה כשהודעה קופצת (טקסט או בהתאמה אישית) מופיעה או נעלמת, צריך להשתמש בשיטה addCallback() שנוספה ב-Android 11.

שינויים ב-Text toast API

באפליקציות שמטרגטות ל-Android מגרסה 11 ואילך, יהיו תופעות לוואי הבאות בהודעות טקסט קצרות:

קישוריות

גישה מוגבלת לקריאה למסד הנתונים של APN

שינוי הפרטים

Change Name: APN_READING_PERMISSION_CHANGE_ID

Change ID: ‏ 124107808

איך עוברים בין המצבים

כשבודקים את התאימות של האפליקציה ל-Android 11, אפשר להפעיל או להשבית את השינוי הזה באמצעות פקודות ה-ADB הבאות:

adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME

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

אפליקציות שמטרגטות את Android 11 צריכות עכשיו את ההרשאה Manifest.permission.WRITE_APN_SETTINGS עם הרשאת הרשאות כדי לקרוא את מסד הנתונים של APN של הספק Telephony או לגשת אליו. ניסיון לגשת למסד הנתונים של APN בלי ההרשאה הזו יוצר חריגה באבטחה.

נגישות

הצהרה על אינטראקציה עם מנועי TTS בקובץ המניפסט

בגלל שינויים בחשיפה של החבילה, אפליקציות שמטרגטות את Android 11 ומקיימות אינטראקציה עם מנוע המרה של טקסט לדיבור (TTS) צריכות להוסיף את הרכיב <queries> הבא לקובצי המניפסט שלהן:

<queries>
  <intent>
    <action
       android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

הצהרה על השימוש בלחצן הנגישות בקובץ המטא-נתונים

שינוי הפרטים

Change Name: REQUEST_ACCESSIBILITY_BUTTON_CHANGE

Change ID: ‏ 136293963

איך עוברים בין המצבים

כשבודקים את התאימות של האפליקציה ל-Android 11, אפשר להפעיל או להשבית את השינוי הזה באמצעות פקודות ה-ADB הבאות:

adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME

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

החל מ-Android 11, שירות הנגישות לא יכול להצהיר בסביבת זמן הריצה שיש לו שיוך ללחצן הנגישות של המערכת. אם מצרפים את הערך AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON למאפיין flags של אובייקט AccessibilityServiceInfo, המסגרת לא מעבירה לשירות את האירועים של קריאה חוזרת (callback) של לחצני הנגישות.

כדי לקבל אירועי קריאה חוזרת של נגישות בשירות הנגישות, צריך להשתמש בקובץ המטא-נתונים של שירות הנגישות כדי להצהיר על השיוך של השירות ללחצן הנגישות. כוללים את הערך flagRequestAccessibilityButton בהגדרה של המאפיין accessibilityFlags. מיקום נפוץ לקובץ המטא-נתונים של שירותי הנגישות הוא res/raw/accessibilityservice.xml.

מצלמה

כדי לבצע פעולות של כוונה ליצירת מדיה, נדרשת המצלמה שמוגדרת כברירת מחדל במערכת

החל מגרסה Android 11, רק אפליקציות מצלמה מובנות במערכת יכולות להגיב לפעולות הכוונה הבאות:

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

אריזה והתקנה של אפליקציות

קבצי משאבים דחוסים

שינוי הפרטים

Change Name: RESOURCES_ARSC_COMPRESSED

Change ID: ‏ 132742131

איך עוברים בין המצבים

כשבודקים את התאימות של האפליקציה ל-Android 11, אפשר להפעיל או להשבית את השינוי הזה באמצעות פקודות ה-ADB הבאות:

adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME

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

לא ניתן להתקין אפליקציות שמטרגטות את Android 11 (רמת API 30) ואילך אם הן מכילות קובץ resources.arsc דחוס או אם הקובץ הזה לא מיושר לפי גבול של 4 בייטים. אם אחד מהתנאים האלה מתקיים, המערכת לא יכולה למפות את הקובץ הזה בזיכרון. טבלאות משאבים שלא ניתן למפות לזיכרון צריכות לקרוא למאגר ב-RAM, וכתוצאה מכך יש לחץ מיותר על הזיכרון במערכת ושימוש מוגבר ב-RAM במכשיר.

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

עכשיו נדרש פורמט APK Signature Scheme v2

אפליקציות שמטרגטות ל-Android 11 (רמת API 30) וחתומה עליהן כרגע רק סכמת החתימה APK v1, צריכות עכשיו להיות חתומות גם באמצעות סכמת החתימה APK v2 ואילך. משתמשים לא יכולים להתקין או לעדכן אפליקציות שחתומים עליהן רק ב-APK Signature Scheme v1 במכשירים עם Android 11.

כדי לוודא שהאפליקציה שלכם חתומה באמצעות APK Signature Scheme v2 ואילך, תוכלו להשתמש ב-Android Studio או בכלי apksigner בשורת הפקודה.

Firebase

Firebase JobDispatcher ו-GCMNetworkManager

אם האפליקציה שלכם מטרגטת ל-API ברמה 30 ואילך, קריאות ה-API של Firebase JobDispatcher ו-GcmNetworkManager מושבתות במכשירים עם Android 6.0 (רמת API ‏23) ואילך. למידע על ההעברה, אפשר לעיין במאמרים מעבר מ-Firebase JobDispatcher ל-WorkManager ומעבר מ-GCMNetworkManager ל-WorkManager.

זיהוי דיבור

בגלל שינויים בחשיפה של חבילות, אפליקציות שמטרגטות את Android 11 ומקיימות אינטראקציה עם שירות זיהוי דיבור צריכות להוסיף את הרכיב <queries> הבא לקובצי המניפסט שלהן:

<queries>
  <intent>
    <action
       android:name="android.speech.RecognitionService" />
  </intent>
</queries>

שינויים בקריאה חוזרת ל-OnSharedPreferenceChangeListener

שינוי הפרטים

Change Name: CALLBACK_ON_CLEAR_CHANGE

Change ID: ‏ 119147584

איך עוברים בין המצבים

כשבודקים את התאימות של האפליקציה ל-Android 11, אפשר להפעיל או להשבית את השינוי הזה באמצעות פקודות ה-ADB הבאות:

adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME

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

באפליקציות שמטרגטות ל-Android 11 (רמת API 30), בכל פעם שמפעילים את Editor.clear מתבצעת עכשיו קריאה חוזרת (callback) ל-OnSharedPreferenceChangeListener.onSharedPreferenceChanged עם מפתח null.

הגבלות על ממשק שאינו SDK

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

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

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

מידע נוסף על השינויים בגרסה הזו של Android זמין במאמר עדכונים לגבי הגבלות על ממשקים שאינם SDK ב-Android 11. מידע נוסף על ממשקים שאינם ב-SDK זמין במאמר הגבלות על ממשקים שאינם ב-SDK.