Как уменьшить размер APK файла?

01.06.2015

Как уменьшить размер APK файла?

Что такое APK формат?

APK - аббревиатура от Android application package (файл архива Android программы). Каждое Android приложение упаковывается в apk архив, содержащий исполняемый код (.dex файлы), ресурсы, активы и файл манифеста. Фактически apk представляет собой обычный zip архив, поэтому не имеет смысла предварительно сжимать файлы ресурсов каким-нибудь архиватором.

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

Как уменьшить размер APK файла?

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

1. Используйте ProGuard

ProGuard - это обфускатор, попутно сжимающий  размер кода. Как известно, Java приложения компилируются в байт-код, из которого довольно просто восстановить java исходник. Для усложнения жизни любителям реверс-инженерии придумали обфускаторы. Обфускатор служит для запутывания исходного кода программы, при сохранении исходной функциональности. Получается рабочий исходник, мало пригодный для чтения человеком. Программа ProGuard помимо собственно обфускации сжимает исходный код, делает его более быстрым и менее требовательным к памяти. Очень важно после использования ProGuard провести тщательное тестирование полученного приложения. Возможны ситуации, когда в ходе оптимизации и обфускации кода изменяется его функциональность. В таких случаях важно позаботиться о сохранении symbol mapping, чтобы можно было восстановить из обфусцированного кода исходный и попытаться выявить источник проблем.

2. Удаляйте отладочную информацию

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

Входящий в состав Android SDK компилятор умеет автоматически удалять отладочный код из релиза, но программист должен позаботиться о правильном оформлении своей программы, поместив отладочные команды в специальный блок:

if (debug) {
 Log.v(TAG, "Debug …");
}

Часто начинающие разработчики оформляют отладочный код в виде отдельных методов:

public void myDebugPrint() {
 if (Debug) {
 Log.v(TAG, "Debug …”);
 }
}
…
myDebugPrint()
…

Это не лучшее решение, поскольку на этапе сборки релиза будет удален блок if (Debug){...}, но сам метод myDebugPrint() и его вызов останутся нетронутыми и будут занимать место.

3. Удаляйте отладочные символы из нативных библиотек

Использование символов отладки имеет смысл, когда ваше приложение находится в стадии разработки. Если Вы решили собрать релиз, Дэвид рекомендует удалить символы отладки из нативных библиотек (.so файлы). Это можно сделать, вызвав команду arm-eabi-strip из Android NDK.

4. Используйте рекомендуемые медиа форматы

Если ваше приложение содержит графику, видео и аудио данные, использование "правильных" форматов может положительно сказаться на размере приложения. Дэвид рекомендует использовать следующие форматы:

  • Рисунки: PNG и JPEG. Формат PNG позволяет добиваться хорошей компрессии при отсутствии ухудшения качества картинки. JPEG хорош для больших по разрешению картинок.
  • Аудио: Используйте ACC Audio. Этот формат обеспечивает лучшую компрессию, чем широко распространенные mp3 и Ogg Vorbis. Никогда не используйте wav. Это формат для профессиональных музыкантов. В нем не используется компрессия и содержится много избыточной информации. Часто wav используется для декодирования сжатого аудио потока. Обычно такой подход сопровождается заметными временными задержками. Android имеет средства для воспроизведения сжатого аудио потока лишенные этого недостатка (Sound Pool API).
  • Видео: Используйте формат H264 AVC. Если видеофайл имеет большое разрешение, обязательно перекодируйте его под разрешение экрана целевого устройства.

5. Компрессируйте PNG файлы 

Довольно часто получаемые в результате работы графических редакторов PNG файлы плохо скомпрессированы и их размер может быть дополнительно уменьшен с помощью специальных утилит: OptiPNG или PNGCrush. Обе эти программы пересжимают PNG файл, сохраняя качество картинки. Программы перебирают параметры PNG фильтров и настроек алгоритма сжатия и создают на выходе файл с оптимальными параметрами.

6. Используйте 9patch PNG для масштабируемых изображений

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

7. Удаляйте неиспользуемые ресурсы

Как правило, папка res содержит несколько неиспользуемых ресурсов. Для их удаления можно использовать специальную утилиту android-unused-resources, которая сканирует Ваш исходный код и удаляет из проекта неиспользуемые ресурсы.

8. Избегайте дублирования

Убедитесь, что в вашем приложении не дублируется функциональность и активы (строки, рисунки и т.п.). Важно понимать, какие Android API вы используете, и знать их функциональность. Может получиться, что в вашей программе для решения задачи, которую можно решить средствами уже подключенных API, подключается новый API. Дублирование кода, например, включение в программу функций делающих одно и то же, также ведет к разбуханию APK файлов.

Итог

Перечисленные выше советы скорее применимы к исходникам на стадии разработки приложения, но некоторые из них можно использовать и к декомпилированным с помощью APK Manager приложениям. Например, уменьшить размер PNG файлов.

Комментарии

avatar

Теги

Опрос

Ваш возраст?
Результаты Все опросы

Статистика


Онлайн всего: 1
Гостей: 1
Пользователей: 0