Почему приложения могут получить доступ ко всей SD-карте?

Есть ли техническая причина, по которой приложения, которым нужны только свои данные, не ограничены одной папкой? Я понимаю, что некоторые приложения используют данные других приложений, но я бы с большей вероятностью установил приложение, которое запрашивало только разрешение на хранение файлов в одной конкретной папке.

Ответы (3)

Существуют различные механизмы хранения данных в приложении Android, которым не требуется разрешение на доступ к SD-карте. Вы можете создавать базы данных, хранить параметры приложений, создавать файлы на внутреннем хранилище. Все это не требует каких-либо специальных разрешений, и эти данные доступны только создавшему их приложению.

С другой стороны, если приложению требуется разрешение на SD-карту, это может быть связано с очень большим объемом данных для хранения или с тем, что оно хочет изменить/добавить/удалить файлы, например, в файловом менеджере. Но для важных данных, специфичных для приложения, SD-карта не рекомендуется, поскольку ее можно извлечь в любое время (или подключить как USB-накопитель) и она будет недоступна для приложений.

Я думаю, что многие приложения, которые запрашивают разрешение на доступ к SD, могут использовать другой тип хранилища данных, который не требует этого. Кроме того, файлы, созданные на SD приложением, не будут удалены после удаления приложения, но все другие типы внутреннего хранилища данных будут удалены. Поэтому для меня было бы лучшей практикой разработки не использовать SD, если это не требуется, и, как вы упомянули, это не отпугнет людей, как приложения, которые обращаются ко всему SD.

SD-карты обычно используют файловую систему FAT, которая не допускает разрешений файловой системы. Это означает, что ОС Android должна будет управлять настраиваемым списком файлов, их разрешениями, сопоставлением приложений с файлами/папками и т. д., чтобы предотвратить доступ приложений ко всей карте. Это был бы ужасный беспорядок. Это не только сложно, но и потребует много места для хранения. А потом в один прекрасный день вы вынимаете SD-карту и удаляете несколько фотографий, и вся система ломается. Вы поняли идею.

Я не понимаю, как блокирование доступа к файловой системе приложения может быть таким беспорядком, и особенно не понимаю, как удаление некоторых изображений может его сломать.
Что ж, удаление файлов не обязательно сломает его, если управление будет достаточно сложным. Но добавление файлов будет проблемой. Разрешение любому приложению доступа к новым файлам является проблемой, а запрет любого делает файлы бесполезными. У вас может быть определенная папка Dropbox, что опять же усложняет управление. Но как заставить кого-то, перемещающего файлы на карту со своего ПК, использовать папку Dropbox? Вы не можете. Вы можете снова сделать управление более сложным и заставить его перемещать любые новые файлы в папку. Но всегда будет другой способ сломать его.
Съемные носители предназначены для удаления и изменения другими устройствами, поэтому попытки управлять ими практически бесполезны. Ожидаете ли вы, что Windows/Linux/MacOS предотвратит доступ отдельных приложений к SD-карте, подключенной к вашему телефону? Хотели бы вы настроить, какие из ваших 100 приложений могут получить доступ к каким частям карты? Гораздо проще просто не помещать важные вещи на SD-карту, если вы собираетесь устанавливать случайные ненадежные приложения. Рэнт готов :P

Как объяснил Мэтью Рид, с обычной SD-картой, использующей файловую систему FAT, невозможно использовать права доступа к файлам для управления доступом приложений, так же, как Android контролирует их доступ к файлам во внутренней файловой системе. Но теперь, когда телефоны Android используют внутреннее хранилище вместо SD-карт, и они используют MTP для обеспечения доступа через USB вместо класса запоминающих устройств, телефоны Android могут свободно использовать лучшие файловые системы для хранения своих больших данных.

KitKat добавил в приложения новый механизм хранения больших файлов. Во внутреннем USB-накопителе каждое приложение получает личный каталог данных, как и в памяти меньшего устройства. (На некоторых устройствах это может быть даже одна и та же файловая система.) Приложения могут получать доступ к своему частному каталогу в этой файловой системе без каких-либо специальных разрешений. Также теперь приложения могут запрашивать разрешение «чтение SD-карты» и «запись SD-карты» только в версиях Android до KitKat, если им нужна SD-карта только для использования частного каталога, подобного этому.

Старые общие каталоги, такие как «Загрузки», «Музыка» и «Уведомления», по-прежнему присутствуют, как и раньше, и для доступа к ним по-прежнему требуются те же разрешения. Старые приложения, которые не были обновлены для KitKat, по-прежнему будут использовать эти каталоги, а не новые частные каталоги.