אנדרואיד התפתחה עם הזמן כדי לתמוך במגוון רחב של סוגים ותכונות של התקני אחסון. כל הגרסאות של אנדרואיד תומכות במכשירים עם אחסון מסורתי , הכולל אחסון נייד וחיקוי. ניתן לספק אחסון נייד באמצעות מדיה פיזית, כמו כרטיס SD או USB, כלומר להעברת נתונים/אחסון קבצים זמניים. המדיה הפיזית עשויה להישאר עם המכשיר לפרק זמן ממושך, אך אינה קשורה למכשיר וייתכן שיוסרו. כרטיסי SD זמינים כאחסון נייד מאז אנדרואיד 1.0; אנדרואיד 6.0 הוסיפה תמיכה ב-USB. אחסון אמולציה מסופק על ידי חשיפת חלק מהאחסון הפנימי באמצעות שכבת אמולציה והוא זמין מאז אנדרואיד 3.0.
החל מ-Android 6.0, אנדרואיד תומך באחסון ניתן לאימוץ , שמסופק על ידי מדיה פיזית, כמו כרטיס SD או USB, המוצפן ומעוצב כך שינהג כמו אחסון פנימי. אחסון ניתן לאמץ יכול לאחסן את כל סוגי נתוני האפליקציה.
הרשאות
הגישה לאחסון חיצוני מוגנת על ידי הרשאות Android שונות. החל מ-Android 1.0, גישת הכתיבה מוגנת עם הרשאת WRITE_EXTERNAL_STORAGE
. החל מ-Android 4.1, גישת הקריאה מוגנת עם הרשאת READ_EXTERNAL_STORAGE
.
החל מאנדרואיד 4.4, הבעלים, הקבוצה והמצבים של קבצים בהתקני אחסון חיצוניים מסונתזים כעת על סמך מבנה הספריות. זה מאפשר לאפליקציות לנהל את הספריות הספציפיות לחבילות שלהן באחסון חיצוני מבלי להידרש להן הרשאת WRITE_EXTERNAL_STORAGE
הרחבה. לדוגמה, האפליקציה עם שם החבילה com.example.foo
יכולה כעת לגשת באופן חופשי Android/data/com.example.foo/
בהתקני אחסון חיצוניים ללא הרשאות. הרשאות מסונתזות אלו מבוצעות על ידי עטיפת התקני אחסון גולמיים בדמון FUSE.
החל מ-Android 10, אפליקציות המכוונות לאנדרואיד 9 ומטה ברירת המחדל לאחסון מדור קודם, ויכולות להצטרף לאחסון מבודד. אפליקציות המכוונות לאנדרואיד 10 ובברירת מחדל לאחסון מבודד יכולות לבטל את הסכמתה לכך באופן זמני . השתמש בתכונת המניפסט requestLegacyExternalStorage
, השולטת במודל האחסון, כדי לשנות את מצב ברירת המחדל.
מכיוון שגם הרשאות READ_EXTERNAL_STORAGE
וגם הרשאות WRITE_EXTERNAL_STORAGE
מוגבלות ברכות, אם המתקין לא רשם את האפליקציה ברשימת ההיתרים, ההרשאה שולטת בגישה לאוספים השמיעתיים והחזותיים בלבד, ללא גישה לכרטיס SD. זה חל גם אם האפליקציה מבקשת אחסון מדור קודם. למידע נוסף על הגבלות קשות והן הגבלות רכות, ראה הגבלות קשות ורכות ב-Android 10 .
אם המתקין רשם את ההרשאה ברשימת ההיתרים, אפליקציה הפועלת במצב מדור קודם מקבלת את התנהגות ההרשאה הלא מבודדת. ההרשאה שולטת בגישה לכרטיס SD, ובאוספים השמיעתיים והחזותיים. זה קורה כאשר האפליקציה מכוונת לאנדרואיד 9 ומטה ואינה מצטרפת לאחסון מבודד, או שהיא מכוונת לאנדרואיד 10 ומבטלת הסכמה.
ניתן לציין את מצב רשימת ההיתרים רק בזמן ההתקנה, ולא ניתן לשנות אותו עד שהאפליקציה תותקן.
למידע נוסף על הגדרת הרשאת READ_EXTERNAL_STORAGE
, ראה setWhitelistedRestrictedPermissions()
במחלקה PackageInstaller.SessionParams .
אנדרואיד 13 מציגה הרשאות מדיה פרטניות לתמיכה באפליקציות שניגשים לקבצי מדיה שנוצרו על ידי אפליקציות אחרות. אפליקציות חייבות לבקש אחת או יותר מהרשאות המדיה המפורטות המפורטות בהרשאות מדיה מפורטות במקום הרשאת READ_EXTERNAL_STORAGE
.
אנדרואיד 14 מבוססת על הרשאות מדיה מפורטות כדי לאפשר למשתמשים להעניק גישה חלקית לספריית המדיה החזותית שלהם כאשר אפליקציות מבקשות הרשאות מדיה. ראה הענקת גישה חלקית לתמונות וסרטונים למידע נוסף.
הרשאות זמן ריצה
אנדרואיד 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 fork, אנו יוצרים מרחב שמות של mount עבור כל אפליקציה פועלת ומחברים את התצוגה הראשונית המתאימה למקומה. מאוחר יותר, כאשר ניתנות הרשאות זמן ריצה, vold
קופץ למרחב שמות ה-mount של אפליקציות שכבר פועלות ו-Bind מעלה את התצוגה המשודרגת למקומה. שימו לב ששדרוג לאחור של הרשאות תמיד מביא להרג של האפליקציה.
הפונקציונליות setns()
המשמשת ליישום תכונה זו דורשת לפחות לינוקס 3.8, אך תיקונים הועברו בהצלחה ללינוקס 3.4. ניתן להשתמש במבחן PermissionsHostTest
CTS כדי לאמת התנהגות הליבה הנכונה.