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

פלטפורמת 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 נתוני הסטטיסטיקה של השימוש של כל משתמש באפליקציות מאוחסנים באחסון מוצפן של פרטי הכניסה. לכן, לאף אפליקציה או למערכת אין גישה לנתונים האלה, אלא אם הערך true מוחזר על ידי isUserUnlocked(). הערך הזה מוחזר אחרי שאחד מהאירועים הבאים מתרחש:

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

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

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

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

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

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

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

כלי לניקוי תיאור קובץ (fdsan)

ב-Android 10 הושק fdsan (כלי לניקוי תיאור קובץ). fdsan מזהה טיפול שגוי בבעלות על מתאר הקובץ, כמו שימוש אחרי סגירה וסגירה כפולה. מצב ברירת המחדל של 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.

הספרייה המשותפת של מפות Google בגרסה 1 הוסרה

הגרסה הראשונה של הספרייה המשותפת של מפות Google הוסרה לחלוטין ב-Android 11. הספרייה הזו הוצאה משימוש בעבר והפסיקה לפעול באפליקציות ב-Android 10. אפליקציות שהסתמכו בעבר על הספרייה המשותפת הזו במכשירים עם Android 9 (רמת API‏ 28) או גרסאות ישנות יותר צריכות להשתמש במקום זאת ב-Maps SDK for 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", ...) תחזיר ערך null.

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