Что означает zipalign и как он соответствует тому, как мы используем наши устройства Android?

19

Что означает "zipalign" и каково его значение?

Когда ПЗУ заявляет, что оно «zipaligned», что это означает и в чем отличие от ПЗУ, которое не «zipaligned»?

Matt
источник

Ответы:

21

Этот механизм описан на сайте разработчиков Android следующим образом:

zipalign - это инструмент выравнивания архива, который обеспечивает важную оптимизацию для файлов приложений Android (.apk). Цель состоит в том, чтобы все несжатые данные начинались с определенного выравнивания относительно начала файла. В частности, он вызывает выравнивание всех несжатых данных в .apk, таких как изображения или необработанные файлы, по 4-байтовым границам. Это позволяет напрямую обращаться ко всем частям с помощью mmap (), даже если они содержат двоичные данные с ограничениями выравнивания. Преимущество заключается в уменьшении объема оперативной памяти, используемой при запуске приложения.

Вкратце: .apkдоступ к контенту может быть проще / быстрее / более оптимальным благодаря порядку данных внутри упакованного файла.

Для получения более подробной информации на AddictiveTips доступно «полное руководство»: что такое Zipalign в Android и как сделать приложения Zipaligned , которое отвечает на вторую часть вашего вопроса:

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

Иззи
источник
Для программистов это более или менее похоже на выравнивание структуры в C. Не делайте этого, struct x { uint16_t id; uint32_t data[100]; };если хотите, чтобы оно было выровнено 32-битным; использованиеstruct x { uint16_t id; uint16_t padding; uint32_t data[100]; };
Мэтью Прочитано
Кажется, что нет никаких недостатков, почему не все приложения выровнены по почтовому индексу? Кроме того, действительно ли это беспокоит конечных пользователей или это касается только разработчиков?
Мэтт
1
Это дополнительный шаг для разработчика, я бы сказал. И, конечно же, производительность - это проблема для конечных пользователей;)
Иззи
1

Чтобы добавить выше, как именно работает zipalign -

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

Поскольку Android основан на Linux, отображение памяти играет ключевую роль в эффективной обработке процессов. По сути, оптимальное выравнивание для кода обработки ресурсов ОС Android - это 4-байтовые границы. Это означает, что, если APK-карты сопоставлены с 4-байтовыми границами памяти и соответствующим образом выровнены, ОС не потребуется «читать» весь пакет приложения, чтобы получить требуемый манифест данных. Каждый системный процесс заранее будет знать, где искать нужные ему ресурсы, и, следовательно, будет выполняться гораздо плавнее и быстрее.

Подводя итог, zipaligning APK приводит к выравниванию всех несжатых данных в пакете по 4-байтовым границам, что позволяет получить доступ ко всем частям непосредственно с картой памяти. Потребление ОЗУ уменьшается во время выполнения, потому что запрашивающий код не должен читать весь пакет приложения.

Источник

Аникет Тхакур
источник
Почему он не читает весь пакет приложения? Манифесты гарантированно находятся в определенном смещении?
Кеннет Уорден