שינויים בהתנהגות: אפליקציות שמטרגטות ל-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, רק אפליקציות מצלמה מובנות במערכת יכולות להגיב לפעולות הכוונה הבאות:

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

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

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

שינוי הפרטים

שינוי השם: 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.