Що означає zipalign і як воно вписується в те, як ми використовуємо наші пристрої Android?


19

Що означає "zipalign" і яке його значення?

Коли ПЗУ претендує на "зіпалінг", що це означає і чим відрізняється від ПЗУ, який не є "зіпакованим"?

Відповіді:


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
Це додатковий крок для диявола. І звичайно виступ викликає занепокоєння кінцевих користувачів;)
Izzy

1

Щоб додати вище, як саме працює zipalign -

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

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

Підсумовуючи це, зіпалірування APK призводить до того, що всі нестиснені дані в пакеті повинні бути вирівняні на 4-байтних межах, що дозволяє отримувати доступ до всіх частин безпосередньо з картою пам'яті. Споживання оперативної пам’яті знижується під час виконання, оскільки код запиту не повинен читати весь пакет додатків.

Джерело


Чому він не читає весь пакет програм? Чи гарантовано маніфести з певним зміщенням?
Kenneth Worden
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.