עדכונים לאחסון ב-Android 11

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

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

אכיפה של נפח אחסון ייעודי לאפליקציות

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

שמירה על תאימות ל-Android 10

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

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

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

בדיקת נפח אחסון ייעודי לאפליקציות

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

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

ניהול האחסון במכשיר

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

  1. כדי לבדוק אם יש מקום פנוי, מפעילים את פעולת Intent ACTION_MANAGE_STORAGE.
  2. אם אין מספיק מקום פנוי במכשיר, צריך לבקש מהמשתמש להעניק לאפליקציה שלכם הרשאה לנקות את כל מטמוני הנתונים. כדי לעשות זאת, מפעילים את פעולת Intent ACTION_CLEAR_APP_CACHE.

ספרייה ספציפית לאפליקציה באחסון חיצוני

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

גישה לקובצי מדיה

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

ביצוע פעולות בקבוצות

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

גישה לקבצים באמצעות נתיבי קבצים ישירים וספריות מקומיות

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

  • File API.
  • ספריות מקוריות, כמו fopen().

גישה לנתונים מאפליקציות אחרות

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

גישה לספריות נתונים באחסון הפנימי

ב-Android 9 (רמת API‏ 28) התחילו להגביל את האפליקציות שיכולות להפוך את הקבצים בספריות הנתונים שלהן באחסון הפנימי לנגישים לכל האפליקציות. אפליקציות שמיועדות ל-Android 9 ואילך לא יכולות להגדיר את הקבצים בספריות הנתונים שלהן כנגישים לכולם.

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

גישה לספריות ספציפיות לאפליקציות באחסון חיצוני

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

הגבלות גישה למסמכים

כדי לתת למפתחים זמן לבדיקות, השינויים הבאים שקשורים ל-Storage Access Framework‏ (SAF) ייכנסו לתוקף רק אם האפליקציה שלכם מטרגטת את Android מגרסה 11 ואילך.

גישה לספריות

אי אפשר יותר להשתמש בפעולת Intent ACTION_OPEN_DOCUMENT_TREE כדי לבקש גישה לספריות הבאות:

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

גישה לקבצים

אי אפשר יותר להשתמש בפעולת Intent ACTION_OPEN_DOCUMENT_TREE או בפעולת Intent ACTION_OPEN_DOCUMENT כדי לבקש מהמשתמש לבחור קבצים בודדים מהספריות הבאות:

  • הספרייה Android/data/ וכל ספריות המשנה.
  • הספרייה Android/obb/ וכל ספריות המשנה.

בדיקת השינוי

כדי לבדוק את השינוי הזה בהתנהגות, מבצעים את הפעולות הבאות:

  1. מפעילים כוונה באמצעות הפעולה ACTION_OPEN_DOCUMENT. בודקים שהספריות Android/data/ ו-Android/obb/ לא מופיעות.
  2. מבצעים אחת מהפעולות הבאות:
  3. מפעילים כוונה באמצעות הפעולה ACTION_OPEN_DOCUMENT_TREE. בודקים שהספרייה Downloadמופיעה ושכפתור הפעולה שמשויך לספרייה מושבת.

הרשאות

‫Android 11 כוללת את השינויים הבאים שקשורים להרשאות גישה לאחסון.

טירגוט לכל גרסה

בתיבת הדו-שיח הראשונה מוצג קישור בשם 'אישור בהגדרות'.
איור 1. תיבת דו-שיח שמוצגת כשאפליקציה משתמשת בנפח אחסון ייעודי לאפליקציות ומבקשת את ההרשאה READ_EXTERNAL_STORAGE.

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

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

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

טירגוט ל-Android 11

אם האפליקציה שלכם מטרגטת את Android 11, ההרשאה WRITE_EXTERNAL_STORAGE וההרשאה WRITE_MEDIA_STORAGE המוענקת למערכת לא מספקות יותר גישה נוספת.

חשוב לזכור שבמכשירים עם Android 10 (רמת API‏ 29) ואילך, האפליקציה יכולה לתרום לאוספי מדיה מוגדרים היטב כמו MediaStore.Downloads בלי לבקש הרשאות שקשורות לאחסון. מידע נוסף על בקשת רק ההרשאות הנדרשות כשעובדים עם קובצי מדיה באפליקציה

גישה לכל הקבצים

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

מקורות מידע נוספים

למידע נוסף על שינויים באחסון ב-Android 11, אפשר לעיין בחומרים הבאים:

פוסטים בבלוגים

סרטונים