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

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

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

פרטיות

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

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

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

התראות חשיפה

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

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

אבטחה

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

ההטמעה של 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, צריך לוודא שאתם קוראים לשיטות באובייקט הזה אחרי שהמשתמש מבטל את נעילת המכשיר. אחרת, ה-API מחזיר עכשיו ערכים ריקים או null.

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

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

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

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

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

File descriptor sanitizer (fdsan)

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

הגבלות על ממשקים שאינם ב-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.

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

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

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

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

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

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

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

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

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

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