עדכונים לאחסון ב-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 האלה כוללים את:

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

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

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

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

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

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

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

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

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

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

גישה לספריות

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

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

גישה לקבצים

לא ניתן יותר להשתמש בפעולה ACTION_OPEN_DOCUMENT_TREE או בפעולה 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, כדאי לעיין בחומרים הבאים:

פוסטים בבלוג

סרטונים