13 октября 2017
Где приложения хранят свои данные
Андрей Подкин
При использовании приложений под Android иногда появляются вопросы: «А где приложение хранит созданные файлы?», «Можно ли до них достучаться?» и «Удалятся ли файлы при удалении приложения?» Давайте попробуем посмотреть, где же приложение может хранить свои данные и какие последствия это имеет для пользователя.
Внутреннее хранилище данных
Смысл следует непосредственно из названия. Внутреннее хранилище (internal storage) располагается всегда в памяти смартфона вне зависимости от того, есть ли возможность установки карты памяти (и тем более того, вставлена ли она). Эта область памяти является защищенной. Находится в системном разделе /data. По умолчанию все файлы, которые там располагаются, доступны только тому приложению, которое их создало. Разумеется, можно сделать файлы доступными для других приложений, но это надо делать специально. Если приложение не открывает файлы для доступа извне, достучаться к ним можно будет только получив root.
Назначение хранилища понятно: внутренние защищенные данные, к которым не должно быть нерегламентированного доступа. Проблемы (с точки зрения пользователя) могут быть в следующих случаях:
- Неоправданно большой объем данных. Хочется вынести данные на карту памяти, чтобы сэкономить внутреннее пространство для других нужд, а приложение не дает.
- По мнению пользователя, регламент доступа к данным должен быть другим, не таким, как предлагает приложение.
Пример: приложение «Лекции по истории России». В приложении хороший контент (и по содержанию, и по качеству звука). Но сохраняется он во внутреннюю память. На бюджетных устройствах, где этой памяти мало, становится затруднительным закачать заранее много лекций, а потом, отключившись от интернета, слушать их. Второй проблемой становится собственно регламент доступа к данным. Даже если ограничиться тематикой истории, у меня есть аудиофайлы, полученные из трех источников: данное приложение, подкасты и аудиоверсии роликов с youtube. Хочется взять и объединить навек в их земной юдоли под владычеством всесильным Властелина Мордора их все в единый плейлист, и слушать его одним аудиоплеером. Но на смартфоне без root это сделать невозможно.
Внешнее хранилище «личных» данных
С точки зрения разработчика, кроме внутреннего хранилища данных, для персональных целей приложения есть еще внешнее хранилище. Оно необязательно размещается на карте памяти. Это может быть и внутренняя память смартфона, но весь раздел с такими данными размещается в общем доступе. В корне раздела есть папка Android/data, а в ней — подпапки с именами пакетов приложений.
Плюсы такого подхода очевидны: данные доступны извне для целей пользователя. А если это карта памяти, то и емкость может быть ограничена только вашими финансами (в продаже уже можно найти карты памяти на 400 гигабайт). Минусы тоже понятны: в любой момент любое приложение (конечно, имеющее разрешение на доступ к «внешним» данным) может взять и стереть чужие файлы. Также файлы будут удалены системой при удалении приложения (или при очистке его данных).
Пример приложения: подкаст-менеджер BeyondPod (более-менее свежей версии, раньше файлы хранились по-другому). Пользователь имеет доступ к скачанным подкастам и может легко удалять их (например, в целях экономии места) или слушать их во внешнем плеере.
Общее внешнее хранилище
Располагается в корне «внешнего» раздела на одном уровне с папкой «Android». Предназначается для хранения данных, разделяемых между разными приложениями. Обычно в документации Google в качестве примера приводят картинки (фото с камеры — папка DCIM). Основная проблема данных файлов: они никогда не удаляются автоматически. Даже если приложение вы удалили.
Пример: мессенджер Telegram. После того, как вы удалили приложение, загруженные файлы никуда не исчезают. Они продолжают спокойно лежать на накопителе данных, занимая драгоценное место.
Как можно удалить файлы, не удаляя приложения
Здесь важно ввести еще одну классификацию файлов приложений. Она справедлива для внутреннего хранилища и для внешнего хранилища личных данных. Все данные делятся на два типа: собственно данные и кэш.
Данные (папка data) — некие файлы, которые, по логике Google, нужны для постоянной работы с ними. Если полностью их удалить, то приложение поведет себя точно так же, как если бы его переустановили (удалили и заново установили). Частичное удаление файлов может не привести ни к каким неприятным последствиям. Но важно понимать, какие конкретно данные вы удаляете (например, очевидно, что скачанные файлы подкастов можно удалять совершенно свободно — это не повлияет на работоспособность подкаст-менеджера).
Кэш — временные данные, которые сформированы в ходе работы приложения и нужны для ускорения этой работы. Например, данные, которые часто нужны в интернете, загружаются и в дальнейшем вместо загрузки открываются локально (разумеется, кэш может обновляться, чтобы не показывать устаревшие данные). Удалять кэш любого приложения можно совершенно спокойно, это штатная операция.
Очистка памяти и кэша вызывается из настроек приложения. Кнопка «Очистить кэш» очищает только кэш, а кнопка «Очистить данные» — и кэш, и данные приложения.
Удаление файлов приложения из общего внешнего хранилища выполняется только вручную. Более того, даже оценка того, от какого приложения эти файлы остались, тоже выполняется вручную.
>Эта область памяти является защищенной
жалко что без рут нельзя ничего сделать. А то можно было все сервисы гугл удалить.
Что касается приложений, то интересно если установить приложение на внешнюю флешку это чем нибудь поможет? Можно же потом достать флешку и с компьютера удалять что хочешь.
На смартфонах конечно никакого контроля над системой нет по сравнению с открытой системой компьютеров
А гугловые сервисы без рута не морозятся? А то ни одного свежего нерутванного девайса под руками сейчас нет, чтобы проверить.
Да, отключаются. В настройках где удаление приложений нужно нажать кнопку выключить и тогда удалятся установленные обновления программы и она выключится. Затем нужно нажать кнопку остановить. И приложения будут отключены. Даже после перезагрузки телефона они остаются отключенными. Помогает увеличить быстродействие на слабых телефонах к тому же.
Сервисы — вряд ли. Приложения — зависит от оболочки.
>> Что касается приложений, то интересно если установить приложение на внешнюю флешку это чем нибудь поможет?
Данные, создаваемые в ходе работы, все равно будут храниться там, где запросит само приложение.
>> На смартфонах конечно никакого контроля над системой нет по сравнению с открытой системой компьютеров
Почему? Получайте root и перед вами будет типичный Linux. Как большой.
Если линукс хорошо знать может быть. Все таки в десктопном линуксе уже все что нужно установлено. Я не очень опытный линукс пользователь. Если я линукс то не очень знаю то его модифицированная версия в смартфонах дополнительно затрудняет с ней работу. Я бы предпочел честно говоря на ubuntu телефон. Но сейчас уже не продают. В нормальном линуксе я бы смог что нибудь делать. Но только не в этом смартфонном.
Может реально мне вместо покупки очередного ненужного флагмана себе на линуксе купить с рук телефон ))) Потому что в этом андроиде одни ограничения, не могу я с ним работать. Зря гугл сделал андроид. Лучше бы обычный линукс ставил всем было бы хорошо и линуксоиды были бы счастливы
а чем бы спас бубунтафон, «линукс» это такое растяжимое понятие каждый его готовит по-своему, тут в пределах одой ветки дистрибутива иногда АДЪ и ИЗРАИЛЪ наступает от версии к версии. А линуксоиды счастливы не будут никогда 🙂
Можно было бы ставить deb пакеты, пользоваться стандартными линукс приложениями, из исходников компилить что нибудь.
Впрочем для андроида я раньше с сайта треш качал apk пакеты которые можно устанавливать в системе без учётной записи гугл. Даже какие то простые игры там находил. Так что андроидом тоже можно нормально пользоваться если выпилить приложения гугл и ставить apk пакеты. Там вирусы правда бывают, но уж лучше они чем гугл ))
нет нельзя было бы, я же говорю линукс все готовят как хотят и какую пакетную базу и менеджер захочет использовать создатель такую и придется кушать, а он может и вобще отказаться от прекомпиленных пакетов и потом это arm, то есть даже если нам сделали удобно и дали пакетный менеджер и систему пакетов от дебиан и вам что то понадобилось то…это arm нельзя просто скачать откудато deb файл и написать что то dpkg -i blahblah надо еще под свою платформу найти, да еще и под разрядность 🙂 и скорее всего придется заниматься кросс-компиляцией для arm танцевать с бубном вокруг toolcain и думать ой а это arm v7 или v8 ….
хотя нет я увлекся, если сделают магазин приложений, то пользователю не придется бубуен покупать, но тогда опять — что дали то и едим 🙂
Если система популярна кто нибудь под арм скомпилирует. В крайнем случае самому можно собрать. Устанавливая из магазина приложений пакеты из кеша можно достать. Я например когда в линуксе устанавливаю программы то в настройках пишу не удалять rpm пакет после установки и из папки потом на диск их записываю ) так что все равно было бы лучше чем с андроид
ну вам видней, я не вижу разницы
установка левого прекомпиленного пакеты скачанного откуда то, и установка левого апк … в чем разница великая 🙂
а по поводу собрать, не на устройстве же вы его собирать будете, иначе вам тянуть надо будет библиотеки разработки, устройство не резиновое и это хлам в системе.
Кстати, а ведь был же уже Debian для ARM. Назывался Maemo. Готовых пакетов мало было, но сама система — мечта линуксоида 🙂
Debian для arm и сейчас есть, и бубунта там же но пакетов действительно мало, точнее все основные есть, но шаг вправо шаг влево придется компилить самому. Тот же nginx в весьма своеобразном варианте, и если в тоже самое время скачать исходники и переподключить модули у меня получается для взрослой системы, то арм версия спотыкается на некоторых моделях у меня.
Не совсем. Репозиторий Линукса не ограничивает альтернативные способы. Сколько на Хабре вываливается кар, на голову советчиков make install.
Ну так я об этом и написал, но для пользователя нужен будет магазин приложений ему не интересен просто пакетный менеджер, но тогда мы приходим к тому же самому в чем отличие от скачать Deb/rpm с какого то левого ресурса и поставить и в чем отличие от скачать apt и поставить. А config/make/make install для обычного пользователя порвут шаблон, и не только шаблон тащить *-dev пакеты в живую систему пользовательскую ставить там gcc* это просто мусор для пользователя и лучи добра для неискушенного пользователя.
Столлман негодует. Чтоб как большой, рута мало — ещё и GNU нужен.
Рута, кстати, в большинстве случаев не дают — приходится кряки искать. А это уже вопрос доверия крякоделам.
Андрей, спасибо за статью! Хоть и большинство вопросов давно изучены методом научного тыка, но прочитать всегда интересно)) А как будущие наметки — хотелось бы увидеть обзор программ — брандмауэров для обрезания доступа приложениям к интернет. Как с рутом, так и без.
Вы за что так с приложениями хотите поступать? 🙂
Что б некоторые не ломились куда не следует. )
фаерволы без root все работают через VPN кажется. В EMUI средствами системы можно классно управлять доступом в интернет для каждого приложения
Так в Android уже встроена возможность запрещать конкретным приложениям выходить в сеть
Без рута? Где?
В разделе передачи данных. Смотришь, сколько какое приложение ест трафика, нажимаешь на него и можешь запретить ему передачу данных в фоновом режиме.
На MIUI и EMIUI тоже самое настраивается через диспетчер телефона
В EMUI можно и wi fi и сотовую отключать, очень удобно сделано
На мяу также 🙂
О! Спасибо огромное. В приложении «безопасность» на Miui все оказалось. Я в него и не лазил никогда:)
Правда, тому же Chrome убить намертво трафик не получается, все равно работает (хотя и вылазит предупреждение, что ему трафик отрезали). А вот гуглокартам лавочку прикрывает намертво.
А то я все через настройки/разрешения приложений пытался, думал, что там должно быть.
Не во всех версиях кажется. У меня в приложениях только фоновый режим можно для каждого приложения отключить. Если зайти в приложения и нажать на сомом приложении а затем передача данных. Но на других андроида можно было и wi fi отключать
У меня раньше был телефон, где мне оставалось 2,5 Гб внутренней памяти. Ничего не влезало, стандартный перенос на карту не помогал.
Получил root, перенёс половину с помощью link2sd на карту. Получилась полная фигня, приложения стали периодически пропадать, сбер работать перестал, пришлось сносить его и перепрошиваться на сток.
Итог: если телефон г-но, конфету из него не сделать.
Так любая операция, очевидно доступная и понятная людям со знанием устройства системы не обязательно будет прозрачно работать у обычного пользователя. Это про ваш опыт с link2SD, конечно. Ну и здорово было бы читать про последствия того, что делаешь — тот же Сбер честно говорит, что с рутом работать будет очень ограниченно. А итог да, в чем-то верен…
Я был готов пожертвовать сбером ради расширения памяти для всех остальных программ, но не вышло.
попробуйте apps2sd. Поставил полгода назад и забыл.
Спасибо. Правда надеюсь не пригодится. Собираю уже на сяоми с 32гб.
Вообще странно. Конечно, полная корректная работа Link2SD зависит от аккуратности подготовки и качества карты, но при соблюдении условий проблем не бывает обычно. Может телефон карту терял по-тихому?
Не знаю, специально вывел ярлыки перенесённых программ на рабочий стол, после перезагрузки иногда по 1 или 2 пропадало. Самое интересное поведение было у «Мой МТС». После перезагрузки чёрно-белое яйцо и приложение не найдено.
Андрей, отличная статья.
Есть вопрос по внешнему хранилищу.
Доступен ли механизм, при котором при удалении приложения удаляются данные из внешнего хранилища, тем самым уменьшая захламлённость?
На уровне ОС ничего такого нет. Есть приложения, которые уверяют, будто могут так делать (или находить то, что осталось от приложений, удаленных штатным образом). Например, SD Maid — https://play.google.com/store/apps/details?id=eu.thedarken.sdm
Но не очень понятно, как это работает. Возможно, там просто есть хорошая база приложений и папок, которые они создают во внешнем хранилище.
Как-то маловато требует разрешений от андроида…только к папке фото/видео….ничего?
Тот же CClener…8 разрешений просит
В Android 5, где не было рантайм-разрешений, вообще требовалось ровно одно: WRITE_EXTERNAL_STORAGE. Начиная с 6, надо еще парочку запрашивать в рантайм. Если какое-то приложение просит больше — это большой вопрос, для чего.
Не подскажите где прочитать про остальные системные разделы и для чего они нужны?
В книге про архитектуру линукс. Там разделы вроде одинаковые все
А в более компактной форме?
Всю книгу читать не обязательно, достаточно прочитать главу посвященную разделам.
Есть много статей в интернете. Если сделать запрос разделы linux то наверняка их выдаст. По-моему есть собственная википедия, база знаний у ubuntu и других дистрибутивов, там могут быть такие статью.
Так…стало немного проясняться.
Если не затруднит, то что чистит такая популярная программа как Clener (или как там она называется)…я её удалил, т.к. непонятно что она чистит, так ещё и клавиатура штатная на 4.4 глючила…
А в одном сервисе сказали, не устанавливайте оптимизаторов и чистильщиков.
И что значит невозможно удалить данные созданные программой под себя в разрезе всех этих чистильщиков — они могут принудительно как в виндусе подчистить за программой или нет?
>> И что значит невозможно удалить данные созданные программой под себя в разрезе всех этих чистильщиков — они могут принудительно как в виндусе подчистить за программой или нет?
Написал чуть ранее в другом комментарии: https://disq.us/p/1mymju5
ага увидел.
Жестокие кары на голову тех разрабов, кто не по делу использует Общее внешнее хранилище.
Флешка была загажена до невозможности. Есть же Data и достаточно стандартная папка Download, но нет, все норовят писать в корень. Да еще в нескрытые папки без точки вначале. Пришлось удалив папку, создавать файл с аналогичным папке именем. Они хоть в файлменеджерах и при выборе папки, показываются в конце списка и не мозолят глаза среди персональных Documents, Movies и прочих. Что интересно, все приложения без доступа к корню, продолжили нормально работать перенеся данные в Дату. Так нафига бы так сразу не сделать?
Андрей, хотелось бы почитать немножко про варез, с практическими советами)))
Саша, ты же понимаешь, что я как человек, получающий деньги за разработку ПО, не буду такое писать 🙂
Понимаю, но еще Лаврентий говорил, что попытка не пытка)))
Как известно, частью идеологии данного сайта является идея справедливой оплаты за контент.
Таким образом, если и допустимы практические советы про варез, то только о том, как его не использовать. Максимум — ссылка на форум 4pda 🙂
Хорошая статья, спасибо. Помогла простыми слрвпми объяснить супруге «куда делись мои файлы и почему я не могу их найти на своем телефоне, а у тебя все файлы везде видно». Порадовал ироничный скрин с файлменеджером TWRP-рекавери — так с файлами работать тоже, конечно, можно, но в руках индейца метод… э-м-м… неоднозначный.;-)
>> Порадовал ироничный скрин с файлменеджером TWRP-рекавери — так с файлами работать тоже, конечно, можно, но в руках индейца метод… э-м-м… неоднозначный.
Это просто с боевого телефона скриншот. Ставить на нем обычный рут не хотелось из-за Сбербанк Онлайн 🙂
Андей, 2 раза спасибо. За статью и за «Лекции…» Установил матушке. она любит такое.
> Внутреннее хранилище (internal storage)
какое неудачное название! И в чем его «внутренность»? По здравому смыслу этим термином хорошо бы назвать внутреннюю память (т.е. внутри корпуса не считая слота расширения). Но нет, оказывается на внутренней памяти аппарата еще может быть Внешнее хранилище! Дурдом. Ну назвали бы типа хранилищем защищенных папок
Помнится, какое-то время назад в папках вайбера и вотсапа автоматически сохранялись просматриваемые фото абонентов. Не подскажете, где их можно найти сейчас?
Они и сейчас там же живут:
/WhatsApp/Media/WhatsApp Images/ (или после пробела Video, Audio, Documents, Voice Notes, Profile Photos)
/viber/media/Viber Images/
Ага, только в папке «Prifile Photos» — шаром покати, а у вайбера аналогичная папка и вовсе пропала и кроме Viber Images там ничего не осталось
Если у вас все по прежнему, могу предположить, что вы давно не обновляли эти мессенджеры
статья уровня «скрипт кидди»…
даю подсказку — для вскрытия *.apk файла, (которыми, как мы знаем распространяются приложения на андроид) достаточно открыть его любым архиватором — тип файла, обыкновенный *.zip, и взять понравившийся вам контент.
сейчас налетят школьники с вопросом о медиастримевк-оффлайн-музыкеetc.
им я отвечу сразу — а что вам мешает просто скачивать (хоть на ББ), не пользуясь специализированными приложениями, для скачивания через обыкновенный https://
https://uploads.disquscdn.com/images/066402c1c2014453b15397f4614e091682b9c87f56e4d3cd4f9406e3bf6a2d6c.png
потенциальная аудитория статьи — школьники из 4б
Открою вам большой секрет: статья вообще не о содержимом apk. Она совсем о другом.
автор затронул тему «как добратьсясохранить медиафайлы».
автор показал, что аудиофайлы могут лежать в хранилище, и даже показал как добраться с помощью файлового менеджера до аудиофайла, но не рассмотрел случай нахождения медиа файлов в самой программе.
Конечно, не совпадение. Автор будет подробно писать и об APK. Но в этой статье речь именно о созданных в ходе работы приложения файлах, а вовсе не о предустановленных в составе APK.
О, у нас тут кулхацкер, который опять не осилил текста, но попытался поумничать 🙂
Мальчик, иногда, когда пытаешься показатбь, какие все вокруг тупые, неплохо бы глянуть в зеркало.
у этого «мальчика» уже м&дя седые….
перечитайте мой предыдущий пост еще раз, и попробуйте его осознать.
Зачем «пробовать осознавать» то, что НИКАКОГО отношения к статье не имеет, а представляет собой просто кусок информационного мусора?
Наличие чего-то там где-то седого (сделаем вид, что я проникся «тонкостью шутки») не делает из тебя девочки, и вообще речь но о возрасте, а о вечном состоянии. Как «школота».
Ведь причём вообще тут apk, если речь совершенно определённо о другом? Абсолютно ни при чём, но ведь так хочется показать себя «знающим» , что никак не удержаться!
Уровень скрипт-кидди — это как раз про твой комментарий.
«у этого «мальчика» уже м&дя седые…. перечитайте мой пост еще раз, и
ol0lo ты просто супер…. «скрипт кидди» —— «сиктриб кетди»
Если пишем «/data», то пишем и «/Android/data»
Файловая система юниха не прощает ошибок в слешах и точках 🙂
что это не прощает? попробуй зайти в папку /var//lib или //var/lib и будешь приятно удивлён
есть выход в отказе от сбербанки
Это самый разумный вариант, но почему-то люди упорно идут в это учреждение
Здравствуйте, я удалил пропущенный звонок на телефоне, андроид, Самсунг A10S. Скачал кучу приложений для рут доступа, но ни один не открыл его. Подскажите пожалуйста как восстановить номер, если я знаю время и дату звонка? В билайн центре детализация не помогла.