اندروید از دستگاههایی با فضای ذخیرهسازی سنتی پشتیبانی میکند، که تعریف میشود یک فایل سیستم حساس به حروف بزرگ و کوچک با کلاسها و حالتهای مجوز غیرقابل تغییر POSIX است. مفهوم ذخیره سازی سنتی شامل ذخیره سازی شبیه سازی شده و قابل حمل است. ذخیره سازی قابل حمل به عنوان هر حافظه خارجی که توسط سیستم پذیرفته نشده است تعریف می شود و بنابراین فرمت و رمزگذاری نشده یا به یک دستگاه خاص گره خورده است. از آنجایی که حافظه خارجی سنتی حداقل حفاظت را برای داده های ذخیره شده ارائه می دهد، کد سیستم نباید داده های حساس را در حافظه خارجی ذخیره کند. به طور خاص، فایلهای پیکربندی و گزارش باید فقط در حافظه داخلی ذخیره شوند، جایی که بتوان به طور موثر محافظت کرد.
حافظه خارجی چند کاربره
با شروع اندروید 4.2، دستگاهها میتوانند چندین کاربر را پشتیبانی کنند و حافظه خارجی باید محدودیتهای زیر را داشته باشد:
- هر کاربر باید حافظه خارجی اصلی جدا شده خود را داشته باشد و نباید به حافظه خارجی اصلی سایر کاربران دسترسی داشته باشد.
- مسیر
/sdcard
باید بر اساس کاربری که یک فرآیند به عنوان آن در حال اجرا است، به حافظه خارجی اولیه و مخصوص کاربر برسد. - فضای ذخیره سازی برای فایل های OBB بزرگ در فهرست
Android/obb
ممکن است به عنوان بهینه سازی بین چندین کاربر به اشتراک گذاشته شود. - حافظه خارجی ثانویه نباید توسط برنامهها قابل نوشتن باشد، مگر در فهرستهای راهنمای خاص بسته که توسط مجوزهای ترکیب شده مجاز است.
پیادهسازی پلتفرم پیشفرض این ویژگی از فضاهای نام هسته لینوکس برای ایجاد جداول mount جدا شده برای هر فرآیند Zygote-forked استفاده میکند و سپس از bind mount برای ارائه فضای ذخیرهسازی خارجی اولیه خاص کاربر در آن فضای نام خصوصی استفاده میکند.
هنگام راهاندازی، سیستم یک شبح FUSE حافظه خارجی شبیهسازی شده را در EMULATED_STORAGE_SOURCE
نصب میکند که از برنامهها پنهان است. پس از انشعاب Zygote، زیرشاخه مخصوص کاربر را از زیر دیمون FUSE به EMULATED_STORAGE_TARGET
متصل می کند تا مسیرهای ذخیره سازی خارجی به درستی برای برنامه حل شوند. از آنجایی که یک برنامه فاقد نقاط اتصال قابل دسترسی برای فضای ذخیرهسازی سایر کاربران است، آنها فقط میتوانند به فضای ذخیرهسازی برای کاربری دسترسی داشته باشند که در آن راهاندازی شده است.
این پیادهسازی همچنین از ویژگی هسته زیردرخت مشترک برای انتشار رویدادهای mount از فضای نام ریشه پیشفرض در فضای نام برنامه استفاده میکند، که تضمین میکند ویژگیهایی مانند کانتینرهای ASEC و نصب OBB به درستی کار میکنند. این کار را با نصب rootfs به صورت اشتراکی انجام میدهد و بعد از ایجاد هر فضای نام Zygote، آن را بهعنوان Slave دوباره نصب میکند.
چندین دستگاه ذخیره سازی خارجی
با شروع Android 4.4، چندین دستگاه ذخیره سازی خارجی از طریق Context.getExternalFilesDirs()
, Context.getExternalCacheDirs()
و Context.getObbDirs()
برای توسعه دهندگان ظاهر می شوند.
مجوز WRITE_EXTERNAL_STORAGE
فقط باید به حافظه خارجی اصلی یک دستگاه دسترسی نوشتن بدهد. برنامهها نباید اجازه داشته باشند در دستگاههای ذخیرهسازی خارجی ثانویه بنویسند، مگر در فهرستهای راهنمای مخصوص بستهشان که مجوزهای ترکیبشده مجاز است. محدود کردن نوشتن به این روش تضمین میکند که سیستم میتواند فایلها را زمانی که برنامهها حذف میشوند پاک کند.
پشتیبانی از رسانه USB
Android 6.0 از دستگاه های ذخیره سازی قابل حملی پشتیبانی می کند که فقط برای مدت زمان کوتاهی به دستگاه متصل می شوند، مانند درایوهای فلش USB. هنگامی که کاربر یک دستگاه قابل حمل جدید را وارد می کند، پلتفرم اعلانی را نشان می دهد که به او اجازه می دهد محتویات آن دستگاه را کپی یا مدیریت کند.
در اندروید 6.0، هر دستگاهی که پذیرفته نشده باشد، قابل حمل تلقی می شود. از آنجایی که فضای ذخیرهسازی قابل حمل فقط برای مدت کوتاهی متصل است، پلتفرم از عملیاتهای سنگین مانند اسکن رسانه جلوگیری میکند. برنامههای شخص ثالث برای تعامل با فایلهای موجود در فضای ذخیرهسازی قابل حمل باید از چارچوب دسترسی به فضای ذخیرهسازی عبور کنند. دسترسی مستقیم به صراحت به دلایل حفظ حریم خصوصی و امنیتی مسدود شده است.