13 октября 2017

Где приложения хранят свои данные

При использовании приложений под Android иногда появляются вопросы: «А где приложение хранит созданные файлы?», «Можно ли до них достучаться?» и «Удалятся ли файлы при удалении приложения?» Давайте попробуем посмотреть, где же приложение может хранить свои данные и какие последствия это имеет для пользователя.

Внутреннее хранилище данных

Смысл следует непосредственно из названия. Внутреннее хранилище (internal storage) располагается всегда в памяти смартфона вне зависимости от того, есть ли возможность установки карты памяти (и тем более того, вставлена ли она). Эта область памяти является защищенной. Находится в системном разделе /data. По умолчанию все файлы, которые там располагаются, доступны только тому приложению, которое их создало. Разумеется, можно сделать файлы доступными для других приложений, но это надо делать специально. Если приложение не открывает файлы для доступа извне, достучаться к ним можно будет только получив root.

Назначение хранилища понятно: внутренние защищенные данные, к которым не должно быть нерегламентированного доступа. Проблемы (с точки зрения пользователя) могут быть в следующих случаях:

  • Неоправданно большой объем данных. Хочется вынести данные на карту памяти, чтобы сэкономить внутреннее пространство для других нужд, а приложение не дает.
  • По мнению пользователя, регламент доступа к данным должен быть другим, не таким, как предлагает приложение.

Пример: приложение «Лекции по истории России». В приложении хороший контент (и по содержанию, и по качеству звука). Но сохраняется он во внутреннюю память. На бюджетных устройствах, где этой памяти мало, становится затруднительным закачать заранее много лекций, а потом, отключившись от интернета, слушать их. Второй проблемой становится собственно регламент доступа к данным. Даже если ограничиться тематикой истории, у меня есть аудиофайлы, полученные из трех источников: данное приложение, подкасты и аудиоверсии роликов с youtube. Хочется взять и объединить навек в их земной юдоли под владычеством всесильным Властелина Мордора их все в единый плейлист, и слушать его одним аудиоплеером. Но на смартфоне без root это сделать невозможно.

Внешнее хранилище «личных» данных

С точки зрения разработчика, кроме внутреннего хранилища данных, для персональных целей приложения есть еще внешнее хранилище. Оно необязательно размещается на карте памяти. Это может быть и внутренняя память смартфона, но весь раздел с такими данными размещается в общем доступе. В корне раздела есть папка Android/data, а в ней — подпапки с именами пакетов приложений.

Плюсы такого подхода очевидны: данные доступны извне для целей пользователя. А если это карта памяти, то и емкость может быть ограничена только вашими финансами (в продаже уже можно найти карты памяти на 400 гигабайт). Минусы тоже понятны: в любой момент любое приложение (конечно, имеющее разрешение на доступ к «внешним» данным) может взять и стереть чужие файлы. Также файлы будут удалены системой при удалении приложения (или при очистке его данных).

Пример приложения: подкаст-менеджер BeyondPod (более-менее свежей версии, раньше файлы хранились по-другому). Пользователь имеет доступ к скачанным подкастам и может легко удалять их (например, в целях экономии места) или слушать их во внешнем плеере.

Общее внешнее хранилище

Располагается в корне «внешнего» раздела на одном уровне с папкой «Android». Предназначается для хранения данных, разделяемых между разными приложениями. Обычно в документации Google в качестве примера приводят картинки (фото с камеры — папка DCIM). Основная проблема данных файлов: они никогда не удаляются автоматически. Даже если приложение вы удалили.

Пример: мессенджер Telegram. После того, как вы удалили приложение, загруженные файлы никуда не исчезают. Они продолжают спокойно лежать на накопителе данных, занимая драгоценное место.

Как можно удалить файлы, не удаляя приложения

Здесь важно ввести еще одну классификацию файлов приложений. Она справедлива для внутреннего хранилища и для внешнего хранилища личных данных. Все данные делятся на два типа: собственно данные и кэш.

Данные (папка data) — некие файлы, которые, по логике Google, нужны для постоянной работы с ними. Если полностью их удалить, то приложение поведет себя точно так же, как если бы его переустановили (удалили и заново установили). Частичное удаление файлов может не привести ни к каким неприятным последствиям. Но важно понимать, какие конкретно данные вы удаляете (например, очевидно, что скачанные файлы подкастов можно удалять совершенно свободно — это не повлияет на работоспособность подкаст-менеджера).

Кэш — временные данные, которые сформированы в ходе работы приложения и нужны для ускорения этой работы. Например, данные, которые часто нужны в интернете, загружаются и в дальнейшем вместо загрузки открываются локально (разумеется, кэш может обновляться, чтобы не показывать устаревшие данные). Удалять кэш любого приложения можно совершенно спокойно, это штатная операция.

Очистка памяти и кэша вызывается из настроек приложения. Кнопка «Очистить кэш» очищает только кэш, а кнопка «Очистить данные» — и кэш, и данные приложения.

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

Читайте также

  • topaz9812

    >Эта область памяти является защищенной
    жалко что без рут нельзя ничего сделать. А то можно было все сервисы гугл удалить.
    Что касается приложений, то интересно если установить приложение на внешнюю флешку это чем нибудь поможет? Можно же потом достать флешку и с компьютера удалять что хочешь.
    На смартфонах конечно никакого контроля над системой нет по сравнению с открытой системой компьютеров

  • ArtemV

    Андрей, спасибо за статью! Хоть и большинство вопросов давно изучены методом научного тыка, но прочитать всегда интересно)) А как будущие наметки — хотелось бы увидеть обзор программ — брандмауэров для обрезания доступа приложениям к интернет. Как с рутом, так и без.

  • Vadim Voronkov

    Вы за что так с приложениями хотите поступать? 🙂

  • Vadim Voronkov

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

  • Mystique Man

    Одно слово: Adguard. Он и фаервол и отличный истребитель рекламы.

  • topaz9812

    Да, отключаются. В настройках где удаление приложений нужно нажать кнопку выключить и тогда удалятся установленные обновления программы и она выключится. Затем нужно нажать кнопку остановить. И приложения будут отключены. Даже после перезагрузки телефона они остаются отключенными. Помогает увеличить быстродействие на слабых телефонах к тому же.

  • Mystique Man

    Не на всех. Салями штатно не даёт отключить даже гугл софт. Нужно извращаться с activity launcherом, чтобы кнопка отключить стала активной

  • topaz9812

    Ясно. У меня например кнопка «остановить» не активна пока не нажмешь выключить. А если нажимаешь выключить тогда она сносит обновления и кнопка остановить становится также активно. Может если снести обновления сервиса это чем то поможет

  • topaz9812

    фаерволы без root все работают через VPN кажется. В EMUI средствами системы можно классно управлять доступом в интернет для каждого приложения

  • Сервисы — вряд ли. Приложения — зависит от оболочки.

  • >> Что касается приложений, то интересно если установить приложение на внешнюю флешку это чем нибудь поможет?

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

    >> На смартфонах конечно никакого контроля над системой нет по сравнению с открытой системой компьютеров

    Почему? Получайте root и перед вами будет типичный Linux. Как большой.

  • jockjoint

    Что б некоторые не ломились куда не следует. )

  • Meowth

    У меня раньше был телефон, где мне оставалось 2,5 Гб внутренней памяти. Ничего не влезало, стандартный перенос на карту не помогал.
    Получил root, перенёс половину с помощью link2sd на карту. Получилась полная фигня, приложения стали периодически пропадать, сбер работать перестал, пришлось сносить его и перепрошиваться на сток.
    Итог: если телефон г-но, конфету из него не сделать.

  • topaz9812

    Если линукс хорошо знать может быть. Все таки в десктопном линуксе уже все что нужно установлено. Я не очень опытный линукс пользователь. Если я линукс то не очень знаю то его модифицированная версия в смартфонах дополнительно затрудняет с ней работу. Я бы предпочел честно говоря на ubuntu телефон. Но сейчас уже не продают. В нормальном линуксе я бы смог что нибудь делать. Но только не в этом смартфонном.
    Может реально мне вместо покупки очередного ненужного флагмана себе на линуксе купить с рук телефон ))) Потому что в этом андроиде одни ограничения, не могу я с ним работать. Зря гугл сделал андроид. Лучше бы обычный линукс ставил всем было бы хорошо и линуксоиды были бы счастливы

  • goodhoopoe

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

  • На уровне ОС ничего такого нет. Есть приложения, которые уверяют, будто могут так делать (или находить то, что осталось от приложений, удаленных штатным образом). Например, SD Maid — https://play.google.com/store/apps/details?id=eu.thedarken.sdm

    Но не очень понятно, как это работает. Возможно, там просто есть хорошая база приложений и папок, которые они создают во внешнем хранилище.

  • David

    а чем бы спас бубунтафон, «линукс» это такое растяжимое понятие каждый его готовит по-своему, тут в пределах одой ветки дистрибутива иногда АДЪ и ИЗРАИЛЪ наступает от версии к версии. А линуксоиды счастливы не будут никогда 🙂

  • topaz9812

    Можно было бы ставить deb пакеты, пользоваться стандартными линукс приложениями, из исходников компилить что нибудь.
    Впрочем для андроида я раньше с сайта треш качал apk пакеты которые можно устанавливать в системе без учётной записи гугл. Даже какие то простые игры там находил. Так что андроидом тоже можно нормально пользоваться если выпилить приложения гугл и ставить apk пакеты. Там вирусы правда бывают, но уж лучше они чем гугл ))

  • ikki906

    Не подскажите где прочитать про остальные системные разделы и для чего они нужны?

  • topaz9812

    В книге про архитектуру линукс. Там разделы вроде одинаковые все

  • Doc Mezensev

    Так…стало немного проясняться.
    Если не затруднит, то что чистит такая популярная программа как Clener (или как там она называется)…я её удалил, т.к. непонятно что она чистит, так ещё и клавиатура штатная на 4.4 глючила…
    А в одном сервисе сказали, не устанавливайте оптимизаторов и чистильщиков.
    И что значит невозможно удалить данные созданные программой под себя в разрезе всех этих чистильщиков — они могут принудительно как в виндусе подчистить за программой или нет?

  • ikki906

    А в более компактной форме?

  • >> И что значит невозможно удалить данные созданные программой под себя в разрезе всех этих чистильщиков — они могут принудительно как в виндусе подчистить за программой или нет?

    Написал чуть ранее в другом комментарии: http://disq.us/p/1mymju5

  • Doc Mezensev

    ага увидел.

  • David

    нет нельзя было бы, я же говорю линукс все готовят как хотят и какую пакетную базу и менеджер захочет использовать создатель такую и придется кушать, а он может и вобще отказаться от прекомпиленных пакетов и потом это arm, то есть даже если нам сделали удобно и дали пакетный менеджер и систему пакетов от дебиан и вам что то понадобилось то…это arm нельзя просто скачать откудато deb файл и написать что то dpkg -i blahblah надо еще под свою платформу найти, да еще и под разрядность 🙂 и скорее всего придется заниматься кросс-компиляцией для arm танцевать с бубном вокруг toolcain и думать ой а это arm v7 или v8 ….
    хотя нет я увлекся, если сделают магазин приложений, то пользователю не придется бубуен покупать, но тогда опять — что дали то и едим 🙂

  • Doc Mezensev

    Как-то маловато требует разрешений от андроида…только к папке фото/видео….ничего?
    Тот же CClener…8 разрешений просит

  • topaz9812

    Всю книгу читать не обязательно, достаточно прочитать главу посвященную разделам.
    Есть много статей в интернете. Если сделать запрос разделы linux то наверняка их выдаст. По-моему есть собственная википедия, база знаний у ubuntu и других дистрибутивов, там могут быть такие статью.

  • Lecron

    Жестокие кары на голову тех разрабов, кто не по делу использует Общее внешнее хранилище.

    Флешка была загажена до невозможности. Есть же Data и достаточно стандартная папка Download, но нет, все норовят писать в корень. Да еще в нескрытые папки без точки вначале. Пришлось удалив папку, создавать файл с аналогичным папке именем. Они хоть в файлменеджерах и при выборе папки, показываются в конце списка и не мозолят глаза среди персональных Documents, Movies и прочих. Что интересно, все приложения без доступа к корню, продолжили нормально работать перенеся данные в Дату. Так нафига бы так сразу не сделать?

  • topaz9812

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

  • Даниил Баздырев

    Так в Android уже встроена возможность запрещать конкретным приложениям выходить в сеть

  • ArtemV

    Без рута? Где?

  • David

    ну вам видней, я не вижу разницы
    установка левого прекомпиленного пакеты скачанного откуда то, и установка левого апк … в чем разница великая 🙂
    а по поводу собрать, не на устройстве же вы его собирать будете, иначе вам тянуть надо будет библиотеки разработки, устройство не резиновое и это хлам в системе.

  • topaz9812

    Не во всех версиях кажется. У меня в приложениях только фоновый режим можно для каждого приложения отключить. Если зайти в приложения и нажать на сомом приложении а затем передача данных. Но на других андроида можно было и wi fi отключать

  • Даниил Баздырев

    В разделе передачи данных. Смотришь, сколько какое приложение ест трафика, нажимаешь на него и можешь запретить ему передачу данных в фоновом режиме.

    На MIUI и EMIUI тоже самое настраивается через диспетчер телефона

  • topaz9812

    В EMUI можно и wi fi и сотовую отключать, очень удобно сделано

  • В Android 5, где не было рантайм-разрешений, вообще требовалось ровно одно: WRITE_EXTERNAL_STORAGE. Начиная с 6, надо еще парочку запрашивать в рантайм. Если какое-то приложение просит больше — это большой вопрос, для чего.

  • anonymousses_v5

    Так любая операция, очевидно доступная и понятная людям со знанием устройства системы не обязательно будет прозрачно работать у обычного пользователя. Это про ваш опыт с link2SD, конечно. Ну и здорово было бы читать про последствия того, что делаешь — тот же Сбер честно говорит, что с рутом работать будет очень ограниченно. А итог да, в чем-то верен…

  • Кстати, а ведь был же уже Debian для ARM. Назывался Maemo. Готовых пакетов мало было, но сама система — мечта линуксоида 🙂

  • Lecron

    Не совсем. Репозиторий Линукса не ограничивает альтернативные способы. Сколько на Хабре вываливается кар, на голову советчиков make install.

  • Meowth

    Я был готов пожертвовать сбером ради расширения памяти для всех остальных программ, но не вышло.

  • Alexandr.Noskov

    Андрей, хотелось бы почитать немножко про варез, с практическими советами)))

  • Саша, ты же понимаешь, что я как человек, получающий деньги за разработку ПО, не буду такое писать 🙂

  • Alexandr.Noskov

    Понимаю, но еще Лаврентий говорил, что попытка не пытка)))

  • Lecron

    попробуйте apps2sd. Поставил полгода назад и забыл.

  • anonymousses_v5

    Вообще странно. Конечно, полная корректная работа Link2SD зависит от аккуратности подготовки и качества карты, но при соблюдении условий проблем не бывает обычно. Может телефон карту терял по-тихому?

  • Zliuka Z

    Хорошая статья, спасибо. Помогла простыми слрвпми объяснить супруге «куда делись мои файлы и почему я не могу их найти на своем телефоне, а у тебя все файлы везде видно». Порадовал ироничный скрин с файлменеджером TWRP-рекавери — так с файлами работать тоже, конечно, можно, но в руках индейца метод… э-м-м… неоднозначный.;-)

  • ArtemV

    О! Спасибо огромное. В приложении «безопасность» на Miui все оказалось. Я в него и не лазил никогда:)
    Правда, тому же Chrome убить намертво трафик не получается, все равно работает (хотя и вылазит предупреждение, что ему трафик отрезали). А вот гуглокартам лавочку прикрывает намертво.
    А то я все через настройки/разрешения приложений пытался, думал, что там должно быть.

  • ArtemV

    На мяу также 🙂

  • >> Порадовал ироничный скрин с файлменеджером TWRP-рекавери — так с файлами работать тоже, конечно, можно, но в руках индейца метод… э-м-м… неоднозначный.

    Это просто с боевого телефона скриншот. Ставить на нем обычный рут не хотелось из-за Сбербанк Онлайн 🙂

  • David

    Debian для arm и сейчас есть, и бубунта там же но пакетов действительно мало, точнее все основные есть, но шаг вправо шаг влево придется компилить самому. Тот же nginx в весьма своеобразном варианте, и если в тоже самое время скачать исходники и переподключить модули у меня получается для взрослой системы, то арм версия спотыкается на некоторых моделях у меня.

  • David

    Ну так я об этом и написал, но для пользователя нужен будет магазин приложений ему не интересен просто пакетный менеджер, но тогда мы приходим к тому же самому в чем отличие от скачать Deb/rpm с какого то левого ресурса и поставить и в чем отличие от скачать apt и поставить. А config/make/make install для обычного пользователя порвут шаблон, и не только шаблон тащить *-dev пакеты в живую систему пользовательскую ставить там gcc* это просто мусор для пользователя и лучи добра для неискушенного пользователя.

  • Андей, 2 раза спасибо. За статью и за «Лекции…» Установил матушке. она любит такое.

  • Meowth

    Не знаю, специально вывел ярлыки перенесённых программ на рабочий стол, после перезагрузки иногда по 1 или 2 пропадало. Самое интересное поведение было у «Мой МТС». После перезагрузки чёрно-белое яйцо и приложение не найдено.

  • Meowth

    Спасибо. Правда надеюсь не пригодится. Собираю уже на сяоми с 32гб.

  • Sevilho

    > Внутреннее хранилище (internal storage)
    какое неудачное название! И в чем его «внутренность»? По здравому смыслу этим термином хорошо бы назвать внутреннюю память (т.е. внутри корпуса не считая слота расширения). Но нет, оказывается на внутренней памяти аппарата еще может быть Внешнее хранилище! Дурдом. Ну назвали бы типа хранилищем защищенных папок

  • aesth

    Помнится, какое-то время назад в папках вайбера и вотсапа автоматически сохранялись просматриваемые фото абонентов. Не подскажете, где их можно найти сейчас?

  • Wholeman

    Получайте root и перед вами будет типичный Linux. Как большой.

    Столлман негодует. Чтоб как большой, рута мало — ещё и GNU нужен.
    Рута, кстати, в большинстве случаев не дают — приходится кряки искать. А это уже вопрос доверия крякоделам.

  • ol0lo

    статья уровня «скрипт кидди»…
    даю подсказку — для вскрытия *.apk файла, (которыми, как мы знаем распространяются приложения на андроид) достаточно открыть его любым архиватором — тип файла, обыкновенный *.zip, и взять понравившийся вам контент.

    сейчас налетят школьники с вопросом о медиастримевк-оффлайн-музыкеetc.
    им я отвечу сразу — а что вам мешает просто скачивать (хоть на ББ), не пользуясь специализированными приложениями, для скачивания через обыкновенный http://

    https://uploads.disquscdn.com/images/066402c1c2014453b15397f4614e091682b9c87f56e4d3cd4f9406e3bf6a2d6c.png

    потенциальная аудитория статьи — школьники из 4б

  • Открою вам большой секрет: статья вообще не о содержимом apk. Она совсем о другом.

  • romanlt

    Как известно, частью идеологии данного сайта является идея справедливой оплаты за контент.
    Таким образом, если и допустимы практические советы про варез, то только о том, как его не использовать. Максимум — ссылка на форум 4pda 🙂

  • romanlt

    Если пишем «/data», то пишем и «/Android/data»
    Файловая система юниха не прощает ошибок в слешах и точках 🙂

  • Dimon Straw

    Они и сейчас там же живут:

    /WhatsApp/Media/WhatsApp Images/ (или после пробела Video, Audio, Documents, Voice Notes, Profile Photos)

    /viber/media/Viber Images/

  • aesth

    Ага, только в папке «Prifile Photos» — шаром покати, а у вайбера аналогичная папка и вовсе пропала и кроме Viber Images там ничего не осталось

    Если у вас все по прежнему, могу предположить, что вы давно не обновляли эти мессенджеры

  • Sergey GK

    О, у нас тут кулхацкер, который опять не осилил текста, но попытался поумничать 🙂
    Мальчик, иногда, когда пытаешься показатбь, какие все вокруг тупые, неплохо бы глянуть в зеркало.

  • kip2

    что это не прощает? попробуй зайти в папку /var//lib или //var/lib и будешь приятно удивлён

  • kip2

    есть выход в отказе от сбербанки

  • ACP

    Это самый разумный вариант, но почему-то люди упорно идут в это учреждение

  • ol0lo

    у этого «мальчика» уже м&дя седые….
    перечитайте мой предыдущий пост еще раз, и попробуйте его осознать.

  • ol0lo

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

  • Конечно, не совпадение. Автор будет подробно писать и об APK. Но в этой статье речь именно о созданных в ходе работы приложения файлах, а вовсе не о предустановленных в составе APK.

  • Sergey GK

    Зачем «пробовать осознавать» то, что НИКАКОГО отношения к статье не имеет, а представляет собой просто кусок информационного мусора?
    Наличие чего-то там где-то седого (сделаем вид, что я проникся «тонкостью шутки») не делает из тебя девочки, и вообще речь но о возрасте, а о вечном состоянии. Как «школота».
    Ведь причём вообще тут apk, если речь совершенно определённо о другом? Абсолютно ни при чём, но ведь так хочется показать себя «знающим» , что никак не удержаться!
    Уровень скрипт-кидди — это как раз про твой комментарий.

    «у этого «мальчика» уже м&дя седые…. перечитайте мой пост еще раз, и