אִחסוּן

סמל HAL לאחסון חיצוני של Android

אנדרואיד התפתחה עם הזמן כדי לתמוך במגוון רחב של סוגי מכשירי אחסון ותכונות. כול הגירסות של מכשירים תומכים אנדרואיד עם אחסון מסורתי , הכולל אחסון נייד לחיקוי. אחסון נייד יכול להינתן על ידי מדיה פיזית, כמו כרטיס SD או USB, כי הוא עבור העברת אחסון / קובץ נתונים ארעיים. המדיה הפיזית עשויה להישאר עם המכשיר למשך פרק זמן ממושך, אך אינה קשורה למכשיר וניתן להסירו. כרטיסי SD היו זמינים כאחסון נייד מאז Android 1.0; אנדרואיד 6.0 הוסיף תמיכה ב- USB. אחסון לחיקוי מסופק על ידי חשיפת חלק האחסון הפנימי דרך שכבת אמולציה כבר זמין מאז אנדרואיד 3.0.

החל ב Android 6.0, Android תומך אחסון לאימוץ , אשר מסופק על ידי מדיה פיזית, כמו כרטיס SD או USB, כי מוצפן מעוצב להתנהג כמו אחסון פנימי. אחסון שניתן לאמץ יכול לאחסן את כל סוגי נתוני היישום.

הרשאות

הגישה לאחסון חיצוני מוגנת על ידי הרשאות Android שונות. החל ב 1.0 אנדרואיד, גישה לכתיבה מוגנת עם WRITE_EXTERNAL_STORAGE הרשות. החל ב 4.1 אנדרואיד, גישה לקריאה מוגנת עם READ_EXTERNAL_STORAGE הרשות.

החל מאנדרואיד 4.4, הבעלים, הקבוצה ומצבי הקבצים במכשירי אחסון חיצוניים מסונתזים כעת על סמך מבנה הספרייה. זה מאפשר יישומים לניהול ספריות חבילה הספציפית שלהם על אחסון חיצוני ללא צורך שהם מחזיקים הרחבה WRITE_EXTERNAL_STORAGE הרשות. לדוגמה, אפליקציית עם שם החבילה com.example.foo יכול כעת בחופשיות לגשת Android/data/com.example.foo/ על התקני אחסון חיצוניים ללא הרשאות. הרשאות מסונתזות אלה מושגות על ידי עטיפת התקני אחסון גולמיים בדמון FUSE.

החלו ב 10 אנדרואיד, יישומי יעד שאנדרואיד 9 ו מחדל תחתון כדי אחסון ישן, והוא יכול להצטרף אחסון מבודד. אפליקציות המיועדות אנדרואיד 10 וברירת מחדל יהיה אחסון מבודד יכולים לבטל את זה באופן זמני. השתמש בתכונת מניפסט requestLegacyExternalStorage , אשר שולט על מודל האחסון, כדי לשנות את מצב ברירת המחדל.

מאז הוא READ_EXTERNAL_STORAGE ו WRITE_EXTERNAL_STORAGE ההרשאות הן רכות-מוגבל, אם המתקין לא לבן היישום, הגישה השולטת רשות האוספים השמיעתיים וחזותיים בלבד, ללא גישה לכרטיס SD. זה חל גם אם האפליקציה מבקשת אחסון מדור קודם. לקבלת מידע נוסף אודות הוא הגבלות קשות ומגבלות רכות, לראות Hard ומגבלות רכות ב אנדרואיד 10 .

אם המתקין רשם את ההרשאה ברשימה, אפליקציה שפועלת במצב מדור קודם תקבל את התנהגות ההרשאה הלא מבודדת. ההרשאה שולטת בגישה לכרטיס SD ובאוספים הקוליים והחזותיים. זה קורה כאשר האפליקציה מכוונת לאנדרואיד 9 ומטה ואינה מצטרפת לאחסון מבודד, או שהיא מכוונת לאנדרואיד 10 ומתבטלת.

ניתן לציין את מצב רשימת ההיתרים רק בזמן ההתקנה, ולא ניתן לשנותו עד להתקנת האפליקציה.

לקבלת מידע נוסף על קביעת READ_EXTERNAL_STORAGE הרשות, לראות setWhitelistedRestrictedPermissions() ב PackageInstaller.SessionParams בכיתה.

הרשאות זמן ריצה

6.0 מציגה אנדרואיד חדש הרשאות ריצה מודל שבו האפליקציות לבקש יכולות בעת הצורך בזמן ריצה. בגלל הדגם החדש כולל את READ/WRITE_EXTERNAL_STORAGE הרשאות, צרכימי פלטפורמת גישה לאחסון מענק דינמי בלי להרוג או הפעלה מחדש אפליקציות כבר ריצה. זה עושה זאת על ידי שמירה על שלוש תצוגות מובחנות של כל התקני האחסון המותקנים:

  • /mnt/runtime/default מוצגת לאפליקציות ללא הרשאות אחסון מיוחדות, וכן למרחב שמות השורש שבו adbd ורכיבי מערכת אחרים לחיות.
  • /mnt/runtime/read מוצגת לאפליקציות עם READ_EXTERNAL_STORAGE (Set LEGACY_STORAGE עבור אנדרואיד 10)
  • /mnt/runtime/write מוצגת לאפליקציות עם WRITE_EXTERNAL_STORAGE

בזמן מזלג Zygote, אנו יוצרים מרחב שמות הר עבור כל אפליקציה פועלת ומחברים את התצוגה הראשונית המתאימה למקומה. מאוחר יותר, כאשר הרשאות ריצה מוענקות, vold קופץ לתוך מרחב הר אפליקציות שכבר ריצו תושבות לאגד לתצוגה המשודרגת למקומו. שים לב כי הורדות הורדה של הרשאות תמיד גורמות לכך שהאפליקציה נהרגת.

setns() פונקציונליות המשמש ליישם תכונה זו דורשת לפחות 3.8 לינוקס, אבל טלאים כבר backported בהצלחה לינוקס 3.4. PermissionsHostTest מבחן CTS יכול לשמש כדי לוודא התנהגות הקרנל נכונה.