עדכונים לאחסון ב-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. כדי לבדוק אם יש מקום פנוי, מפעילים את פעולת הכוונה ACTION_MANAGE_STORAGE.
  2. אם אין מספיק מקום פנוי במכשיר, צריך לבקש מהמשתמש להביע הסכמה לאפליקציה כדי לנקות את כל המטמון. כדי לעשות זאת, צריך להפעיל את פעולת הכוונה ACTION_CLEAR_APP_CACHE.

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

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

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

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

ביצוע פעולות באצווה

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

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

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

פוסטים בבלוג

סרטונים