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

פלטפורמת 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. החל מגרסה 11 של Android, ההטמעה הזו מבוססת על 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.

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

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

ב-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", ...).