ב-Android נעשה שימוש במערכת קבצים שדומה למערכות קבצים שמבוססות על דיסקים בפלטפורמות אחרות. המערכת מספקת כמה אפשרויות לשמירת נתוני האפליקציה:
- אחסון ייעודי לאפליקציה: אחסון קבצים שמיועדים לשימוש באפליקציה בלבד, בספריות ייעודיות בנפח אחסון פנימי או בספריות ייעודיות אחרות בנפח אחסון חיצוני. אפשר להשתמש בספריות שבאחסון הפנימי כדי לשמור מידע רגיש שאפליקציות אחרות לא צריכות לגשת אליו.
- אחסון שיתופי: אחסון קבצים שהאפליקציה שלכם מתכוונת לשתף עם אפליקציות אחרות, כולל מדיה, מסמכים וקבצים אחרים.
- העדפות: אחסון נתונים פרטיים ופשוטים בזוגות מפתח/ערך.
- מסדי נתונים: אחסון נתונים מובְנים במסד נתונים פרטי באמצעות ספריית הקביעות של Room.
המאפיינים של האפשרויות האלה מפורטים בטבלה הבאה:
סוג התוכן | שיטת הגישה | נדרשות הרשאות | האם אפליקציות אחרות יכולות לגשת אליו? | האם הקבצים הוסרו כשהאפליקציה הוסרה? | |
---|---|---|---|---|---|
קבצים ספציפיים לאפליקציה | קבצים שמיועדים לשימוש באפליקציה בלבד | מאחסון פנימי, getFilesDir() או
getCacheDir() מאחסון חיצוני, getExternalFilesDir() או
getExternalCacheDir() |
אף פעם לא נדרש לאחסון פנימי לא נדרש לאחסון חיצוני כשהאפליקציה בשימוש במכשירים שבהם פועלת גרסת Android 4.4 (רמת API 19) ומעלה |
לא | כן |
מדיה | קובצי מדיה שאפשר לשתף (תמונות, קובצי אודיו, סרטונים) | API של MediaStore |
READ_EXTERNAL_STORAGE כשניגשים לקבצים של אפליקציות אחרות
ב-Android 11 (רמת API 30) ומעלהREAD_EXTERNAL_STORAGE או WRITE_EXTERNAL_STORAGE
כשניגשים לקבצים של אפליקציות אחרות ב-Android 10 (רמת API 29)נדרשות הרשאות לכל הקבצים ב-Android 9 (רמת API 28) ומטה |
כן, אבל לאפליקציה האחרת נדרשת ההרשאה READ_EXTERNAL_STORAGE |
לא |
מסמכים וקבצים אחרים | סוגים אחרים של תוכן שניתן לשתף, כולל קבצים שהורדו | Storage Access Framework | ללא | כן, דרך הכלי לבחירת קובצי המערכת | לא |
העדפות של אפליקציות | צמדי מפתח/ערך | הספרייה Jetpack Preferences | ללא | לא | כן |
מסד נתונים | נתונים מובְנים | ספריית הקבועים של room | ללא | לא | כן |
הפתרון שתבחרו תלוי בצרכים הספציפיים שלכם:
- כמה מקום נדרש לנתונים שלכם?
- נפח האחסון הפנימי מוגבל לנתונים ספציפיים לאפליקציה. אם אתם צריכים לשמור כמות גדולה של נתונים, כדאי להשתמש בסוגים אחרים של אחסון.
- עד כמה הגישה לנתונים צריכה להיות מהימנה?
- אם לפונקציונליות הבסיסית של האפליקציה נדרשים נתונים מסוימים, למשל מתי הפעלת האפליקציה, צריך למקם את הנתונים בספריית אחסון פנימי או במסד נתונים. לא תמיד אפשר לגשת לקבצים ספציפיים לאפליקציה שמאוחסנים באחסון חיצוני, כי במכשירים מסוימים המשתמשים יכולים להסיר את ההתקן הפיזי שמשויך לאחסון החיצוני.
- איזה סוג נתונים אתם צריכים לאחסן?
- אם יש לכם נתונים שמשמעותיים רק לאפליקציה, השתמשו באחסון ייעודי לאפליקציה. תוכן מדיה שאפשר לשתף צריך להיות באחסון שיתופי כדי שאפליקציות אחרות יוכלו לגשת אליו. לנתונים מובְנים, משתמשים בהעדפות (לנתונים מסוג מפתח-ערך) או במסד נתונים (לנתונים שמכילים יותר מ-2 עמודות).
- האם הנתונים צריכים להיות פרטיים לאפליקציה?
- כשמאחסנים מידע אישי רגיש – נתונים שלא צריכים להיות נגישים מכל אפליקציה אחרת – צריך להשתמש באחסון פנימי, בהעדפות או במסד נתונים. באחסון הפנימי יש יתרון נוסף – הנתונים מוסתרים מהמשתמשים.
קטגוריות של מיקומי אחסון
ב-Android יש שני סוגים של מיקומים של אחסון פיזי: אחסון פנימי ואחסון חיצוני. ברוב המכשירים, האחסון הפנימי קטן יותר מנפח האחסון החיצוני. עם זאת, האחסון הפנימי תמיד זמין בכל המכשירים, ולכן הוא מקום אמין יותר לשמירת נתונים שהאפליקציה שלכם תלויה בהם.
נפחים נשלפים, כמו כרטיס SD, מופיעים במערכת הקבצים כחלק מהאחסון החיצוני. Android מייצג את המכשירים האלה באמצעות נתיב, למשל /sdcard
.
האפליקציות עצמן מאוחסנות באחסון הפנימי כברירת מחדל. עם זאת, אם קובץ ה-APK גדול מאוד, תוכלו לציין בקובץ המניפסט של האפליקציה העדפה להתקנת האפליקציה באחסון החיצוני במקום זאת:
<manifest ... android:installLocation="preferExternal"> ... </manifest>
הרשאות וגישה לאחסון חיצוני
ב-Android מוגדרות ההרשאות הבאות שקשורות לאחסון: READ_EXTERNAL_STORAGE
, WRITE_EXTERNAL_STORAGE
ו-MANAGE_EXTERNAL_STORAGE
.
בגרסאות קודמות של Android, אפליקציות נדרשו להצהיר על ההרשאה READ_EXTERNAL_STORAGE
כדי לגשת לכל קובץ מחוץ לתיקיות הספציפיות לאפליקציה באחסון החיצוני.
בנוסף, אפליקציות נדרשות להצהיר על ההרשאה WRITE_EXTERNAL_STORAGE
כדי לכתוב לכל קובץ מחוץ לספרייה הספציפית לאפליקציה.
גרסאות עדכניות יותר של Android מסתמכות יותר על מטרת הקובץ מאשר על המיקום שלו, כדי לקבוע את היכולת של האפליקציה לגשת לקובץ מסוים ולכתוב בו. באופן ספציפי, אם האפליקציה שלכם מטרגטת ל-Android 11 (רמת API 30) ואילך, להרשאה WRITE_EXTERNAL_STORAGE
אין השפעה על הגישה של האפליקציה לאחסון. מודל האחסון המבוסס-מטרה הזה משפר את פרטיות המשתמשים, כי לאפליקציות ניתנת גישה רק לאזורים במערכת הקבצים של המכשיר שבהם הן משתמשות בפועל.
ב-Android 11 נוספה ההרשאה MANAGE_EXTERNAL_STORAGE
, שמספקת גישת כתיבה לקבצים מחוץ לספרייה הספציפית לאפליקציה ול-MediaStore
. למידע נוסף על ההרשאה הזו ועל הסיבה לכך שרוב האפליקציות לא צריכות להצהיר עליה כדי למלא את תרחישי השימוש שלהן, אפשר לעיין במדריך בנושא ניהול כל הקבצים במכשיר אחסון.
נפח אחסון ייעודי לאפליקציות
כדי לתת למשתמשים יותר שליטה על הקבצים שלהם ולהגביל את העומס על הקבצים, אפליקציות שמטרגטות את Android 10 (רמת API 29) ואילך מקבלות גישה בהיקף אחסון לאחסון חיצוני, או לאחסון בהיקף כברירת מחדל. לאפליקציות כאלה יש גישה רק לספרייה הספציפית לאפליקציה באחסון החיצוני, וגם לסוגים ספציפיים של מדיה שהאפליקציה יצרה.
מומלץ להשתמש בנפח האחסון הייעודי לאפליקציות, אלא אם האפליקציה שלכם צריכה גישה לקובץ שמאוחסן מחוץ לספרייה ספציפית לאפליקציה ומחוץ לספרייה שיש להרשאת גישה אליה ל-API של MediaStore
. אם אתם מאחסנים קבצים ספציפיים לאפליקציה באחסון חיצוני, תוכלו להקל על המעבר לאחסון מוגבל על ידי הצבתם בספרייה ספציפית לאפליקציה באחסון חיצוני. כך האפליקציה תמשיך לגשת לקבצים האלה כשהאחסון המוגבל יפעל.
כדי להכין את האפליקציה לשימוש באחסון מוגבל, כדאי לעיין במדריך בנושא תרחישים לדוגמה ושיטות מומלצות לגישה לאחסון. אם יש לאפליקציה שלכם תרחיש שימוש נוסף שלא מכוסה על ידי אחסון מוגבל, אתם יכולים לשלוח בקשה להוספת תכונה. אתם יכולים לבטל באופן זמני את השימוש באחסון מוגבל.
הצגת קבצים במכשיר
כדי להציג את הקבצים ששמורים במכשיר, משתמשים בDevice File Explorer של Android Studio.
מקורות מידע נוספים
למידע נוסף על אחסון נתונים, אפשר לעיין במקורות המידע הבאים.