Scoped Storage в Android Q вынуждает разработчиков использовать SAF, а это отстой

click fraud protection

Изменения в Scoped Storage в Android Q — головная боль, поскольку в Storage Access Framework сейчас есть несколько недостатков.

Android Q фундаментально меняет способ хранения данных на вашем телефоне. В каждой версии, вплоть до Pie, хранилище Android работало как настольный компьютер: вы можете использовать любое приложение, которое хотите прочитать или записать любой файл (если вы предоставили приложению разрешение на это). С помощью Q Google вводит (и требует)"Ограниченное хранилище», что делает Android более похожим на iPhone, где хранилище изолировано для каждого приложения. Приложение имеет доступ только к своим файлам, и если его удалить, все его файлы будут удалены.

К счастью, Android Q по-прежнему сохраняет некоторые оригинальные особенности поведения центральной файловой системы Android. К сожалению, теперь пользователю сложно настраивать приложения для доступа к нему, что значительно снижает производительность и возможности. И разработчикам придется существенно перекодировать приложения для его поддержки.

Приложения, которым требуется общий доступ к файловой системе, например. офисный пакет, редактор изображений или файловый менеджер теперь должны будут использовать Android API, называемый «Платформа доступа к хранилищу" (SAF), для всех файловых операций. SAF доступен начиная с Android 5.0 Lollipop, но разработчики, как правило, не используют его без необходимости, поскольку он имеет сложный и некачественный интерфейс. документированный API, плохой пользовательский опыт, низкая производительность и низкая надежность (в основном в форме реализации конкретного поставщика устройства). проблемы). Из-за трудностей с переходом на SAF компания Google решила разрешить приложения, которые еще не указали Поддержка Android Q будет работать так же, как и раньше, но это изменится, когда Play Store потребует, чтобы все приложения поддерживали Q. Следующий год.

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

Google, по крайней мере, улучшил этот процесс Q бета 3, поскольку предыдущие бета-версии не позволяли приложению даже предлагать пользователю выбрать местоположение, что требовал от пользователя довольно много работы чтобы найти основное хранилище своего устройства.

Производительность файлового ввода-вывода в SAF несколько снижается, но самая серьезная проблема заключается в файловом операции с каталогами, где это примерно в 25–50 раз медленнее, чем обычный доступ к файлам, возможный в Пирог. В случае с файловыми менеджерами это означает, что выполнение поиска и расчет использования хранилища займет на порядки больше времени. Отчет об ошибке с демонстрационным приложением доступна здесь.

Пример тестового запуска SAFTest, показывающий разницу в производительности между обычным API файлового ввода-вывода и SAF.

Еще более серьезная проблема с производительностью заключается в том, что некоторым приложениям придется копировать файлы в свою локальную область «хранилища с заданной областью», прежде чем они смогут с ними работать. Это может быть проблематично, если размер таких файлов составляет несколько гигабайт, например. в случае видеофайлов или сжатых архивов. Многие приложения для Android используют преимущества огромного количества Java-библиотек с открытым исходным кодом в сообществе разработчиков, и для работы этих библиотек обычно требуется прямой доступ к файловой системе. Они не специфичны для Android, и для работы с SAF потребуется переписать их. Хуже того, многие внутренние библиотеки Android, такие как менеджер пакетов или API zip, не будут работать с ним. Например, файловый менеджер даже не сможет отобразить значок APK-файла (используя стандартный API Android) без предварительного копирования всего APK в свою собственную область хранения. Отчет об ошибке.

Для технически подкованных людей в настоящее время можно отключить «Scoped Storage» Android Q для каждого приложения через ADB с помощью команды appops. Пользователи root могут выполнять команды непосредственно на своем устройстве без настольного компьютера. Такие команды описаны в документации как функции разработчика и поэтому могут быть удалены в любое время.

Включите общий доступ к хранилищу для приложения:

adb shell cmd appops set your-package-name android: legacy_storage allow && \adb shell am force-stop your-package-name

Отключите общий доступ к хранилищу для приложения:

adb shell cmd appops set your-package-name android: legacy_storage default && \adb shell am force-stop your-package-name

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

Единственное «улучшение безопасности» происходит потому, что теперь для пользователя это становится более трудным процессом. Если, конечно, приложение не хочет украсть только вашу самую личную информацию, например фотографии и видео, которые вы принято, для чего Google добавил альтернативное решение для доступа, которое использует простое всплывающее окно с кнопкой «Да». диалог.

Неизвестно, каких преимуществ Google надеется достичь с помощью этого изменения. Официальная причина, указанная в документации бета-версии Android Q, заключается в том, чтобы «дать пользователям больше контроля над своими файлами и ограничить доступ к файлам». беспорядок». Ограниченное хранилище в его нынешней форме — это новое ограничение того, что разрешено делать пользователю, а не расширение его возможностей. контроль. Заявление об уменьшении беспорядка может быть в некоторой степени обоснованным, но только потому, что это изменение вообще снижает возможность использования файлов. И «беспорядок» увеличивается, если принять во внимание проблему, связанную с тем, что некоторым приложениям теперь приходится дублировать файлы для работы с ними.

Если Google действительно заинтересован в предоставлении пользователям большего контроля над файлами и беспорядком, им следует разработать решение, которое напрямую решает эту проблему, а не ложно называет текущий дизайн Android Q таковым. улучшение. Самый простой ответ — позволить пользователям решать, хотят ли они, чтобы приложение имело ограниченный или общий доступ к файловой системе, используя существующее диалоговое окно запроса разрешения на хранение. Если здесь есть особая обеспокоенность по поводу того, что пользователи принимают неправильные решения, то, безусловно, можно сделайте это диалоговое окно более заметным и требуйте дополнительного взаимодействия с пользователем для полного одобрения приложения. доступ.

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


Примечание редактора: это гостевая статья, написанная старшим членом XDA. Тлибек, наиболее известный своей работой над Проводник FX-файлов. Содержание этой статьи отражает его собственное мнение и анализ ограничений ограниченного хранилища Android Q с минимальным участием и редактированием со стороны Мишаала Рахмана, главного редактора XDA-Developers. Мы обратились к Google, чтобы спросить их о некоторых из этих проблем, но на момент публикации не получили ответа от компании.