בדומה לגרסאות קודמות, 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, עלולות לקרוס או להיתקל בבעיות אחרות. השינוי הזה נדרש כדי לתמוך בחומרה עתידית עם Memory Tagging Extension (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
התקשרות חזרה (callback) של הודעות Toast
אם אתם רוצים לקבל התראה כשמופיעה או נעלמת הודעה קצרה (טקסט או הודעה בהתאמה אישית), אתם יכולים להשתמש ב-method addCallback() שנוספה ב-Android 11.
שינויים ב-API של הודעות קופצות עם טקסט
באפליקציות שמטרגטות ל-Android מגרסה 11 ואילך, יש את תופעות הלוואי הבאות בהודעות קופצות של טקסט:
- ה-method
getView()מחזירה אתnull. - ערכי ההחזרה של השיטות הבאות לא משקפים את הערכים בפועל, ולכן לא כדאי להסתמך עליהם באפליקציה:
- השיטות הבאות הן ללא פעולה, ולכן האפליקציה לא צריכה להשתמש בהן:
קישוריות
גישת קריאה מוגבלת למסד הנתונים של 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 של Telephony או לגשת אליו. ניסיון לגשת למסד הנתונים של ה-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) של כפתור הנגישות לשירות.
כדי לקבל אירועי קריאה חוזרת (callback) של נגישות בשירות הנגישות, צריך להשתמש בקובץ המטא-נתונים של שירות הנגישות כדי להצהיר על השיוך של השירות לכפתור הנגישות. כוללים את הערך flagRequestAccessibilityButton בהגדרה של המאפיין accessibilityFlags. מיקום נפוץ לקובץ המטא-נתונים של שירות הנגישות הוא res/raw/accessibilityservice.xml.
מצלמה
כדי להשתמש בפעולות של Intent למדיה, צריך להשתמש במצלמה שמוגדרת כברירת המחדל של המערכת
החל מ-Android 11, רק אפליקציות מצלמה מובנות יכולות להגיב לפעולות ה-Intent הבאות:
android.media.action.VIDEO_CAPTUREandroid.media.action.IMAGE_CAPTUREandroid.media.action.IMAGE_CAPTURE_SECURE
אם יש יותר מאפליקציית מצלמה מובנית אחת, המערכת מציגה תיבת דו-שיח שבה המשתמש יכול לבחור אפליקציה. אם אתם רוצים שהאפליקציה שלכם תשתמש באפליקציית מצלמה ספציפית של צד שלישי כדי לצלם תמונות או סרטונים בשמה, אתם יכולים להגדיר את ה-intent האלה באופן מפורש על ידי הגדרת שם חבילה או רכיב ל-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 דחוס, נסו אסטרטגיות חלופיות, כמו כיווץ משאבי האפליקציה או שיטות אחרות לכיווץ, ערפול קוד ואופטימיזציה של האפליקציה.
עכשיו נדרשת גרסה 2 של סכימת החתימה של APK
אפליקציות שמטרגטות ל-Android 11 (רמת API 30) וכרגע חתומות רק באמצעות APK Signature Scheme v1, צריכות להיות חתומות עכשיו גם באמצעות APK Signature Scheme 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
מזהה השינוי: 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 כוללת רשימות מעודכנות של ממשקים מוגבלים שאינם SDK, שמבוססות על שיתוף פעולה עם מפתחי Android ועל הבדיקות הפנימיות האחרונות. בכל פעם שאפשר, אנחנו מוודאים שקיימות חלופות ציבוריות לפני שאנחנו מגבילים ממשקים שאינם SDK.
אם האפליקציה לא מטרגטת את Android 11, יכול להיות שחלק מהשינויים האלה לא ישפיעו עליכם באופן מיידי. עם זאת, למרות שכרגע אפשר להשתמש בחלק מהממשקים שאינם SDK (בהתאם לרמת ה-API המיועדת של האפליקציה), שימוש בכל שיטה או שדה שאינם SDK תמיד כרוך בסיכון גבוה לפגיעה באפליקציה.
אם אתם לא בטוחים אם האפליקציה שלכם משתמשת בממשקים שאינם SDK, אתם יכולים לבדוק את האפליקציה כדי לגלות. אם האפליקציה שלכם מסתמכת על ממשקים שאינם SDK, כדאי להתחיל לתכנן מעבר לחלופות SDK. עם זאת, אנחנו מבינים שיש אפליקציות שבהן יש תרחישי שימוש לגיטימיים לשימוש בממשקים שאינם SDK. אם אתם לא מוצאים חלופה לשימוש בממשק שאינו SDK לתכונה באפליקציה, אתם צריכים לבקש API ציבורי חדש.
למידע נוסף על השינויים בגרסה הזו של Android, קראו את המאמר עדכונים להגבלות על ממשקים שאינם SDK ב-Android 11. מידע נוסף על ממשקים שאינם SDK זמין במאמר הגבלות על ממשקים שאינם SDK.