בדומה לגרסאות קודמות, 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_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
מידע נוסף על מסגרת התאימות ועל החלפת שינויים זמין במאמר בנושא בדיקה וניפוי באגים של שינויים בהתנהגות הפלטפורמה באפליקציה.
למצביעים של Heap יש עכשיו תג שאינו אפס בבייט המשמעותי ביותר (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_NAME
adb 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_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, רק אפליקציות מובנות של מצלמה במערכת יכולות להגיב לפעולות הבאות של Intent:
android.media.action.VIDEO_CAPTURE
android.media.action.IMAGE_CAPTURE
android.media.action.IMAGE_CAPTURE_SECURE
אם יש יותר מאפליקציית מצלמה מובנית אחת, המערכת מציגה תיבת דו-שיח למשתמש כדי לבחור אפליקציה. אם רוצים שהאפליקציה תשתמש באפליקציית מצלמה ספציפית של צד שלישי כדי לצלם תמונות או סרטונים בשמה, אפשר להגדיר שם חבילה או רכיב ל-Intent.
אריזה והתקנה של אפליקציות
קבצים דחוסים של משאבים
פרטי השינויים
שינוי השם: RESOURCES_ARSC_COMPRESSED
מזהה שינוי: 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 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_NAME
adb 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.