שינויים בהתנהגות: כל האפליקציות

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

חשוב גם לבדוק את רשימת השינויים בהתנהגות שמשפיעים רק על אפליקציות שמטרגטות את Android 11.

פרטיות

ב-Android 11 יש שינויים והגבלות שנועדו לשפר את פרטיות המשתמשים, כולל:

  • הרשאות חד-פעמיות: המשתמשים יכולים לתת גישה זמנית למיקום, למיקרופון ולמצלמה.
  • הצגת תיבת הדו-שיח של ההרשאות: דחיות חוזרות של הרשאה מסוימת יפורשו כ"לא לשאול שוב".
  • בקרת הרשאות גישה לנתונים: קבלת תובנות לגבי המקומות שבהם האפליקציה ניגשת לנתונים פרטיים, גם בקוד של האפליקציה עצמה וגם בקוד של ספריות תלויות.
  • הרשאות לחלון התראות של המערכת: סוגים מסוימים של אפליקציות מקבלים באופן אוטומטי את ההרשאה SYSTEM_ALERT_WINDOW לפי בקשה. בנוסף, Intent שכוללים את פעולת ה-Intent‏ ACTION_MANAGE_OVERLAY_PERMISSION תמיד מעבירים את המשתמשים למסך בהגדרות המערכת.
  • מזהי SIM קבועים: ב-Android מגרסה 11 ואילך, הגישה למזהי ICCID שלא ניתנים לאיפוס באמצעות השיטה getIccId() מוגבלת. השיטה מחזירה מחרוזת ריקה שאינה null. כדי לזהות באופן ייחודי כרטיס SIM שמותקן במכשיר, צריך להשתמש בשיטה getSubscriptionId(). מזהה המינוי מספק ערך אינדקס (החל מ-1) לזיהוי ייחודי של כרטיסי SIM מותקנים, כולל כרטיסים פיזיים ואלקטרוניים. הערך של המזהה הזה לא משתנה בכרטיס SIM נתון, אלא אם מאפסים את המכשיר להגדרות המקוריות.

מידע נוסף זמין בדף פרטיות.

התראות חשיפה

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

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

אבטחה

כברירת מחדל, שקעי SSL משתמשים במנוע Conscrypt SSL

הטמעת ברירת המחדל של SSLSocket ב-Android מבוססת על Conscrypt. החל מ-Android 11, ההטמעה הזו מבוססת באופן פנימי על SSLEngine של Conscrypt.

Scudo Hardened Allocator

ב-Android 11 נעשה שימוש פנימי ב-Scudo Hardened Allocator כדי לטפל בהקצאות זיכרון בערימה. Scudo יכול לזהות ולצמצם סוגים מסוימים של הפרות בטיחות בזיכרון. אם מופיעות קריסות שקשורות ל-Scudo (לדוגמה, Scudo ERROR:) בדוחות על קריסות ברמת שפת המכונה, כדאי לעיין במסמכי התיעוד בנושא פתרון בעיות ב-Scudo.

נתוני שימוש באפליקציה

כדי להגן טוב יותר על המשתמשים, ב-Android 11 נתוני השימוש באפליקציות של כל משתמש מאוחסנים באחסון מוצפן של פרטי כניסה. לכן, למערכת ולאפליקציות אין גישה לנתונים האלה, אלא אם isUserUnlocked() מחזירה את הערך true, שמתרחש אחרי אחד מהמקרים הבאים:

  • המשתמש מבטל את נעילת המכשיר בפעם הראשונה אחרי הפעלת המערכת.
  • המשתמש עובר לחשבון שלו במכשיר.

אם האפליקציה כבר מקושרת למופע של UsageStatsManager, צריך לוודא שאתם מפעילים methods באובייקט הזה אחרי שהמשתמש מבטל את נעילת המכשיר. אחרת, ה-API מחזיר ערכים ריקים או ערכי null.

תמיכה באמולטור ל-5G

ב-Android 11 נוספו ממשקי API של 5G שמאפשרים להוסיף לאפליקציות תכונות מתקדמות. כדי לבדוק את התכונות תוך כדי הוספה שלהן, אתם יכולים להשתמש ביכולות החדשות של האמולטור של Android SDK. הפונקציונליות החדשה נוספה בגרסה 30.0.22 של האמולטור. בחירה בהגדרת הרשת 5G מגדירה את TelephonyDisplayInfo לערך OVERRIDE_NETWORK_TYPE_NR_NSA, משנה את רוחב הפס המשוער ומאפשרת להגדיר חיוב לפי שימוש כדי לוודא שהאפליקציה מגיבה כראוי לשינויים בסטטוס של NET_CAPABILITY_TEMPORARILY_NOT_METERED.

ביצועים וניפוי באגים

ניפוי באגים במגבלות על קריאות ל-API של JobScheduler

ב-Android 11 יש תמיכה בניפוי באגים באפליקציות כדי לזהות קריאות פוטנציאליות ל-API של JobScheduler שחרגו ממגבלות קצב מסוימות. מפתחים יכולים להשתמש בכלי הזה כדי לזהות בעיות פוטנציאליות בביצועים. באפליקציות שבהן מאפיין המניפסט debuggable מוגדר כ-true, קריאות ל-API של JobScheduler מעבר להגבלת קצב של יצירת בקשות יחזירו את הערך RESULT_FAILURE. המגבלות מוגדרות כך שתרחישי שימוש לגיטימיים לא יושפעו.

הסרת תוכן זדוני או רגיש מתיאור קובץ (fdsan)

ב-Android 10 הושק fdsan (כלי לניקוי תיאורי קבצים). ‫fdsan מזהה טיפול שגוי בבעלות על תיאור קובץ, כמו use-after-close ו-double-close. מצב ברירת המחדל של fdsan משתנה ב-Android 11. עכשיו הפעולה של fdsan מבוטלת כשמזוהה שגיאה. בעבר, המערכת רשמה אזהרה ביומן והמשיכה. אם האפליקציה קורסת בגלל fdsan, כדאי לעיין בfdsan documentation.

הגבלות על ממשקים שאינם SDK

‫Android 11 כוללת רשימות מעודכנות של ממשקים מוגבלים שאינם SDK, שמבוססות על שיתוף פעולה עם מפתחי Android ועל הבדיקות הפנימיות האחרונות. בכל פעם שאפשר, אנחנו מוודאים שקיימות חלופות ציבוריות לפני שאנחנו מגבילים ממשקים שאינם SDK.

אם האפליקציה לא מטרגטת את Android 11, יכול להיות שחלק מהשינויים האלה לא ישפיעו עליכם באופן מיידי. עם זאת, למרות שכרגע אפשר להשתמש בחלק מהממשקים שאינם SDK (בהתאם לרמת ה-API המיועדת של האפליקציה), שימוש בכל שיטה או שדה שאינם SDK תמיד כרוך בסיכון גבוה לפגיעה באפליקציה.

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

למידע נוסף על השינויים בגרסה הזו של Android, קראו את המאמר עדכונים להגבלות על ממשקים שאינם SDK ב-Android 11. מידע נוסף על ממשקים שאינם SDK זמין במאמר הגבלות על ממשקים שאינם SDK.

הספרייה המשותפת של Maps v1 הוסרה

גרסה 1 של הספרייה המשותפת של מפות Google הוסרה לחלוטין ב-Android 11. הספרייה הזו הוצאה משימוש בעבר והפסיקה לפעול באפליקציות ב-Android 10. באפליקציות שהסתמכו בעבר על הספרייה המשותפת הזו במכשירים עם Android 9 (רמת API‏ 28) או גרסה ישנה יותר, צריך להשתמש במקום זאת ב-SDK של מפות ל-Android.

אינטראקציה עם אפליקציות אחרות

שיתוף מזהי URI של תוכן

אם האפליקציה משתפת URI של תוכן עם אפליקציה אחרת, ה-Intent חייב להעניק הרשאות גישה ל-URI על ידי הגדרה של לפחות אחד מדגלי ה-Intent הבאים: FLAG_GRANT_READ_URI_PERMISSION וגם FLAG_GRANT_WRITE_URI_PERMISSION. כך, אם האפליקציה השנייה מטרגטת את Android 11, היא עדיין יכולה לגשת ל-URI של התוכן. האפליקציה חייבת לכלול את דגלי ה-Intent גם אם ה-URI של התוכן משויך לספק לניהול גישה שלא בבעלות האפליקציה.

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

הספרייה בטעינה

טעינת הספרייה המשותפת של ICU עם נתיב מוחלט

אפליקציות שמטרגטות ל-API 28 ומטה לא יכולות להשתמש ב-dlopen(3) כדי לטעון את libicuuc עם הנתיב המוחלט "‎/system/lib/libicuuc.so". באפליקציות האלה, dlopen("/system/lib/libicuuc.so", ...) יחזיר נקודת אחיזה ריקה.

במקום זאת, כדי לטעון את הספרייה, צריך להשתמש בשם הספרייה כשם הקובץ, לדוגמה dlopen("libicuuc.so", ...).