Место хранения

Значок HAL внешнего хранилища Android

Android со временем эволюционировал, чтобы поддерживать широкий спектр типов и функций запоминающих устройств. Все версии Android поддержки устройств с традиционным хранением , которое включает в себя портативное и эмулированное хранение. Портативное хранение может быть обеспечено с помощью физических средств массовой информации, как SD - карта или USB, который предназначен для временного хранения данных передачи / файлов. Физический носитель может оставаться с устройством в течение длительного периода времени, но не привязан к устройству и может быть удален. SD-карты доступны в качестве портативных накопителей с Android 1.0; В Android 6.0 добавлена ​​поддержка USB. Эмуляция хранение обеспечивается путем воздействия на часть внутренней памяти через слой эмуляции и доступен с Android 3.0.

Начиная с Android 6.0, Android поддерживает усыновлено хранение , который предоставляется физическими СМИ, как SD - карта или USB, который зашифрован и отформатированной вести себя как внутреннее хранилище. Адаптивное хранилище может хранить все типы данных приложений.

Разрешения

Доступ к внешнему хранилищу защищен различными разрешениями Android. Начиная с Android 1.0, запись доступ защищен с WRITE_EXTERNAL_STORAGE разрешения. Начиная с Android 4.1, доступ на чтение защищен с READ_EXTERNAL_STORAGE разрешения.

Начиная с Android 4.4, владелец, группа и режимы файлов на внешних устройствах хранения теперь синтезируются на основе структуры каталогов. Это позволяет приложениям управлять своими пакетами конкретных каталогов на внешнем хранилище , не требуя они имеют широкое WRITE_EXTERNAL_STORAGE разрешение. Например, приложение с именем пакета com.example.foo теперь может свободно получить доступ к Android/data/com.example.foo/ на внешних устройствах хранения данных без каких - либо разрешений. Эти синтезированные разрешения достигаются путем обертывания необработанных запоминающих устройств в демон FUSE.

Начиная с Android 10, приложение этой цели Android 9 и более низкое значением по умолчанию для унаследованного хранения, и может выбрать , чтобы изолированное хранилище. Приложения, целевая Android 10 и по умолчанию для изоляции хранения могут временно отказаться от него. Используйте атрибут манифеста requestLegacyExternalStorage , который управляет моделью хранения данных, чтобы изменить состояние по умолчанию.

Поскольку оба READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE разрешение является мягким ограниченным, если установщик не Whitelist приложения, доступ контроля прав доступа только к слуховым и визуальным коллекциям, не имеющему доступа к SD - карте. Это применимо, даже если приложение запрашивает устаревшее хранилище. Для получения дополнительной информации об обоих жестких ограничений и мягких ограничений см Жесткие и мягкие ограничения в Android 10 .

Если установщик включил разрешение в белый список, приложение, работающее в устаревшем режиме, получит неизолированное поведение разрешения. Разрешение контролирует доступ к SD-карте, а также слуховые и визуальные коллекции. Это происходит, когда приложение нацелено на Android 9 или ниже и не выбирает изолированное хранилище, либо оно нацелено на Android 10 и отключается.

Состояние белого списка можно указать только во время установки и не может быть изменено, пока приложение не будет установлено.

Для получения дополнительной информации о настройке READ_EXTERNAL_STORAGE разрешения см setWhitelistedRestrictedPermissions() в PackageInstaller.SessionParams классе.

Разрешения во время выполнения

Android 6.0 вводит новые разрешения во время выполнения модели , где приложение запрашивать возможности при необходимости во время выполнения. Поскольку новая модель включает READ/WRITE_EXTERNAL_STORAGE разрешение, потребность платформы для доступа к хранилищам гранта динамически без убийства или перезапуска уже запущенных приложений. Это достигается за счет трех различных представлений всех подключенных устройств хранения:

  • /mnt/runtime/default по adbd /mnt/runtime/default отображается в приложениях без каких - либо специальных разрешений для хранения и корня пространства имен , где adbd живут и другие компоненты системы.
  • /mnt/runtime/read показываются приложения с READ_EXTERNAL_STORAGE (Set LEGACY_STORAGE для Android 10)
  • /mnt/runtime/write показана приложение с WRITE_EXTERNAL_STORAGE

Во время форка Zygote мы создаем пространство имен монтирования для каждого запущенного приложения и привязываем монтирование к соответствующему начальному представлению на место. Позже, когда права доступа во время выполнения предоставляется, vold перескакивает на гору пространство имен уже запущенные приложений и Монтирования обновленного вида на место. Обратите внимание, что понижение уровня разрешений всегда приводит к завершению работы приложения.

setns() функциональность используется для реализации этой функции требует , по крайней мере , Linux 3.8, но патчи были успешно портированной для Linux 3.4. PermissionsHostTest тест CTS может быть использован для проверки правильного поведения ядра.