
מערכת Android התפתחה לאורך זמן כדי לתמוך במגוון רחב של סוגי תכונות ומכשירי אחסון. כל הגרסאות של Android תומכות במכשירים עם אחסון מסורתי, כולל אחסון נייד ואחסון במכונה וירטואלית. אחסון נייד יכול להיות על גבי מדיה פיזית, כמו כרטיס SD או USB, שמיועד להעברת נתונים זמנית או לאחסון קבצים. המדיה הפיזית עשויה להישאר במכשיר למשך זמן רב, אבל היא לא קשורה למכשיר וניתן להסיר אותה. כרטיסי SD זמינים כאחסון נייד מאז Android 1.0, ובגרסה 6.0 של Android נוספה תמיכה ב-USB. אחסון ממולא זמין מאז Android 3.0, והוא מאפשר לחשוף חלק מהאחסון הפנימי דרך שכבת אמולציה.
החל מגרסה 6.0 של Android, מערכת Android תומכת ב אחסון מתאים, שמסופק על ידי מדיה פיזית, כמו כרטיס SD או USB, שמאובטח ומפורמט כך שיפעל כמו אחסון פנימי. באחסון הניתן לאימוץ אפשר לאחסן את כל סוגי נתוני האפליקציה.
הרשאות
הגישה לאחסון חיצוני מוגנת על ידי הרשאות שונות ב-Android.
החל מ-Android 1.0, הרשאת הכתיבה מוגנת באמצעות ההרשאה WRITE_EXTERNAL_STORAGE
. החל מגרסה 4.1 של Android, הרשאת הקריאה מוגנת באמצעות ההרשאה READ_EXTERNAL_STORAGE
.
החל מגרסה 4.4 של Android, הבעלים, הקבוצה והמצבים של קבצים במכשירי אחסון חיצוניים נוצרים על סמך מבנה הספרייה. כך אפליקציות יכולות לנהל את הספריות הספציפיות לחבילה שלהן באחסון החיצוני בלי שתצטרכו להעניק להן את ההרשאה הרחבה WRITE_EXTERNAL_STORAGE
.
לדוגמה, לאפליקציה עם שם החבילה com.example.foo
יש עכשיו גישה חופשית ל-Android/data/com.example.foo/
במכשירי אחסון חיצוניים ללא הרשאות. ההרשאות המשולבות האלה מתקבלות על ידי אריזה של מכשירי אחסון גולמיים ב-daemon של FUSE.
החל מגרסה 10 של Android, אפליקציות שמטרגטות את Android 9 ומטה מוגדרות כברירת מחדל לאחסון מדור קודם, ואפשר להביע הסכמה לאחסון מבודד.
אפליקציות שמטרגטות את Android 10 ומשתמשות כברירת מחדל באחסון מבודד יכולות לבטל את ההסכמה באופן זמני. כדי לשנות את מצב ברירת המחדל, משתמשים במאפיין המניפסט requestLegacyExternalStorage
, שמנהל את מודל האחסון.
מכיוון שההרשאות READ_EXTERNAL_STORAGE
ו-WRITE_EXTERNAL_STORAGE
מוגבלות באופן רך, אם המתקין לא הוסיף את האפליקציה לרשימת ההיתרים, ההרשאה קובעת את הגישה לאוספים האודיו והווידאו בלבד, ללא גישה לכרטיס ה-SD. הכלל הזה חל גם אם האפליקציה מבקשת אחסון מהדור קודם. מידע נוסף על הגבלות קשות ועל הגבלות רכות זמין במאמר
הגבלות קשות והגבלות רכות ב-Android 10.
אם מנהל ההתקנה הוסיף את ההרשאה לרשימת ההיתרים, אפליקציה שפועלת במצב הקודם מקבלת את התנהגות ההרשאה הלא מבודדת. ההרשאה קובעת את הגישה לכרטיס ה-SD ואת הגישה לאוספים האודיו והווידאו. המצב הזה מתרחש אם האפליקציה מטרגטת את Android 9 ואילך ולא הביעה הסכמה לאחסון מבודד, או אם היא מטרגטת את Android 10 והבעיעה הסכמה לאחסון מבודד.
אפשר לציין את מצב רשימת ההיתרים רק בזמן ההתקנה, ולא ניתן לשנות אותו עד שהאפליקציה מותקנת.
מידע נוסף על הגדרת ההרשאה READ_EXTERNAL_STORAGE
זמין בקטע
setWhitelistedRestrictedPermissions()
בכיתה
PackageInstaller.SessionParams.
ב-Android 13 נוספו הרשאות מדיה מפורטות כדי לתמוך באפליקציות שמקבלות גישה לקובצי מדיה שנוצרו על ידי אפליקציות אחרות. אפליקציות צריכות לבקש אחת או יותר מההרשאות המפורטות של מדיה שמפורטות בקטע
הרשאות מפורטות של מדיה במקום את ההרשאה READ_EXTERNAL_STORAGE
.
מערכת Android 14 מבוססת על הרשאות מדיה מפורטות, שמאפשרות למשתמשים להעניק גישה חלקית לספריית המדיה החזותית שלהם כשאפליקציות מבקשות הרשאות מדיה. מידע נוסף זמין במאמר איך מעניקים גישה חלקית לתמונות ולסרטונים.
הרשאות זמן ריצה
ב-Android 6.0 מוצג מודל חדש של
הרשאות בסביבת זמן ריצה, שבו האפליקציות מבקשות יכולות לפי הצורך בסביבת זמן הריצה. מכיוון שהמודל החדש כולל את ההרשאות READ/WRITE_EXTERNAL_STORAGE
, הפלטפורמה צריכה להעניק גישה לאחסון באופן דינמי בלי להרוג או להפעיל מחדש אפליקציות שכבר פועלות. כדי לעשות זאת, המערכת שומרת על שלוש תצוגות נפרדות של כל מכשירי האחסון המותקנים:
/mnt/runtime/default
מוצג לאפליקציות ללא הרשאות אחסון מיוחדות, ולמרחב השמות ברמה הבסיסית שבו נמצאיםadbd
ורכיבי מערכת אחרים./mnt/runtime/read
מוצג לאפליקציות עםREAD_EXTERNAL_STORAGE
(מגדיריםLEGACY_STORAGE
ל-Android 10)/mnt/runtime/write
מוצג לאפליקציות עםWRITE_EXTERNAL_STORAGE
בזמן ההסתעפות של Zygote, אנחנו יוצרים מרחב שמות טעינה לכל אפליקציה שפועלת ומקשרים את התצוגה הראשונית המתאימה למיקום שלה. מאוחר יותר, כשמתקבלות ההרשאות בסביבת זמן הריצה, vold
עובר למרחב השמות של האפליקציות שכבר פועלות ומאחזר את התצוגה המשודרגת. חשוב לדעת שהורדת רמה של הרשאות תמיד תגרום להפסקת האפליקציה.
כדי להשתמש בפונקציונליות של setns()
שמשמשת ליישום התכונה הזו, נדרשת לפחות גרסה 3.8 של Linux, אבל התיקונים הועברו בהצלחה לגרסה 3.4 של Linux. אפשר להשתמש בבדיקה PermissionsHostTest
CTS כדי לוודא את התנהגות הליבה הנכונה.