מערכת 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 ספריית ההעדפות | ללא | לא | כן |
מסד נתונים | נתונים מובְנים | ספריית מתמידים של חדר | ללא | לא | כן |
הפתרון שתבחרו תלוי בצרכים הספציפיים שלכם:
- כמה מקום הנתונים שלך צורכים?
- באחסון הפנימי יש שטח מוגבל לנתונים ספציפיים לאפליקציה. שימוש בסוגים אחרים של במקרה הצורך לשמור כמות משמעותית של נתונים.
- עד כמה הגישה לנתונים צריכה להיות מהימנה?
- אם לפונקציונליות הבסיסית של האפליקציה נדרשים נתונים מסוימים, למשל מתי האפליקציה מתחיל, למקם את הנתונים בספריית אחסון פנימי או במסד נתונים. לא תמיד ניתן לגשת לקבצים ספציפיים לאפליקציה שמאוחסנים באחסון חיצוני מכיוון שמכשירים מסוימים מאפשרים למשתמשים להסיר מכשיר פיזי שתואם ואחסון חיצוני.
- אילו נתונים צריך לאחסן?
- אם יש לך נתונים שחשובים רק לאפליקציה שלך, כדאי להשתמש בנתונים ספציפיים אחסון. עבור תוכן מדיה שניתן לשתף, יש להשתמש בנפח אחסון משותף כדי שאפליקציות אחרות יוכלו לגשת לתוכן. לנתונים מובְנים, יש להשתמש באחת משתי ההעדפות (לערכי מפתח/ערך) ) או מסד נתונים (לנתונים שמכילים יותר מ-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) ומעלה מקבלים גישה בהיקף רחב לאתרים חיצוניים נפח אחסון, או נפח אחסון בהיקף, כברירת מחדל. לאפליקציות כאלה יש גישה רק ספרייה ספציפית לאפליקציה באחסון חיצוני, וכן סוגים ספציפיים של מדיה שהאפליקציה יצרה.
כדאי להשתמש בנפח אחסון, אלא אם לאפליקציה נדרשת גישה לקובץ שמאוחסן מחוץ ל-
של ספרייה ספציפית לאפליקציה
של ספרייה שהMediaStore
לממשקי API יש גישה. אם אתם מאחסנים קבצים ספציפיים לאפליקציה באחסון חיצוני, אתם יכולים:
לאפשר שימוש קל יותר בנפח אחסון על ידי הצבת הקבצים
ספרייה ספציפית לאפליקציה בדומיין חיצוני
אחסון נוסף. כך, האפליקציה
שומרת על הגישה לקבצים האלה כאשר נפח האחסון בהיקף מופעל.
כדי להכין את האפליקציה לנפח אחסון בהיקף, כדאי לעיין בתרחישים לדוגמה של שימוש באחסון מדריך. אם לאפליקציה שלכם יש שימוש אחר אם היקף האחסון לא נכלל במסגרת האחסון ההיקפי, צריך להגיש תכונה בקשה. אפשר להפסיק באופן זמני את השימוש בהיקף אחסון נוסף.
הצגת קבצים במכשיר
כדי להציג את הקבצים שמאוחסנים במכשיר, צריך להשתמש בקובץ המכשיר של Android Studio חוקר.
מקורות מידע נוספים
למידע נוסף על אחסון הנתונים, אפשר לעיין במקורות המידע הבאים.