Was bedeutet Zipalign und wie passt es dazu, wie wir unsere Android-Geräte verwenden?

19

Was bedeutet "Zipalign" und welche Bedeutung hat es?

Wenn ein ROM angibt, "zipaligniert" zu sein, was bedeutet das und was ist der Unterschied zu einem ROM, das nicht "zipaligniert" ist?

Matt
quelle

Antworten:

21

Dieser Mechanismus wird auf der Android-Entwicklerseite wie folgt beschrieben:

zipalign ist ein Tool zum Ausrichten von Archiven, mit dem Android-Anwendungsdateien (.apk) optimiert werden können. Damit soll sichergestellt werden, dass alle nicht komprimierten Daten mit einer bestimmten Ausrichtung relativ zum Dateianfang beginnen. Insbesondere werden alle nicht komprimierten Daten in der APK-Datei, z. B. Bilder oder RAW-Dateien, an 4-Byte-Grenzen ausgerichtet. Auf diese Weise kann mit mmap () direkt auf alle Teile zugegriffen werden, auch wenn sie Binärdaten mit Ausrichtungseinschränkungen enthalten. Der Vorteil ist eine Reduzierung des RAM-Aufwands beim Ausführen der Anwendung.

Kurz gesagt: Der .apkZugriff auf Inhalte kann aufgrund der Reihenfolge der Daten in der gepackten Datei einfacher / schneller / optimaler sein.

Weitere Informationen finden Sie in der "vollständigen Anleitung" unter AddictiveTips: Was ist Zipalign in Android und wie werden Apps Zipaligned erstellt? Hier finden Sie die Antwort auf den zweiten Teil Ihrer Frage:

Verständlicherweise wäre die Situation nicht ausgerichteten Anwendungspaketen vorbehalten. Das Lesen von Ressourcen wäre langsam und die Speichernutzung würde am oberen Ende des Spektrums liegen. Es würde auch davon abhängen, wie viele nicht ausgerichtete Anwendungen vorhanden sind. Wenn beispielsweise weniger Anwendungen mit einer nicht ausgerichteten Basisanwendung vorhanden sind, werden langsamere Anwendungsstartzeiten angezeigt. Dies ist das beste Szenario. Im schlimmsten Fall führt eine Reihe nicht ausgerichteter Anwendungen dazu, dass das System wiederholt Prozesse startet und beendet und mit Verzögerungen und einem enormen Batterieverbrauch kämpft.

Izzy
quelle
Für Programmierer ist es der Strukturausrichtung in C mehr oder weniger ähnlich struct x { uint16_t id; uint32_t data[100]; };. Verwendungstruct x { uint16_t id; uint16_t padding; uint32_t data[100]; };
Matthew Read
Es scheint keinen Nachteil zu geben, warum sind nicht alle Apps zip-ausgerichtet? Ist dies auch wirklich ein Problem für Endbenutzer oder ist es nur für Entwickler relevant?
Matt
1
Es ist ein zusätzlicher Schritt für den Entwickler, würde ich sagen. Und natürlich ist die Leistung ein Anliegen für Endbenutzer;)
Izzy
1

Wie genau funktioniert Zipalign?

In einer Android-Betriebsumgebung wird auf Datendateien, die in jedem Anwendungspaket gespeichert sind, von mehreren Prozessen zugegriffen. Beispielsweise liest das Installationsprogramm das Datenmanifest, um die zugehörigen Berechtigungen zu ermitteln. Der System-Server kann diese Ressourcen aus mehreren Gründen lesen, z. B. um Benachrichtigungen anzuzeigen. Die Home-Anwendung liest beispielsweise Ressourcen, um den Namen und das Symbol der Anwendung abzurufen. Da Android auf einer echten Multi-Tasking-Infrastruktur basiert, wird auf diese Dateien ständig und wiederholt zugegriffen. Zu guter Letzt liest die Anwendung selbst die Manifestdaten.

Da Android Linux-basiert ist, spielt die Speicherzuordnung eine Schlüsselrolle für die effiziente Abwicklung von Prozessen. Im Wesentlichen beträgt die optimale Ausrichtung für den Ressourcenbehandlungscode des Android-Betriebssystems 4-Byte-Grenzen. Dies bedeutet, dass das Betriebssystem nicht das gesamte Anwendungspaket "durchlesen" muss, um zum gewünschten Datenmanifest zu gelangen, wenn APKs auf 4-Byte-Grenzen speicherabgebildet und entsprechend ausgerichtet sind. Jeder Systemprozess weiß im Voraus, wo er nach den gewünschten Ressourcen suchen muss, und wird daher viel reibungsloser und schneller ausgeführt.

Zusammenfassend führt das Zipalignieren einer APK dazu, dass alle nicht komprimierten Daten innerhalb des Pakets an 4-Byte-Grenzen ausgerichtet werden, sodass auf alle Teile direkt mit der Speicherzuordnung zugegriffen werden kann. Der RAM-Verbrauch wird während der Ausführung gesenkt, da der Abfragecode nicht das gesamte Anwendungspaket lesen muss.

Quelle

Aniket Thakur
quelle
Warum liest es nicht das gesamte Anwendungspaket durch? Wird garantiert, dass die Manifeste einen bestimmten Versatz haben?
Kenneth Worden