אנדרואיד תומכת במכשירים עם אחסון מסורתי, המוגדר כמערכת קבצים חסרת רגישות לאותיות גדולות עם מחלקות ומצבי הרשאות POSIX בלתי ניתנים לשינוי. הרעיון של אחסון מסורתי כולל אחסון מדומה ונייד. אחסון נייד מוגדר ככל אחסון חיצוני שאינו מאומץ על ידי המערכת ולכן אינו מעוצב ומוצפן או קשור למכשיר ספציפי. מכיוון שאחסון חיצוני מסורתי מציע הגנה מינימלית על נתונים מאוחסנים, קוד מערכת לא אמור לאחסן נתונים רגישים באחסון חיצוני. באופן ספציפי, יש לאחסן קובצי תצורה ויומן רק באחסון פנימי שבו ניתן להגן עליהם ביעילות.
אחסון חיצוני מרובה משתמשים
החל מ-Android 4.2, מכשירים יכולים לתמוך במספר משתמשים, ואחסון חיצוני חייב לעמוד באילוצים הבאים:
- לכל משתמש חייב להיות אחסון חיצוני ראשי מבודד משלו, ואסור שתהיה לו גישה לאחסון החיצוני הראשי של משתמשים אחרים.
- הנתיב
/sdcard
חייב להגיע לאחסון החיצוני הראשי הספציפי למשתמש הנכון בהתבסס על המשתמש שבו פועל תהליך. - אחסון עבור קבצי OBB גדולים בספריית
Android/obb
עשוי להיות משותף בין מספר משתמשים כאופטימיזציה. - אחסון חיצוני משני לא חייב להיות בר כתיבה על ידי אפליקציות, למעט ספריות ספציפיות לחבילה כפי שמותר על ידי הרשאות מסונתזות.
מימוש פלטפורמת ברירת המחדל של תכונה זו ממנפת את מרחבי השמות של ליבת לינוקס כדי ליצור טבלאות mount מבודדות עבור כל תהליך זיגוט-מזלג, ולאחר מכן משתמשת ברכיבי חיבור כדי להציע את האחסון החיצוני הראשי הספציפי הנכון למשתמש לתוך אותו מרחב שמות פרטי.
בעת האתחול, המערכת מעלה דמון FUSE אחסון חיצוני יחיד ב- EMULATED_STORAGE_SOURCE
, אשר מוסתר מאפליקציות. לאחר מזלגות ה-Zygote, הוא מקשר את ספריית המשנה הספציפית למשתמש המתאימה מתחת לדמון FUSE ל- EMULATED_STORAGE_TARGET
כך שנתיבי אחסון חיצוניים יפתרו כהלכה עבור האפליקציה. מכיוון שלאפליקציה חסרות נקודות הרכבה נגישות לאחסון של משתמשים אחרים, הם יכולים לגשת לאחסון רק עבור המשתמש שבו היא התחילה.
הטמעה הזו משתמשת גם בתכונת ליבת תת-עץ המשותפת כדי להפיץ אירועי הרכבה ממרחב השמות של השורש המוגדר כברירת מחדל למרחבי שמות של אפליקציה, מה שמבטיח שתכונות כמו מיכלי ASEC ו-OBB ימשיכו לפעול כהלכה. הוא עושה זאת על ידי הרכבת ה-rootfs כמשותף, ולאחר מכן הרכבה מחדש כעבד לאחר יצירת כל מרחב שמות של Zygote.
מספר התקני אחסון חיצוניים
החל מ-Android 4.4, התקני אחסון חיצוניים מרובים מוגשים למפתחים דרך Context.getExternalFilesDirs()
, Context.getExternalCacheDirs()
ו- Context.getObbDirs()
.
הרשאת WRITE_EXTERNAL_STORAGE
חייבת להעניק גישת כתיבה רק לאחסון החיצוני הראשי במכשיר. אסור לאפשר לאפליקציות לכתוב להתקני אחסון חיצוניים משניים, למעט בספריות הספציפיות לחבילה שלהן, כפי שמותר על ידי הרשאות מסונתזות. הגבלת כתיבה בדרך זו מבטיחה שהמערכת יכולה לנקות קבצים כאשר אפליקציות מוסרות.
תמיכה במדיה USB
אנדרואיד 6.0 תומך בהתקני אחסון ניידים המחוברים למכשיר לפרק זמן קצר בלבד, כמו כונני הבזק מסוג USB. כאשר משתמש מכניס מכשיר נייד חדש, הפלטפורמה מציגה הודעה המאפשרת לו להעתיק או לנהל את התוכן של אותו מכשיר.
באנדרואיד 6.0, כל מכשיר שאינו מאומץ נחשב לנייד. מכיוון שאחסון נייד מחובר לזמן קצר בלבד, הפלטפורמה נמנעת מפעולות כבדות כמו סריקת מדיה. אפליקציות צד שלישי חייבות לעבור את Storage Access Framework כדי ליצור אינטראקציה עם קבצים באחסון נייד; גישה ישירה חסומה במפורש מטעמי פרטיות ואבטחה.