Que signifie zipalign et comment s'inscrit-il dans la façon dont nous utilisons nos appareils Android?

19

Que signifie «zipalign» et quelle est sa signification?

Quand une ROM prétend être «zipalignée», qu'est-ce que cela signifie et quelle est la différence avec une ROM qui n'est pas «zipalignée»?

Mat
la source

Réponses:

21

Ce mécanisme est décrit sur le site des développeurs Android comme suit:

zipalign est un outil d'alignement d'archives qui fournit une optimisation importante aux fichiers d'application Android (.apk). Le but est de garantir que toutes les données non compressées commencent par un alignement particulier par rapport au début du fichier. Plus précisément, il entraîne l'alignement de toutes les données non compressées du fichier .apk, telles que les images ou les fichiers bruts, sur des limites de 4 octets. Cela permet d'accéder directement à toutes les parties avec mmap () même si elles contiennent des données binaires avec des restrictions d'alignement. L'avantage est une réduction de la quantité de RAM consommée lors de l'exécution de l'application.

En bref: l' .apkaccès au contenu est plus facile / plus rapide / plus optimal en raison de l'ordre des données dans le fichier compressé.

Pour plus d'informations, il existe un "guide complet" disponible sur AddictiveTips: Qu'est-ce que Zipalign dans Android et comment créer des applications Zipaligned , qui répond à la deuxième partie de votre question:

Naturellement, la situation serait réservée aux packages d'applications non alignés. La lecture des ressources serait lente et l'utilisation de la mémoire serait à l'extrémité supérieure du spectre. Cela dépendrait également du nombre d'applications non alignées présentes. Par exemple, si le nombre d'applications avec une application d'accueil non alignée est inférieur, vous constaterez des temps de lancement des applications plus lents. C'est le meilleur scénario. Dans le pire des cas, le fait d'avoir un certain nombre d'applications non alignées entraînera le démarrage et l'arrêt répétés du système, des difficultés avec des retards et une énorme décharge de la batterie.

Izzy
la source
Pour les programmeurs, c'est plus ou moins similaire à l'alignement des structures en C. Ne le faites pas struct x { uint16_t id; uint32_t data[100]; };si vous voulez qu'il soit aligné sur 32 bits; utilisationstruct x { uint16_t id; uint16_t padding; uint32_t data[100]; };
Matthew Read
Il ne semble pas y avoir d'inconvénient, pourquoi toutes les applications ne sont-elles pas alignées par zip? Est-ce vraiment une préoccupation pour les utilisateurs finaux ou est-ce uniquement pertinent pour les développeurs?
Matt
1
C'est une étape supplémentaire pour le développeur, je dirais. Et bien sûr, les performances inquiètent les utilisateurs finaux;)
Izzy
1

Pour ajouter ci-dessus comment fonctionne exactement zipalign -

Dans un environnement d'exploitation Android, les fichiers de données stockés dans chaque package d'application sont accessibles par plusieurs processus, par exemple, le programme d'installation lira le manifeste de données pour déterminer les autorisations associées; le serveur système peut lire ces ressources pour plusieurs raisons, comme l'affichage de notifications; l'application Accueil, par exemple, lira les ressources pour obtenir le nom et l'icône de l'application. Étant donné qu'Android est basé sur une véritable infrastructure d'exploitation multitâche, ces fichiers sont continuellement et à plusieurs reprises accessibles. Enfin et surtout, l'application elle-même lit les données du manifeste.

Comme Android est basé sur Linux, le mappage de la mémoire joue un rôle clé dans la gestion efficace des processus. Essentiellement, l'alignement optimal pour le code de gestion des ressources du système d'exploitation Android est des limites de 4 octets. Cela signifie que, si les fichiers APK sont mappés en mémoire à des limites de 4 octets et alignés en conséquence, le système d'exploitation n'aura pas besoin de `` lire '' l'ensemble du package d'application pour accéder au manifeste de données souhaité. Chaque processus système saura à l'avance où chercher les ressources souhaitées et s'exécutera donc beaucoup plus facilement et plus rapidement.

En résumé, l'alignement zip d'un fichier APK entraîne l'alignement de toutes les données non compressées du package sur des limites de 4 octets, permettant d'accéder directement à toutes les parties avec la carte mémoire. La consommation de RAM est réduite lors de l'exécution car le code de requête n'a pas à lire l'intégralité du package d'application.

La source

Aniket Thakur
la source
Pourquoi ne lit-il pas l'intégralité du dossier de candidature? Les manifestes sont-ils garantis à un décalage spécifique?
Kenneth Worden