30 марта 2012

Как оптимизировать размер модифицированных apk для Android?



Продолжаю писать свои капитанские статейки про издевательства над Android.
На это раз буду делиться опытом оптимизации приложений.
Памяти никогда не бывает много, особенно внутренней, особенно на телефонах. Оптимизировать всё и вся мы не будем, но уменьшить размер модов, коих в интернете великое множество попытаемся.
Заниматься оптимизацией кода и прочими хаками не будем, а попробуем уменьшить размер графики внутри apk-пакета.
Вся графика хранится обычно в формате PNG, который очень хорошо подходит для всяких однотонных фонов и градиентов, да еще может хранить внутри себя альфа-канал для прозрачности, при этом поддерживает полноценную палитру цветов. А чтобы все эти прелести не занимали много места на диске, формат реализует довольно хитрый алгоритм сжатия практически без потери качества.
Проблема в том, что во всех модах, которые я встречал вся графика оптимизирована довольно слабо, zip-сжатие спасает, не не особо сильно. Поэтому будем исправлять этот огрех самостоятельно.

Нам понадобится следующий инструментарий:
  • Любой архиватор, который полностью поддерживает zip и позволят указать степень сжатия при архивации;
  • Программа OptiPNG, которую можно найти по адресу http://optipng.sourceforge.net/
Первым делом с помощью архиватора распаковываем apk-пакет в любую папку на диске.
После этого запускаем командную строку, или эмулятор терминала (а вдруг у Вас Linux?) и переходим в папку, куда распаковали архив. Внутри будет много интересного, но нас интересует папка "res". В ней хранится вся графика и описания интерфейса.
Теперь методично пройдемся по всем папкам внутри "res" и в каждой запустим следующую команду:

optipng -o9 *.png

Так мы оптимизируем всю графику с максимальной степенью сжатия. Некоторые моду после такой оптимизации худеют довольно значительно.
Теперь запакуем распакованный apk-пакет в zip-архив с максимальной степенью сжатия с помощью архиватора. Теперь осталось только этот архив подписать по инструкции и установить по инструкции от автора модификации.
Таким же способом можно оптимизировать загрузочную анимацию, которая тоже состоит из кучи png-файлов. Но хранятся они в zip-архиве без сжатия. Этот нюанс надо учитывать, потому что, если применить сжатие, то вместо красивой анимации Вы увидите черный экран вовремя загрузки, который в конце сменится рабочим столом.