Зачем мне когда-либо использовать невыровненные apks?

Когда я запускаю задачу gradle «assembleDebug» только для получения отладочной версии, которую я поставил на свой телефон, она также генерирует еще один apk: MyApp-debug-unaligned.apk.

Кажется, я понимаю, что означает «выравнивание» zip. То, что он оптимизировал размещение границ файла для удобной распаковки (поправьте меня, если я ошибаюсь). Это просто оптимизация, и на самом деле она не имеет особого отношения к Android.

Итак, поскольку Android хранит все приложения в виде apk-файлов и распаковывает их только во время выполнения, было бы полезно установить только выровненные, оптимизированные apk-файлы. Кроме того, на выравнивание пакета по почтовому индексу требуется, казалось бы, тривиальное время, но, возможно, это просто из-за размера моих конкретных приложений.

Когда невыровненный почтовый индекс будет выгоднее его выровненной альтернативы? Или это просто потому, что у вас должна быть невыровненная версия для выравнивания, а процесс не очищает невыровненный файл после его завершения?


person Corey Ogburn    schedule 04.11.2015    source источник


Ответы (1)


Вы никогда не используете невыровненный APK.

Это промежуточный продукт, который не подвергается очистке. По моему должно быть.

Как это работает:

Что делает выравнивание, так это помещает изображения и другие большие биты несжатых данных на границу 4 байта. Это увеличивает размер файла, но заставляет его принадлежать определенной странице. Это позволяет избежать необходимости выбирать несколько страниц из APK для одного изображения (то есть сводит к минимуму количество выбранных страниц). Поскольку образ начинается с 4-байтовой границы, больше шансов, что мы не получим ненужные данные, связанные с другими процессами.

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

Что касается времени, которое требуется, это относительно тривиально, поэтому оно того стоит. Очевидно, что чем больше несжатых данных у вас есть, тем больше времени это занимает, но это никогда не бывает очень значительным. ИМХО, компилятор должен выбросить невыровненный файл, но я думаю, кто-то хотел его сохранить.

Ресурсы:

Объявление ZipAlign

http://android-developers.blogspot.com/2009/09/zipalign-easy-optimization.html

Текущие документы ZipAlign

http://developer.android.com/tools/help/zipalign.html

О выравнивании структуры данных (читайте о заполнении)

https://en.wikipedia.org/wiki/Data_structure_alignment

person cjds    schedule 04.11.2015
comment
Дело не в выравнивании страницы, а в выравнивании слов. Если вам нужно выравнивание страницы, вы должны настроить его для выравнивания по границе 4096 байтов, а не по границе 4 байтов. ср. stackoverflow.com/questions/30155519 - person fadden; 05.11.2015