בדומה לגרסאות קודמות, Android 11 כולל שינויים בהתנהגות שעשויים להשפיע על האפליקציה שלכם. שינויי ההתנהגות הבאים רלוונטיים רק לאפליקציות שמטרגטות את Android 11 ואילך. אם האפליקציה שלכם מגדירה את targetSdkVersion לערך 30, אתם צריכים לשנות את האפליקציה כדי שהיא תתמוך בהתנהגויות האלה בצורה נכונה, במקרים הרלוונטיים.
חשוב גם לבדוק את רשימת השינויים בהתנהגות שמשפיעים על כל האפליקציות שפועלות ב-Android 11.
פרטיות
Android 11 כוללת שינויים והגבלות שמטרתם לשפר את הפרטיות של המשתמשים, כולל:
- אכיפה של אחסון בהיקף מוגבל: הגישה לספריות אחסון חיצוניות מוגבלת לספרייה ספציפית לאפליקציה ולסוגים ספציפיים של מדיה שהאפליקציה יצרה.
- איפוס אוטומטי של הרשאות: אם המשתמשים לא השתמשו באפליקציה במשך כמה חודשים, המערכת מאפסת באופן אוטומטי את ההרשאות הרגישות של האפליקציה.
- גישה למיקום ברקע: המשתמשים צריכים להיות מופנים להגדרות המערכת כדי להעניק לאפליקציות הרשאת גישה למיקום ברקע.
- חשיפת חבילות: כשמגיעה שאילתה מאפליקציה לגבי רשימת האפליקציות המותקנות במכשיר, הרשימה שמוחזרת מסוננת.
מידע נוסף זמין בדף פרטיות.
אבטחה
תיוג של מצביעים ב-Heap
פרטי השינויים
שינוי השם: NATIVE_HEAP_POINTER_TAGGING
מזהה שינוי: 135754954
איך מחליפים את המצב
במהלך בדיקת התאימות של האפליקציה ל-Android 11, אפשר להפעיל או להשבית את השינוי הזה באמצעות פקודות ה-ADB הבאות:
adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAMEadb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
מידע נוסף על מסגרת התאימות ועל הפעלת שינויים והשבתתם זמין במאמר בנושא בדיקה וניפוי באגים של שינויים בהתנהגות הפלטפורמה באפליקציה.
למצביעים לערימה יש עכשיו תג שאינו אפס בבייט המשמעותי ביותר (MSB). אפליקציות שמשתמשות במצביעים בצורה שגויה, כולל כאלה שמשנות את ה-MSB, עלולות לקרוס או לחוות בעיות אחרות. השינוי הזה נדרש כדי לתמוך בחומרה עתידית עם תוסף תיוג זיכרון (MTE) של ARM. מידע נוסף זמין במאמר בנושא Tagged Pointers.
כדי להשבית את התכונה הזו, אפשר לעיין במסמכי המניפסט של 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 ומעלה, יש לטקסטים של הודעות טוסט את תופעות הלוואי הבאות:
- השיטה
getView()מחזירהnull. - ערכי ההחזרה של ה-methods הבאות לא משקפים את הערכים בפועל, ולכן לא מומלץ להסתמך עליהם באפליקציה:
- השיטות הבאות הן פעולות שלא עושות כלום, ולכן לא מומלץ להשתמש בהן באפליקציה:
קישוריות
גישת קריאה מוגבלת למסד נתונים של APN
פרטי השינויים
שינוי השם: APN_READING_PERMISSION_CHANGE_ID
מזהה שינוי: 124107808
איך מחליפים את המצב
במהלך בדיקת התאימות של האפליקציה ל-Android 11, אפשר להפעיל או להשבית את השינוי הזה באמצעות פקודות ה-ADB הבאות:
adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAMEadb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
מידע נוסף על מסגרת התאימות ועל הפעלת שינויים והשבתתם זמין במאמר בנושא בדיקה וניפוי באגים של שינויים בהתנהגות הפלטפורמה באפליקציה.
באפליקציות שמיועדות ל-Android 11, נדרשת עכשיו הרשאת פריבילגיה Manifest.permission.WRITE_APN_SETTINGS כדי לקרוא את מסד הנתונים של ספק הטלפוניה APN או לגשת אליו. ניסיון לגשת למסד הנתונים של APN ללא ההרשאה הזו יוצר חריגת אבטחה.
נגישות
הצהרה על אינטראקציה עם מנועי TTS בקובץ המניפסט
בגלל שינויים בנראות החבילה, אפליקציות שמיועדות ל-Android 11 ומבצעות אינטראקציה עם מנוע להמרת טקסט לדיבור (TTS) צריכות להוסיף את רכיב <queries> הבא לקובצי המניפסט שלהן:
<queries> <intent> <action android:name="android.intent.action.TTS_SERVICE" /> </intent> </queries>
הצהרה על השימוש בכפתור הנגישות בקובץ המטא-נתונים
פרטי השינויים
שינוי השם: REQUEST_ACCESSIBILITY_BUTTON_CHANGE
מזהה שינוי: 136293963
איך מחליפים את המצב
במהלך בדיקת התאימות של האפליקציה ל-Android 11, אפשר להפעיל או להשבית את השינוי הזה באמצעות פקודות ה-ADB הבאות:
adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAMEadb 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, רק אפליקציות מובנות של מצלמה במערכת יכולות להגיב לפעולות הבאות של Intent:
android.media.action.VIDEO_CAPTUREandroid.media.action.IMAGE_CAPTUREandroid.media.action.IMAGE_CAPTURE_SECURE
אם יש יותר מאפליקציית מצלמה מובנית אחת, המערכת מציגה תיבת דו-שיח שבה המשתמש יכול לבחור אפליקציה. אם רוצים שהאפליקציה תשתמש באפליקציית מצלמה ספציפית של צד שלישי כדי לצלם תמונות או סרטונים בשמה, אפשר להגדיר שם חבילה או רכיב ל-Intent.
אריזה והתקנה של אפליקציות
קבצים דחוסים של משאבים
פרטי השינויים
שינוי השם: RESOURCES_ARSC_COMPRESSED
מזהה שינוי: 132742131
איך מחליפים את המצב
במהלך בדיקת התאימות של האפליקציה ל-Android 11, אפשר להפעיל או להשבית את השינוי הזה באמצעות פקודות ה-ADB הבאות:
adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAMEadb 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 גרסה 1, צריכות להיות חתומות עכשיו גם באמצעות סכמת חתימה על APK גרסה 2 או גרסה גבוהה יותר. משתמשים לא יכולים להתקין או לעדכן אפליקציות שחתומות רק באמצעות סכמת חתימה APK 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
פרטי השינויים
שינוי השם: CALLBACK_ON_CLEAR_CHANGE
מזהה שינוי: 119147584
איך מחליפים את המצב
במהלך בדיקת התאימות של האפליקציה ל-Android 11, אפשר להפעיל או להשבית את השינוי הזה באמצעות פקודות ה-ADB הבאות:
adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAMEadb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
מידע נוסף על מסגרת התאימות ועל הפעלת שינויים והשבתתם זמין במאמר בנושא בדיקה וניפוי באגים של שינויים בהתנהגות הפלטפורמה באפליקציה.
באפליקציות שמטרגטות ל-Android 11 (רמת API 30), בכל פעם שמתבצעת קריאה ל-Editor.clear, מתבצעת עכשיו קריאה חוזרת ל-OnSharedPreferenceChangeListener.onSharedPreferenceChanged עם מפתח null.
הגבלות על ממשקים שאינם ב-SDK
Android 11 כולל רשימות מעודכנות של ממשקי non-SDK מוגבלים, שמבוססות על שיתוף פעולה עם מפתחי Android ועל הבדיקות הפנימיות האחרונות. כשאפשר, אנחנו מוודאים שיש חלופות ציבוריות זמינות לפני שאנחנו מגבילים ממשקים שאינם SDK.
אם האפליקציה שלכם לא מטרגטת ל-Android 11, יכול להיות שחלק מהשינויים האלה לא ישפיעו עליכם באופן מיידי. עם זאת, למרות שכרגע אפשר להשתמש בחלק מהממשקים שאינם חלק מ-SDK (בהתאם לרמת ה-API לטירגוט של האפליקציה), שימוש בשיטה או בשדה כלשהם שאינם חלק מ-SDK תמיד כרוך בסיכון גבוה להפסקת הפעולה של האפליקציה.
אם אתם לא בטוחים אם האפליקציה שלכם משתמשת בממשקים שאינם SDK, אתם יכולים לבצע בדיקה של האפליקציה כדי לגלות זאת. אם האפליקציה שלכם מסתמכת על ממשקים שאינם SDK, כדאי להתחיל לתכנן מעבר לחלופות SDK. עם זאת, ברור לנו שיש אפליקציות שבהן יש תרחישי שימוש לגיטימיים בממשקים שאינם SDK. אם אין לכם אפשרות להשתמש בממשק שאינו ב-SDK עבור תכונה באפליקציה, אתם צריכים לבקש ממשק API ציבורי חדש.
מידע נוסף על השינויים בגרסה הזו של Android זמין במאמר עדכונים בהגבלות על ממשקי non-SDK ב-Android 11. מידע נוסף על ממשקים שאינם ב-SDK זמין במאמר בנושא הגבלות על ממשקים שאינם ב-SDK.