Разбиране на Android Scoped Storage: Какво се промени и защо има значение

A smartphone beside small storage drawers with one locked, illustrating Android scoped storage

Ако някога сте опитвали да управлявате файлове на устройство с 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. Ето как работи новият модел:

Съхранение, специфично за приложението

Всяко приложение има специална директория, до която само то има достъп. Когато приложението бъде деинсталирано, тази директория се почиства автоматично. Никое друго приложение не може да чете или пише в това местоположение без root достъп. Това елиминира проблема с осиротелите файлове и предотвратява проследяването на данни от различни приложения.

Медийни колекции

За споделени медии като снимки, видеоклипове и аудио файлове 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, ето някои практически препоръки:

  1. Използвайте модерен файлов мениджър, който поддържа MANAGE_EXTERNAL_STORAGE. Приложения като Solid Explorer, MiXplorer и Total Commander са се адаптирали добре към съхранение с обхват.
  2. Внимателно давайте разрешения. Когато файлов мениджър поиска „Достъп до всички файлове“, разберете, че това е разрешението MANAGE_EXTERNAL_STORAGE и е необходимо за пълна функционалност.
  3. Използвайте ADB за упорити файлови операции. Ако не можете да поставите OBB файлове чрез файлов мениджър, свързването на вашето устройство към компютър и използването на adb push заобикаля изцяло ограниченията за обхват на съхранение.
  4. Преобразувайте сложни пакети в по-прости формати. Ако XAPK файл ви създава проблеми на по-ново устройство, извличането само на APK компонента може да е пътят с най-малко съпротивление.
  5. Поддържайте вашите приложения за инсталиране актуализирани. По-старите версии на инсталаторите на XAPK може да не обработват правилно хранилището с обхват.

Бъдещето на Android Storage

Google продължава да усъвършенства модела за съхранение с всяка версия на Android. Android 14 въведе частичен достъп до медиите, позволявайки на потребителите да споделят конкретни снимки с приложение, а не с цялата си библиотека. Очаква се Android 15 да внесе допълнителни подобрения в производителността и използваемостта на Storage Access Framework.

Тенденцията е ясна: Android се движи към модел, при който потребителите имат прецизен контрол върху това, което всяко приложение може да вижда и променя. Въпреки че това създава известно напрежение за опитните потребители и страничните потребители, то значително подобрява поверителността и сигурността за по-широката потребителска база.

Работа с ограничено хранилище без разбиване на данните на приложението

Обхватното съхранение представлява една от най-значимите промени в архитектурата на Android през последните години. Чрез ограничаване на приложенията до техните собствени пясъчни кутии и изискване на изрично съгласие на потребителя за по-широк достъп, Google драматично подобри позицията на поверителност на платформата. За потребители, които зареждат приложения отстрани и управляват файлове ръчно, разбирането на тези ограничения ви помага да заобиколите случайните точки на триене. А за разработчиците, адаптирането към хранилище с обхват не е задължително, а по-скоро основно изискване за съвременната разработка на Android.

Инсталирането на APK файлове, поставянето на OBB файлове и просто ежедневното управление на съхранението се извършва в една и съща система: съхранение с обхват. След като разберете как работи, вие сте този, който контролира вашето устройство, вместо да бъдете оставени на милостта на приложения, които могат да злоупотребят с широк достъп до файлове.

Проектиран и документиран от Mst Shaefale Водещ разработчик и архитект на пакети за Android • Проверен на Android 12–15

Mst Shaefale поддържа инструментите за подписване на XAPK/APKS от страна на клиента, парсер на бинарен манифест и APK v1+v2 в xapktoapk.com. Забележите остаряла команда или промяна на операционната система? Изпратете редакционна бележка.