בדומה לגרסאות קודמות, 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 ואילך ייתכנו תופעות הלוואי הבאות להודעות טקסט:
- השיטה
getView()
מחזירה את הערךnull
. - ערכי ההחזרה של השיטות הבאות לא משקפים את הערכים בפועל, לכן לא כדאי להסתמך עליהן באפליקציה:
- השיטות הבאות הן no-ops, לכן אסור להשתמש בהן באפליקציה:
קישוריות
גישת קריאה מוגבלת למסד נתונים של 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, רק אפליקציות מצלמה מובנות במערכת יכולות להגיב לפעולות הכוונה הבאות:
android.media.action.VIDEO_CAPTURE
android.media.action.IMAGE_CAPTURE
android.media.action.IMAGE_CAPTURE_SECURE
אם יש יותר מאפליקציית מצלמה אחת מובנית במערכת, המערכת מציגה תיבת דו-שיח כדי שהמשתמש יוכל לבחור אפליקציה. אם אתם רוצים שהאפליקציה שלכם תשתמש באפליקציית מצלמה ספציפית של צד שלישי כדי לצלם תמונות או סרטונים בשמה, תוכלו להגדיר שם חבילה או רכיב לכוונה כדי להפוך אותה למפורשת.
אריזה והתקנה של אפליקציה
קבצי משאבים דחוסים
שינוי הפרטים
שינוי השם: 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>
שינויים בקריאה חוזרת (callback) עבור OnSharedPreferenceChangeListener
פרטי השינויים
שינוי השם: 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.