ב-Android נעשה שימוש במערכת קבצים שדומה למערכות קבצים שמבוססות על דיסק בפלטפורמות אחרות. המערכת מספקת כמה אפשרויות לשמירת נתוני האפליקציה:
- אחסון ספציפי לאפליקציה: אחסון קבצים שמיועדים לשימוש של האפליקציה בלבד, בספריות ייעודיות בנפח אחסון פנימי או בספריות ייעודיות שונות באחסון חיצוני. כדי לשמור מידע רגיש שאפליקציות אחרות לא אמורות לגשת אליו, השתמשו בספריות שבתוך האחסון הפנימי.
- נפח אחסון משותף: אחסון קבצים שהאפליקציה שלכם מתכוונת לשתף עם אפליקציות אחרות, כולל מדיה, מסמכים וקבצים אחרים.
- העדפות: אחסון נתונים פרטיים ופרימיטיביים בצמדי מפתח/ערך.
- מסדי נתונים: אחסון נתונים מובְנים במסד נתונים פרטי באמצעות ספריית Room persistence.
המאפיינים של האפשרויות האלה מסוכמים בטבלה הבאה:
| סוג התוכן | שיטת הגישה | נדרשות הרשאות | האם אפליקציות אחרות יכולות לגשת? | האם הקבצים מוסרים כשמסירים את האפליקציה? | |
|---|---|---|---|---|---|
| קבצים ספציפיים לאפליקציה | קבצים שמיועדים לשימוש של האפליקציה בלבד | מאחסון פנימי, getFilesDir() או
getCacheDir()מאחסון חיצוני, getExternalFilesDir() או
getExternalCacheDir() |
לא נדרשת אף פעם לאחסון פנימי לא נדרשת לאחסון חיצוני כשהאפליקציה פועלת במכשירים עם Android בגרסה 4.4 (רמת API 19) ומעלה |
לא | כן |
| מדיה | קבצי מדיה שאפשר לשתף (תמונות, קובצי אודיו, סרטונים) | MediaStore API |
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 persistence 1 | ללא | לא | כן |
| מסדי נתונים שמתארחים בענן | נתונים מסונכרנים בכמה מכשירים, שיתוף פעולה בזמן אמת | Cloud Firestore, Firebase SQL Connect | INTERNET |
שימוש רק בקצה העורפי בענן | המטמון של ה-SDK נמחק, אבל הנתונים בענן נשארים |
| מאגר אובייקטים בענן | נתונים לא מובנים (כמו מדיה, קבצים גדולים או גיבויים) | Cloud Storage for Firebase | INTERNET |
שימוש רק בקצה העורפי בענן | המטמון של ה-SDK נמחק, אבל הנתונים בענן נשארים |
1 כדי לסנכרן מסדי נתונים מקומיים של Room בין מכשירים, צריך להתאים את Room לקצה עורפי בענן או לשקול פתרונות סנכרון מנוהלים כמו Firebase.
הפתרון שתבחרו תלוי בצרכים הספציפיים שלכם:
- כמה נפח אחסון צריך בשביל הנתונים שלכם?
- באחסון הפנימי יש מקום מוגבל לנתונים ספציפיים לאפליקציה. אם אתם צריכים לשמור כמות גדולה של נתונים, השתמשו בסוגים אחרים של אחסון.
- עד כמה הגישה לנתונים צריכה להיות מהימנה?
- אם הפונקציונליות הבסיסית של האפליקציה דורשת נתונים מסוימים, למשל כשהאפליקציה מופעלת, צריך למקם את הנתונים בספריית האחסון הפנימי או במסד נתונים. לא תמיד אפשר לגשת לקבצים ספציפיים לאפליקציה שמאוחסנים באחסון חיצוני, כי בחלק מהמכשירים המשתמשים יכולים להסיר מכשיר פיזי שמתאים לאחסון חיצוני.
- איזה סוג של נתונים אתם צריכים לאחסן?
- אם יש לכם נתונים שרלוונטיים רק לאפליקציה, השתמשו באחסון ספציפי לאפליקציה. אם אתם רוצים לשתף תוכן מדיה, השתמשו בנפח אחסון משותף כדי שאפליקציות אחרות יוכלו לגשת לתוכן. לנתונים מובְנים, משתמשים בהעדפות (לנתונים של מפתח/ערך) או במסד נתונים (לנתונים שמכילים יותר מ-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 יכולים לגשת אליה. אם אתם מאחסנים קבצים ספציפיים לאפליקציה באחסון חיצוני, אתם יכולים להקל על המעבר לנפח אחסון ייעודי לאפליקציות על ידי מיקום הקבצים האלה בספרייה ספציפית לאפליקציה באחסון חיצוני. כך האפליקציה שומרת על הגישה לקבצים האלה כשנפח האחסון הייעודי לאפליקציות מופעל.
כדי להכין את האפליקציה לנפח אחסון ייעודי לאפליקציות, כדאי לעיין במדריך בנושא תרחישים לדוגמה ושיטות מומלצות בנוגע לאחסון. אם יש לאפליקציה תרחיש שימוש אחר שלא נכלל בנפח האחסון הייעודי לאפליקציות, הגישו בקשה להוספת תכונה. אתם יכולים לבטל באופן זמני את השימוש בנפח אחסון ייעודי לאפליקציות.
איך פותחים קבצים במכשיר
כדי לראות את הקבצים ששמורים במכשיר, משתמשים בסייר הקבצים במכשיר ב-Android Studio.
מקורות מידע נוספים
למידע נוסף על אחסון נתונים, אפשר לעיין במקורות המידע הבאים.