[Песочница] Android: куда делась память?

70065 / 2052

Пользователи android часто сталкиваются с тем, что через некоторое время после начала использования куда-то девается “системная” память. Это касается и пользователей бюджетных версий смартфонов, и середнячков; редко касается только пользователей флагманов, хотя и им не помешает прочитать эту заметку. Тем более, что бюджетных аппаратов “на руках” всё же большинство.

Когда покупаешь android-смартфон впервые, непонятно, хватит ли указанной в спецификации памяти для реальных задач. Моим первым смартфоном на android был Samsung Galaxy Gio GT-S5660, с 178 мегабайтами “встроенной памяти”. Мысли при покупке:“Так, основные приложения уже установлены. Докупаю ещё карту памяти для мультимедии, файлов и остальных прог. А те, что не смогут установиться на карту, – для них и 178 метров с головой.”
А через некоторое время приходит понимание и разочарование. Но давайте обо всём по порядку. Попробуем разобраться с основными понятиями в файловой системе и как “лечить” проблему на минимальном уровне. Я сильно упрощаю материал, поэтому не ищите “неточностей” с точки зрения Computer Science.

Операционная система android основана на Linux. Если посмотреть на неё с корня то увидим примерно следующую картину:

Примерно то, что и в любом линуксе. Я не буду описывать все папки – если вам это нужно, почитайте соответствующую литературу. Сейчас нас интересует “встроенная память” и “системная”. Где это и что?

Сама операционная система android установлена в системную память. Это все файлы и папки, которые вы видите на скриншоте, за исключением пары. Про эту память производители не пишут нигде и никогда (во всяком случае, я не видел, если вы видели – покажите). Ни в одном пресс-релизе или спецификациях вы не увидите “Системной памяти ХХХ МБ”. Здесь находятся все системные файлы, которые мало интересуют обычного пользователя. Используя специальные утилиты, её-таки можно посмотреть. В Galaxy Gio системная память составляет 206 мегабайт, но нас в данном случае интересует одна папка /system/app.

Именно в этой папке находятся все “предустановленные” приложения. Здесь располагаются и те программы, без которых смартфон не может нормально функционировать, например “звонилка”, всякие “синхронизаторы” и те, которые инсталлировал вендор (производитель телефона) по умолчанию: Youtube, какой-нибудь офис или “операторский” софт.

Но где же у нас находится та самая “встроенная память” или “память пользователя”?. Говоря простым языком, она находится в каталоге /data. Правильней сказать: “участок внутренней энергонезависимой памяти, доступной пользователю, смонтирован в файловой системе как каталог /data“, но я буду всё упрощать.
Что находится в этом каталоге? Начинающий пользователь думает, что ему предоставлено всёпространство встроенной памяти (в моём случае 178 МБ) в полное распоряжение.

Как бы не так! Эта директория уже после первого старта забита каталогами с файлами. Я опять не буду останавливаться на всех каталогах, а расскажу лишь об основных “пожирателях” места.
Первая директория – dalvik-cache. Часть android – Dalvik Virtual Machine – собственная реализация Google виртуальной java-машины, в которой запускаются все приложения. Dalvik-кэш – промежуточный буфер с быстрым доступом. Проще говоря, сюда android cкладывает предварительно скомпилированный код программ для того, чтобы ускорить их запуск. Причём, это не зависит от типа программы: хоть системная, хоть в памяти пользователя, хоть на карте памяти; dalvik-cache в одном месте – в /data. К примеру, на Galaxy Gio эта папка после первого старта занимает порядка 100-110 мегабайт. Ну и 178 мегабайт памяти для пользователя неожиданно превращаются в 60-70. Грусть-печаль. Совсем без этого кэша нельзя. В сети есть ряд инструкций, которые позволяют перенести его на внешнюю карту памяти. Конечно, это немного сказывается на быстродействии, да и глюки бывают. Я этот приём описывать не буду. (Если у вас есть собственное описание этого метода, стучитесь – обменяемся ссылками)

Смотрим дальше. Папка /data/app. В неё и устанавливаются все пользовательские программы, которые не могут быть перенесены на карту памяти по каким-то причинам. Причин обычно две. Первая – виджет: такие программы не могут быть перенесены на карту из-за ограничений ОС. Вторая – разработчик не подумал о пользователях бюджетных смартфонов.

Теперь самый главный сюрприз, из-за которого я и начал писать этот пост. Когда обновляется системная программа, например Youtube, её apk тоже помещается в /data/app. И у нас получается следующее: в /system/app лежит, никуда не девшись, старая версия программы, а в/data/app – новая. Конечно “части” программы лежат ещё и в dalvik-cache, и в других кэшах и местах, но это как бы обычно, а вот такое “удвоение” нам совсем не нужно. Получается, даже если вы не ставили ни одной программы сами, через некоторое время память пользователя (/data/app) уйдёт на обновление системных программ (конечно, если обновляете). Android не переместит сам этот apk в /system/appникогда.

Что делать?
Во-первых, нужно получить root, иначе система не позволит вам ничего записать в /system/app.
Как получить root для вашего конкретного устройства предлагаю поискать в интернете самим или полистать эту тему на 4PDA.

Рут-права – это не страшно. Зачастую пользователи конкурирующих систем представляют это как какое-то страшное злодейство, позволяющее делать неизвестно что. Например, “пиратить” – как с JailBreak на iOS. Для “пиратства” на андроиде всё это не нужно:) Смартфон с включенными root-правами всего лишь позволяет некоторым программам, перечень которых контролируется, всегда или временно получать право записи в системные каталоги. И всё. Как sudo на linux или “Выполнить от имени администратора” на windows. Страшно? Нет. Сейчас на некоторых прошивках рут включается просто переключателем в настройках.

Вторым пунктом нам потребуется программа SystemCleanup

Программа “донатовая”. То есть, при каждом запуске она просит купить примерно за 3 доллара Inteks Donation Key, который подходит к нескольким программам автора, но функциональности это не отнимает. Вообще, программа позволяет много чего: “одексировать” приложения (возможно, расскажу об этом позже) на самом устройстве, чистить кеш, удалять системные приложения, делать резервные копии и многое другое.
Рассмотрим только восстановление вселенской справедливости перенос обновлённых системных программ на своё место.

Запускаем программу и переключаемся на вкладку Apps.

Здесь мы видим перечень установленных приложений с дополнительной информацией. Ищем программы, под которыми красным написано system+data. Это и есть наши “штрафники”. При нажатии на строку будет показана дополнительная информация о месте, занимаемом данным приложением в разных “местах памяти”. Делаем долгий тап и выбираем “Update system app” (скриншот старый, сейчас надпись такая) и соглашаемся с действием в дополнительном диалоговом окне. Обычно после всех перемещений требуется перезагрузка устройства, что программа и предложит сделать.

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

Вообще, повторюсь, программа может делать довольно много полезных вещей. Например, можно удалить предустановленные системные приложения, которые вам не нужны. Причём под большинством приложений есть подсказка: безопасно ли его удалять. Можно перенести приложение из основной памяти на карту с полным сохранением работоспособности (только если это не виджет). А можно некоторые приложения сделать “системными”. Например, вы освободили в системной памяти несколько мегабайт, занятых ненужным операторским софтом, и при этом поставили стороннюю “звонилку”. Переносить на карту памяти её не целесообразно из-за скорости или отказоустойчивости, а место во “встроенной памяти” она занимает. Долгий тап и выбираем Move app to /system/app, и ваша программа переместилась в папку /system/app, то есть стала системной (с точки зрения андроида).

На этом сегодня всё. Ещё раз: у программы есть множество полезных функций, изучите их сами или, может быть, я когда-нибудь опишу. Есть более радикальные методы “расширения” пользовательской памяти, связанные с перемонтированием далвик-кэша или вообще папки /data на карту памяти, но они связаны с определённым риском и другими неудобствами.

А цель этого поста достигнута. Желаю удачи и держите память в тонусе:)


  • Shtsh

    >Причём, это не зависит от типа программы: хоть системная, хоть в памяти пользователя, хоть на карте памяти

    Не так. Если программа одексирована, то кеш не требуется, а системные приложения, как правило, одексированы.

    • Михаил Кириллов

      Ну про одексирование я вообще пропусти. Это нужно ещё почти столько-же слов сказать. Кстати, эта программа и одексировать умеет, прямо на смартфоне. Может и продолжу в эту тему ещё посты.
      А так это такой “лайт”. Когда и рут есть и монтировать на флешку разделы сложно и страшно:)

  • Я для тех же целей использую Link2SD, он тоже умеет интегрировать обновления системных аппов в сист.память, и так далее.

    • Михаил Кириллов

      Дело не в приложении, это уже по вкусу. Дело в “разъяснительной работе”:)

  • reward

    уважаемый, полечил gmail, перестал работать вообще, не подскажете как реанимировать

    • Михаил Кириллов

      Стереть данные приложения. Авторизоваться снова.

    • reward

      Михаил, файловым менеджером: x-plore, gmail.apk вернул назад, после перезагрузки всё заработало

      • reward

        а вот hangouts заработал без танцев

      • Михаил Кириллов

        У меня только клава Perfect Keyboard отказалась работать как системная. Хотя она таковой и не была. А так 2 смарфона с диапазоном андроидов 2,2-4,2,2 – без проблем. В том числе и джимейл на андроиде 2,2 на китайфоне dPad A8500 у малой.

  • znatok2012

    Если у Вас телефон-андройд, то откажитесь делать рут, иначе гарантию потеряете.

    [quote]Настройки -> Приложения -> Лист “ВСЕ” -> упорядочить по размеру -> и вверху будет программа “Хранилище мультимедиа”, потом нажимаем “стереть данные”.[/quote]

    • Юрий

      в 4.04. такого в программы\все нет

  • Саня

    спасибо за помощь . ваше объяснение очень сильно помогло.

  • Мисхорская гавань

    Спасибо. Самая правильная статья об очищении памяти, и приложение отличное. Всем рекомендуем.

  • Serega Sergeev

    Вот спасибо, Михаил. Хоть немного стал соображать по этим папкам в куче. Давайте нам больше методов издевательств над андроидом, не стесняйтесь :)