Якщо ви коли-небудь пробували керувати файлами на пристрої Android, ви, ймовірно, помітили, що все працює по-різному залежно від того, яку версію Android ви використовуєте. Починаючи з Android 10, Google кардинально змінив взаємодію додатків із файловою системою. Ця зміна, відома як Область зберігання, перевизначила правила читання та запису файлів у спільній пам’яті. Для користувачів, які завантажують додатки, керують файлами OBB або працюють із файловими менеджерами, розуміння обсягу зберігання є важливим.
У цій статті ми розглянемо, що таке обмежене сховище, чому Google його застосував, як це впливає на звичайних користувачів і розробників і що це означає для тих, хто встановлює файли APK або XAPK за межами Play Store.
Проблема зі старою моделлю зберігання
До Android 10 будь-який додаток, який запитував дозвіл READ_EXTERNAL_STORAGE або WRITE_EXTERNAL_STORAGE, міг отримати доступ практично до будь-якого файлу в спільній пам’яті пристрою. Це включало фотографії, документи, завантаження та навіть файли, створені іншими програмами. Хоча це зробило керування файлами зручним, це створило серйозні проблеми щодо конфіденційності та безпеки.
Розглянемо простий додаток-ліхтарик. За старої моделі, якщо ви надали йому дозвіл на зберігання, він міг мовчки читати ваші фотографії, сканувати завантажені документи або навіть змінювати файли, що належать іншим програмам. Не було детального контролю. Ви або надали програмі повний доступ до всього свого сховища, або повністю відмовили в цьому.
Цей широкий доступ призвів до реальних проблем. Деякі програми збирали дані користувача, скануючи сховище на наявність конфіденційних файлів. Інші залишили бездітні файли, які захаращували пристрій довго після видалення програми. Google потребувало рішення, яке б збалансувало зручність використання та конфіденційність, і їхньою відповіддю було обмежене сховище.
Що насправді робить обмежене сховище
Розширене зберігання докорінно змінює зв’язок між програмами та файловою системою. За цією моделлю кожна програма отримує власну приватну пісочницю на зовнішній пам’яті, яка зазвичай розташована за адресою /Android/data/[package.name]/. Програми можуть вільно читати та писати у власному пісочнику, не потребуючи жодних дозволів.
Однак доступ до файлів за межами цієї пісочниці вимагає використання контрольованих API. Ось як працює нова модель:
Спеціальне сховище для програми
Кожна програма має окремий каталог, доступ до якого має лише вона. Після видалення програми цей каталог автоматично очищається. Жодна інша програма не може читати або писати в це місце без кореневого доступу. Це усуває проблему втрати файлів і запобігає переслідуванню даних між програмами.
Медіа-колекції
Для спільних медіафайлів, таких як фотографії, відео та аудіофайли, Android надає API MediaStore. Програми можуть додавати медіафайли до спільних колекцій і читати медіафайли, створені іншими програмами, але лише через цей структурований інтерфейс. Програма може переглядати власні медіафайли без будь-якого дозволу, але для доступу до медіафайлів інших програм потрібні дозволи READ_MEDIA_IMAGES, READ_MEDIA_VIDEO або READ_MEDIA_AUDIO, представлені в Android 13.
Платформа доступу до сховища
Для документів та інших немедійних файлів програми повинні використовувати Storage Access Framework (SAF). Це надає користувачеві засіб вибору системних файлів, який явно вибирає, до яких файлів або каталогів програма може отримати доступ. Програма ніколи не отримує повний доступ до всієї файлової системи.
Дозвіл MANAGE_EXTERNAL_STORAGE
Для програм, яким справді потрібен широкий доступ до файлів, як-от файлові менеджери, засоби резервного копіювання та антивірусне програмне забезпечення, Android надає дозвіл MANAGE_EXTERNAL_STORAGE. Однак цей дозвіл потребує спеціального схвалення від Google для програм, що розповсюджуються через Play Store, і користувачі повинні надати його вручну через системні налаштування, а не в простому діалоговому вікні.
Хронологія розгортання
Google не запровадив обмежене зберігання протягом ночі. Перехід відбувався поступово:
- З’явилося обмежене сховище Android 10 (API 29):, але програми могли відмовитися від використання requestLegacyExternalStorage="true" у своєму маніфесті. Це дало розробникам час адаптуватися.
- Android 11 (API 30): Прапор застарілої версії ігнорувався для програм, націлених на API 30 або вище. Об’ємне сховище стало обов’язковим для нових і оновлених програм у Play Store.
- Android 12 і новіші версії: Було внесено додаткові вдосконалення, зокрема детальні дозволи на медіа та покращену продуктивність SAF.
- Android 13 (API 33): Широкий дозвіл READ_EXTERNAL_STORAGE застарів на користь спеціальних дозволів медіа.
- Android 14 (API 34): Був представлений частковий доступ до фотографій і відео, що дозволяє користувачам надавати доступ до певних файлів, а не до цілих медіа-бібліотек.
Як обмежене сховище впливає на бокове завантаження
Для користувачів, які встановлюють програми за межами Play Store, обмежене сховище створює деякі практичні проблеми, які варто зрозуміти.
Завантаження та доступ до файлів APK
Коли ви завантажуєте файл APK через браузер, він зазвичай потрапляє в папку завантажень. У обмеженому сховищі цей файл належить програмі браузера. Якщо ви хочете встановити його за допомогою іншої програми, наприклад файлового менеджера, для цього файлового менеджера потрібен відповідний доступ. Більшість сучасних файлових менеджерів справляються з цим правильно через SAF, але старіші можуть мати проблеми.
Інсталятор системного пакета все ще може отримати доступ до файлів, які ви явно вибрали за допомогою засобу вибору файлів, тому базовий процес завантаження та встановлення APK продовжує працювати. Однак автоматизовані робочі процеси інсталяції, які покладалися на прямий доступ до файлу, можуть бути порушені.
OBB-файли та ігрові дані
Саме тут обмежене зберігання створює найбільше тертя для бокових завантажувачів. Багато великих ігор використовують файли OBB (Opaque Binary Blob), що зберігаються в /Android/obb/[package.name]/. За старої моделі ви могли просто скопіювати файли OBB у правильний каталог за допомогою будь-якого файлового менеджера.
З обмеженим обсягом зберігання каталог /Android/obb/ обмежений. На Android 11 і пізніших версіях звичайні програми не можуть писати в OBB-каталог іншої програми. Це означає, що якщо ви завантажуєте файл XAPK, який містить дані OBB, інсталятор потребує спеціальної обробки, щоб правильно розмістити ці файли.
Такі інструменти, як наш Екстрактор OBB, можуть допомогти вам витягти OBB-файли з пакетів XAPK, але для розміщення їх у правильному каталозі на новіших версіях Android може знадобитися використання файлового менеджера з дозволом MANAGE_EXTERNAL_STORAGE або використання команд ADB з комп’ютера.
Зауваження щодо встановлення XAPK
Файли XAPK об’єднують APK разом із даними OBB і іноді розділяють конфігурації APK. Щоб установити їх на пристроях під керуванням Android 11 або новішої версії, потрібен інсталятор, який розуміє обмеження обсягу пам’яті. Інсталятор повинен або мати дозвіл MANAGE_EXTERNAL_STORAGE, або використовувати належні API, щоб розмістити файли OBB у правильному місці.
Це одна з причин, чому конвертація файлів XAPK у стандартний формат APK може бути корисною. Окремий APK не потребує розміщення файлу OBB, що спрощує процес встановлення на новіших версіях Android. Ви можете використовувати наш Конвертер XAPK в APK, щоб видобути базовий APK із пакета XAPK.
Що потрібно знати розробникам
Якщо ви розробляєте програми для Android, обмежене сховище вимагає переосмислення того, як ви обробляєте файли:
- Використовуйте спеціальні каталоги програми для будь-яких файлів, які потрібні лише вашій програмі. Вони не потребують дозволів і автоматично очищаються під час видалення.
- Використовуйте MediaStore для фотографій, відео та аудіо, які мають бути видимими для інших програм і зберігатимуться після видалення.
- Використовуйте SAF, коли вашій програмі потрібно працювати з документами або каталогами, вибраними користувачем.
- Уникайте жорстко закодованих шляхів до файлів. Такі шляхи, як /sdcard/MyApp/, більше не надійні. Замість цього використовуйте Context.getExternalFilesDir().
- Тестуйте на кількох рівнях API. Поведінка суттєво відрізняється між Android 10, 11, 13 і 14.
Стратегії міграції
Якщо ваша програма раніше зберігала файли в спільному сховищі, вам потрібен план міграції. Рекомендований підхід полягає в тому, щоб скопіювати наявні файли в спеціальне сховище програми під час першого запуску після оновлення, а потім видалити старі копії. Використовуйте Environment.getExternalStorageDirectory() із прапорцем спадщини протягом перехідного періоду, щоб читати старі файли, а потім перемістити їх у нове розташування.
Поширені помилки
«Обмежене сховище означає, що програми не можуть отримати доступ до файлів»
Це неправда. Програми все ще можуть вільно отримувати доступ до власних файлів, робити внески в спільні медіа-колекції та запитувати доступ до певних файлів через системний засіб вибору. Що змінилося, так це те, що програми більше не можуть мовчки переглядати всю файлову систему.
«На нових версіях Android не працюють файлові менеджери»
Менеджери файлів, які запитують MANAGE_EXTERNAL_STORAGE, все ще працюють. Користувачеві потрібно лише надати цей спеціальний дозвіл у налаштуваннях. Більшість популярних файлових менеджерів вже адаптувалися до цієї вимоги.
«Зберігання обмеженого обсягу впливає лише на SD-карту»
Сховище обмеженого обсягу застосовується до всього спільного сховища, включаючи внутрішнє спільне сховище. Термін «зовнішнє сховище» в Android стосується спільного сховища, доступного для кількох програм, не обов’язково фізичної SD-карти.
Практичні поради для користувачів
Якщо ви регулярно завантажуєте програми або керуєте файлами на своєму пристрої Android, ось кілька практичних рекомендацій:
- Використовуйте сучасний файловий менеджер, який підтримує MANAGE_EXTERNAL_STORAGE. Додатки, такі як Solid Explorer, MiXplorer і Total Commander, добре адаптувалися до зберігання даних.
- Обережно надавайте дозволи. Коли файловий менеджер запитує «Доступ до всіх файлів», розумійте, що це дозвіл MANAGE_EXTERNAL_STORAGE і необхідний для повної функціональності.
- Використовуйте ADB для впертих операцій з файлами. Якщо ви не можете розмістити OBB-файли через файловий менеджер, підключивши свій пристрій до комп’ютера та використовуючи adb push, ви повністю обійдете обмеження на зберігання.
- Перетворення складних пакетів у простіші формати. Якщо файл XAPK викликає у вас проблеми на новішому пристрої, вилучення лише компонента APK може бути шляхом найменшого опору.
- Оновлюйте програми встановлення. Старіші версії інсталяторів XAPK можуть неправильно обробляти обмежене сховище.
Майбутнє сховища Android
Google продовжує вдосконалювати модель зберігання з кожним випуском Android. Android 14 представив частковий доступ до медіафайлів, дозволяючи користувачам ділитися певними фотографіями з додатком, а не всією бібліотекою. Очікується, що Android 15 забезпечить додаткові покращення продуктивності та зручності використання Storage Access Framework.
Тенденція очевидна: Android рухається до моделі, де користувачі мають детальний контроль над тим, що кожна програма може бачити та змінювати. Хоча це створює певні труднощі для досвідчених користувачів і сторонніх завантажувачів, це значно покращує конфіденційність і безпеку для ширшої бази користувачів.
Робота з обмеженим сховищем без пошкодження даних програми
Об’ємне сховище є однією з найзначніших змін в архітектурі Android за останні роки. Обмеживши додатки власними пісочницями та вимагаючи явної згоди користувача для ширшого доступу, Google значно покращив конфіденційність платформи. Для користувачів, які завантажують додатки та керують файлами вручну, розуміння цих обмежень допоможе обійти час від часу проблеми. А для розробників адаптація до обмеженого сховища не є обов’язковою, а скоріше фундаментальною вимогою для сучасної розробки Android.
Встановлення файлів APK, розміщення OBB-файлів і просто щоденне керування сховищем — усе це відбувається в одній системі: обмеженому сховищі. Коли ви зрозумієте, як це працює, ви керуєте своїм пристроєм, а не залежите від додатків, які можуть зловживати широким доступом до файлів.