ZipAlign-Verifizierung

8

In Android wird ZipAlign zum Ausrichten von Ressourcen auf 4-Byte-Grenzen verwendet um das Laden von Ressourcen zu beschleunigen:

  

Der Resource-Handling-Code in Android kann effizient auf Ressourcen zugreifen   wenn sie auf 4-Byte-Grenzen ausgerichtet sind, indem sie sie im Speicher abbilden. Aber   für Ressourcen, die nicht ausgerichtet sind (d. h. wenn zipalign nicht ausgeführt wurde   auf einer apk), muss es zurückfallen, um sie explizit zu lesen - was ist   langsamer und verbraucht zusätzlichen Speicher.

Nach dem Ausführen des Tools ist es möglich, die Ausrichtung mit dem Befehl zu validieren.

%Vor%

Dies erzeugt einen Bericht und teilt mit, ob Fehler vorliegen oder nicht. In meinem Fall gibt dieser Bericht keinen Ausrichtungsfehler an, aber die erste Zahl, von der ich annehme, dass sie die Position der Ressourcen in der endgültigen APK darstellt, scheint zu zeigen, dass einige Ressourcen nicht an 4-Byte-Grenzen ausgerichtet sind.

Hier ist der Anfang dieses Berichts:

%Vor%

Was habe ich vermisst? Ist die erste Nummer die Position der Ressource? Zum Beispiel scheint Structures.xml bei 595425 zu sein, was kein Vielfaches von 4 Bytes ist.

    
J_D 23.10.2013, 13:48
quelle

1 Antwort

6

Die Ausrichtung spielt für komprimierte Daten keine Rolle.

Die Idee besteht darin, die unkomprimierten Blöcke im Speicher abzubilden und direkt darauf zuzugreifen. Wenn Ihr PNG-Dekoder beispielsweise versucht, als 32-Bit-Integer auf Daten zuzugreifen, und Sie einen Emulator haben, der ARM-CPU-Verhalten im ungünstigsten Fall emuliert und einen SIGBUS auslöst, wenn Sie einen nicht ausgerichteten 32-Bit-Zugriff ausführen, dann können Sie nicht trivial sein Greifen Sie auf die Bilddaten zu, wenn sie nicht ausgerichtet sind.

Der zlib-Inflate-Code kümmert sich nicht darum, ob die Daten ausgerichtet sind, sodass zipalign die komprimierten Daten nicht ausrichtet.

    
fadden 23.10.2013, 17:47
quelle

Tags und Links