Android از دستگاههای دارای فضای ذخیرهسازی سنتی پشتیبانی میکند که بهعنوان سیستم فایل غیرحساس به حروف بزرگ و کوچک با کلاسها و حالتهای مجوز تغییرناپذیر POSIX تعریف میشود. مفهوم فضای ذخیرهسازی سنتی شامل فضای ذخیرهسازی شبیهسازیشده و قابلحمل میشود. فضای ذخیرهسازی قابلحمل بهعنوان هر فضای ذخیرهسازی خارجی که توسط سیستم پذیرفته نشده است تعریف میشود و بنابراین قالببندی و رمزگذاری نشده است یا به دستگاه خاصی متصل نیست. ازآنجاییکه فضای ذخیرهسازی خارجی سنتی محافظت حداقلی برای دادههای ذخیرهشده ارائه میدهد، کد سیستم نباید دادههای حساس را در فضای ذخیرهسازی خارجی ذخیره کند. بهطور خاص، فایلهای پیکربندی و گزارش فقط باید در فضای ذخیرهسازی داخلی ذخیره شوند، جایی که میتوانند بهطور مؤثر محافظت شوند.
فضای ذخیرهسازی خارجی چندکاربره
از Android 4.2، دستگاهها میتوانند از چند کاربر پشتیبانی کنند و فضای ذخیرهسازی خارجی باید از محدودیتهای زیر پیروی کند:
- هر کاربر باید فضای ذخیرهسازی خارجی اصلی مجزای خود را داشته باشد و نباید به فضای ذخیرهسازی خارجی اصلی سایر کاربران دسترسی داشته باشد.
- مسیر
/sdcardباید به فضای ذخیرهسازی خارجی اصلی مختص کاربر صحیح براساس کاربری که فرایند با آن اجرا میشود منتهی شود. - فضای ذخیرهسازی برای فایلهای بزرگ OBB در دایرکتوری
Android/obbممکن است بهعنوان بهینهسازی بین چند کاربر همرسانی شود. - فضای ذخیرهسازی خارجی ثانویه نباید توسط برنامهها قابلنوشتن باشد، بهجز در دایرکتوریهای مختص بسته که توسط اجازههای ترکیبشده مجاز شدهاند.
پیادهسازی پلاتفرم پیشفرض این ویژگی از فضاهای نام هسته Linux برای ایجاد جدولهای نصب مجزای برای هر فرایند انشعابیافته Zygote استفاده میکند، و سپس از نصبهای پیوندی برای ارائه فضای ذخیرهسازی خارجی اصلی ویژه کاربر صحیح در آن فضای نام خصوصی استفاده میکند.
در زمان راهاندازی، سیستم یک کارگزار 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
Android 6.0 از دستگاههای ذخیرهسازی قابلحمل که فقط برای مدت کوتاهی به دستگاه متصل میشوند، مانند درایوهای USB، پشتیبانی میکند. وقتی کاربر دستگاه قابلحمل جدیدی را متصل میکند، پلاتفرم اعلانی نشان میدهد تا به او امکان دهد محتوای آن دستگاه را کپی یا مدیریت کند.
در Android 6.0، هر دستگاهی که پذیرفته نشده باشد قابلحمل درنظر گرفته میشود. ازآنجاییکه حافظه قابلحمل فقط برای مدت کوتاهی متصل است، پلاتفرم از عملیات سنگین مانند اسکن رسانه اجتناب میکند. برنامههای شخص ثالث باید ازطریق چارچوب دسترسی به فضای ذخیرهسازی با فایلهای موجود در فضای ذخیرهسازی قابلحمل تعامل داشته باشند؛ دسترسی مستقیم بهدلایل امنیتی و حریم خصوصی صریحاً مسدود شده است.