ذخیره سازی

نماد HAL ذخیره سازی خارجی Android

اندروید در طول زمان تکامل یافته است تا انواع مختلفی از انواع و ویژگی های دستگاه ذخیره سازی را پشتیبانی کند. تمام نسخه های پشتیبانی از دستگاه های آندروید با ذخیره سازی سنتی ، که شامل ذخیره سازی قابل حمل و شبیه سازی. ذخیره سازی قابل حمل را می توان با رسانه های فیزیکی ارائه شده، مانند یک کارت SD یا USB، این است که برای ذخیره سازی داده انتقال / فایل های موقت. رسانه فیزیکی ممکن است برای مدت طولانی در دستگاه باقی بماند ، اما به دستگاه وصل نشده و ممکن است برداشته شود. کارت های SD به عنوان ذخیره سازی قابل حمل از Android 1.0 در دسترس بوده اند. اندروید 6.0 پشتیبانی USB را اضافه کرد. ذخیره سازی شبیه سازی شده است با افشای بخشی از حافظه داخلی را از طریق یک لایه شبیه سازی ارائه و از آن زمان به آندروید 3.0 در دسترس است.

شروع در آندروید 6.0، آندروید پشتیبانی از ذخیره سازی adoptable ، است که توسط رسانه های فیزیکی ارائه شده، مانند یک کارت 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 وجود دارد. این حتی در صورتی که برنامه فضای ذخیره قدیمی را درخواست کند ، صدق می کند. برای کسب اطلاعات بیشتر در مورد هر دو محدودیت سخت و محدودیت های نرم، و سخت و محدودیت های نرم در آندروید 10 .

اگر نصب کننده مجوز را در لیست سفید قرار داد ، برنامه ای که در حالت قدیمی کار می کند رفتار مجوز غیر ایزوله را دریافت می کند. مجوز دسترسی کارت SD و مجموعه های شنیداری و تصویری را کنترل می کند. این زمانی اتفاق می افتد که یا برنامه Android 9 یا پایین تر را هدف قرار می دهد و به ذخیره سازی جداگانه روی نمی آورد ، یا Android 10 را هدف قرار می دهد و انصراف می دهد.

حالت لیست سفید را می توان فقط در زمان نصب مشخص کرد و تا زمانی که برنامه نصب نشده باشد ، نمی توان آن را تغییر داد.

برای اطلاعات بیشتر در تنظیم READ_EXTERNAL_STORAGE اجازه، و setWhitelistedRestrictedPermissions() در PackageInstaller.SessionParams کلاس.

مجوزهای زمان اجرا

آندروید 6.0 معرفی جدید مجوز در زمان اجرا مدل که در آن برنامه درخواست قابلیتهای که در زمان اجرا مورد نیاز است. از آنجا که مدل جدید شامل READ/WRITE_EXTERNAL_STORAGE مجوز، نیازهای پلت فرم به دسترسی به ذخیره سازی کمک مالی به صورت پویا بدون کشتن یا راه اندازی مجدد برنامه های در حال حاضر در حال اجرا. این کار را با حفظ سه نمای مجزا از همه دستگاههای ذخیره سازی نصب شده انجام می دهد:

  • /mnt/runtime/default به برنامه های بدون مجوز ذخیره سازی ویژه نشان داده شده است، و به فضای نام ریشه که در آن adbd و دیگر اجزای سیستم زندگی می کنند.
  • /mnt/runtime/read است به برنامه های با نشان داده شده است READ_EXTERNAL_STORAGE (مجموعه LEGACY_STORAGE برای آندروید 10)
  • /mnt/runtime/write است به برنامه های با نشان داده شده است WRITE_EXTERNAL_STORAGE

در زمان انشعاب Zygote ، برای هر برنامه در حال اجرا یک فضای نام Mount ایجاد می کنیم و نمای اولیه مناسب را به محل متصل می کنیم. بعدها، زمانی که مجوز در زمان اجرا اعطا می شود، vold میپرد به فضای نام کوه از برنامه های در حال حاضر در حال اجرا و مانت اتصال دیدگاه به روز رسانی را به محل. توجه داشته باشید که کاهش رتبه مجوز همیشه منجر به کشته شدن برنامه می شود.

setns() قابلیت استفاده برای پیاده سازی این ویژگی نیاز به حداقل لینوکس 3.8، اما تکه اند با موفقیت به لینوکس 3.4، برگشته است. PermissionsHostTest آزمون CTS را می توان به بررسی رفتار هسته درست استفاده می شود.