סקירה כללית על נתונים ואחסון קבצים

מערכת 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 ספריית ההעדפות ללא לא כן
מסד נתונים נתונים מובְנים ספריית הקבועים של 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.

מקורות מידע נוספים

למידע נוסף על אחסון נתונים, אפשר לעיין במקורות המידע הבאים.

סרטונים