Немного об A2SD и App2SD

Андроид 2.3 очень порадовал тем, что теперь эффективность встроенного A2SD (возможность переноса приложений на флешку) возросла в разы. А изменилось не столь многое: если раньше переносился только *.apk-пакет, а данные оставались в основной памяти, то теперь вместе с пакетом переносится и часть данных, а именно, папка /lib, которая обычно занимает больше всего места. Подробности дальше.

Вкратце: Каждое приложение в операционной системе Андроид состоит из одного *.apk-файла, который является и установочным, и установленным. Но при установке происходят некоторые действия, увеличивающие занимаемое место, а именно:
• apk-файл переименовывается в соответствии с классом (уникален), помещается в /data/app/
• создаётся папка данных, совпадающая с классом пакета, например /data/data/com.google.android.youtube с подкаталогами, предназначенными для различных данных:
— lib — бинарные библиотеки приложения, *.so-файлы.
— files — различные файлы приложения, возможен любой контент.
— shared_prefs — xml-описание настроек.
— cache — кэш, временные файлы. Может быть очищен системой при нехватке места в памяти.
— databases — базы данных (sqlite), основное хранилище данных.
• создаётся dalvik-кеш исполняемого файла (проще говоря, распаковывается dex-файл для более быстрого обращения)
• если в приложении присутствуют бинарные библиотеки, они распаковываются в папку /lib для более быстрого обращения

so-файлы написаны на С/С++, обладают максимальной производительностью и потому очень популярны в играх. К тому же, часто разработчики при портировании игр оставляют всю логику в библиотках, а на Java пишут лишь оболочку. В результате часто эти файлы обладают особо большим размером.

Из-за нехватки основной памяти для хранения большого количества приложений в системе сначала сторонние разработчики придумали модуль A2SD, который автоматически переносит все пользовательские программы (/data/app/*.apk) и весь dalvik-cache на флешку, в предварительно созданный дополнительный раздел формата ext2/3/4. В системе, начиная с версии 2.2, появился встроенный механизм переноса приложений на флешку, называемый app2sd, в этом случае на флешке создаётся зашифрованный контейнер (файл), в который помещается apk-файл. Из вышенаписанного, думаю, понятно, что это освобождает далеко не весь объём, занимаемый приложением, а иногда даже менее 30% от него.

Наконец, в системе 2.3 значительно улучшили app2sd, добавив лишь такую незначительную деталь, как перенос и папки /lib, таким образом доведя процент экономии места в памяти почти до 100%! Я решил посчитать выгоду от использования обоих методов, основываясь на самых больших установленных программах и играх. Для начала сравним используемые объёмы в разных сочетаниях, итого 4 варианта, на примере достаточно большой игры, Gangstar:

Видно, что наиболее экономным является сочетание методов, но у каждого метода есть свои минусы:
• оба метода не будут работать при извлечённой флешке, при этом физическое извлечение недопустимо для A2SD
• app2sd создаёт зашифрованные контейнеры, поэтому приложения не будут работать с этой флешки на другом аппарате, следует быть осторожным при обновлении телефона. К тому же, шифрование даётся тоже не бесплатно, немного нагружая ЦП при обращениях, а контейнеры поддерживаются процессами, запускающимися для каждого такого контейнера, расходуя оперативную память.
• с другой стороны, A2SD тоже ограничен скоростью чтения/записи флешки, и например, на флешки четвёртого класса могут уже заметно ограничивать скорость загрузки приложений.

Итак, итоговая таблица, в которой для примера я проверил эффективность переноса 11 приложений:

В итоге, мы разобрались с методами переноса приложений на внешнюю память, увидели разницу между ними. Лично мне на моём HTC Desire категорически не хватает места, и я не знаю, что бы я делал без A2SD, т.к. сейчас используется 527МБ пямяти (при объёме раздела в 147МБ, курам на смех!), это 221МБ – приложения(110шт), 226МБ – данные и 80МБ – далвик-кэш. При этом особо большие приложения (с десяток игрушек сверху списка в управлении приложениями при сортировке по размеру) приходится «повторно» переносить на флеешку, чтобы сэкономить ещё несколько драгоценных мегабайт (иногда и более десятка с игрушки!).

Показать pdf-файл

Итак, в дополнение, для полной ясности, давайте посмотрим, сколько же реально места занимают папки с библиотеками в разных приложениях. Простой командой du -L -d 2 /data/data/ мы получим список папок с указанием размера, а отфильтровав и отсортировав получим следующее.
Итак, кто же занимает больше всего места своими библиотеками, не поддающимися переносу на 2.1 и 2.2?
Покажу свой список приложений с либами больше двух мегабайт:

com.opera.browser — 13,7
com.gameloft.android.TBFV.GloftGMHP.ML — 9,5
com.glu.android.toyshop_paid — 8,5
com.adobe.flashplayer — 7,9
com.redirectin.rockplayer.android.unified — 3,8
com.adobe.reader — 3,6
com.glu.android.gunbros_free — 2,5
com.rainman.cuttheropelite — 2,0

Андроид , ,

21 comments


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *