Übersetzung - Machen Sie das Beste aus APK Analyzer

Eine meiner neuesten Lieblings-Ergänzungen zu Android Studio ist der APK-Analyzer , den Sie im Hauptmenü unter „Erstellen → APK-Analyse“ finden .

Bild
Nützlicher Tipp: Sie können APK-Dateien einfach per Drag & Drop in den Editor ziehen, um sie zu öffnen. Mit

APK Analyzer können Sie den Inhalt aller APK-Dateien auf Ihrem Computer öffnen und überprüfen, die aus Ihrem Projekt in Android Studio erstellt oder vom Build-Server empfangen werden können oder andere lagerung. Die APK-Datei muss vorher nicht erstellt werden ( Build → Build APK ), und Sie benötigen den Quellcode für diese APK nicht.

Hinweis . APK Analyzer funktioniert am besten mit Release-Versionen von APKs. Wenn Sie die Debug-Version Ihrer Anwendung analysieren müssen, stellen Sie sicher, dass Sie ein APK verwenden, das nicht für die sofortige Ausführung vorgesehen ist. Um diese APK zu erhalten, baue APK Build → Build APK . Sie können auch herausfinden, ob Sie APK Instant Run geöffnet haben, indem Sie die Verfügbarkeit der Datei instant-run.zip im Archiv überprüfen.

Mit dem APK Analyzer können Sie die APK-Datei durchsuchen und deren Struktur kennenlernen , den Inhalt vor der Veröffentlichung überprüfen oder einige häufig auftretende Probleme überprüfen, z. B. die Größe des APK und Probleme mit dem DEX.

App-Größe mit APK Analyzer verringern


APK Analyzer kann Ihnen viele interessante und nützliche Informationen über die Größe der Anwendung liefern. Am oberen Bildschirmrand sehen Sie die Größe der Rohdatei - dies ist die Größe der APK auf der Festplatte. Die Downloadgröße gibt an, wie viele Daten zum Herunterladen Ihrer Anwendung verwendet werden, wobei die vom Play Store vorgenommene Komprimierung berücksichtigt wird.

Die Liste der Dateien und Ordner ist nach ihrer Größe in absteigender Reihenfolge sortiert. Dadurch werden Sie sofort als „auf einer Untertasse mit blauem Rand“ angezeigt, was sich am einfachsten in der Größe der APK optimieren lässt. Wenn Sie zu einem Ordner in der APK-Datei wechseln, sehen Sie die Ressourcen und Objekte, die den meisten Platz in der APK einnehmen.

Bild
Ressourcen werden in absteigender Reihenfolge nach Größe sortiert.

In diesem Beispiel konnte ich bei der Untersuchung der APK auf eine mögliche Größenreduzierung sofort feststellen, dass die PNG-Animation mit 3 Bildern die größte Ressourcensache ist und 1,5 MB wiegt. Dies gilt für die xxhdpi- Dichte !

Da diese Bilder als ideale Kandidaten für die Speicherung als Vektoren erscheinen, haben wir die Quelldateien für die Illustrationen gefunden und sie unter Verwendung der neuen PSD-Unterstützung im Vektorressourcen-Import-Tool von Android Studio 2.2 als VectorDrawables importiert .

Indem wir den gleichen Vorgang für die andere verbleibende Animation ( instruction_touch _ * .png ) durchgingen und diese PNG-Dateien in allen Dichten löschten, konnten wir mehr als 5 MB einsparen. Um die Abwärtskompatibilität zu gewährleisten, haben wir den VectorDrawableCompat aus der Support-Bibliothek verwendet.

Beim Durchsuchen anderer Ressourcenordner war es einfach, einige unkomprimierte WAV-Dateien zu finden, die in OGG konvertiert werden konnten. Dies bedeutete noch größere Einsparungen, ohne eine Codezeile zu berühren.

Als Nächstes sollten Sie den Ordner lib / überprüfen , der seine eigenen Bibliotheken für die drei von uns unterstützten ABIs enthält.
Es wurde beschlossen, die Unterstützung von APK-Abschnitten in unserem Gradle-Build zu verwenden, um separate Versionen der Anwendung für jedes ABI zu erstellen. Anzeigen

Bild
anderer Ordner im APK

Ich habe mir schnell die Datei AndroidManifest.xml angesehen und festgestellt, dass das Attribut android: extractNativeLibs in der Anwendung fehlt. Wenn Sie dieses Attribut auf false setzen, können Sie Speicherplatz auf dem Gerät sparen, da dadurch das Kopieren Ihrer eigenen Bibliotheken vom APK in das Dateisystem verhindert wird. Die einzige Voraussetzung ist, dass diese Dateien seitenausgerichtet sind und nicht komprimiert in der APK gespeichert werden, die vom neuen Packer in der Android Gradle-Plug-in-Version 2.2.0+ unterstützt wird.

Bild
Vollständige AndroidManifest.xml-Datei bei Anzeige in APK Analyzer

Nachdem ich diese Änderungen vorgenommen hatte, war ich neugierig, die neue Version der Anwendung mit der vorherigen zu vergleichen. Dazu habe ich den Quellcode von git commit überprüft, von dem ich gestartet habe, die APK kompiliert und in einem anderen Ordner gespeichert. Dann habe ich die Funktion "Vergleichen mit ..." verwendet , um den Größenunterschied zwischen alten und neuen Builds zu ermitteln.

Bild
Vergleich der APK - Zugriff über die Schaltfläche in der oberen rechten Ecke

Wir haben Ressourcen und native Bibliotheken sorgfältig durchgesehen und dabei 17 MB gespart, wobei nur sehr wenige Änderungen in der Anwendung vorgenommen wurden. Ich sehe jedoch, dass unsere DEX-Größe rückläufig ist und class2.dex mit 400 KB wächst.

Debuggen von DEX-Problemen


In diesem Fall war der Unterschied auf die Aktualisierung unserer Abhängigkeiten auf neuere Versionen und das Hinzufügen neuer Bibliotheken zurückzuführen. Proguard und Multidex sind bereits in unseren Builds enthalten, daher gibt es nicht viel von dieser DEX-Größe. Der APK Analyzer ist jedoch ein großartiges Tool zum Debuggen von Problemen mit dieser Einstellung, insbesondere wenn Sie Multidex oder Proguard zum ersten Mal für Ihr Projekt aktivieren.

Bild
Anzeigen des Inhalts von classes.dex

Wenn Sie auf eine DEX-Datei klicken, werden Informationen dazu angezeigt, wie viele Klassen und Methoden definiert sind und wie viele allgemeine Methodenreferenzen darin enthalten sind (dies sind die Methoden, die in der 64K-Einschränkung berücksichtigt werden)in einer DEX-Datei). In diesem Beispiel, einem Screenshot, stößt die Anwendung an ihre Grenzen, was bedeutet, dass in naher Zukunft MultiDex benötigt wird, um Klassen in separate Dateien aufzuteilen.

Sie können den Inhalt von Paketen durchsuchen, um festzustellen, welche alle Links verwenden. In diesem Beispiel sehen wir, dass die Hauptgründe für die aufgeblähte DEX-Datei die Support-Bibliothek und die Google Play Services sind.

Bild
Anzahl der Paketverknüpfungen

Nachdem Sie MultiDex aktiviert und die Anwendung kompiliert haben, wird die zweite classes2.dex-Datei (und möglicherweise classes3.dex usw.) angezeigt. Die MultiDex-Lösung im Android-Gradle-Plug-in bestimmt, welche Klassen zum Ausführen Ihrer Anwendung und Ihrer Bereiche erforderlich sind Sie können sie in die Hauptdatei classes.dex kopieren. In seltenen Fällen, in denen dies nicht funktioniert und eine ClassNotFoundException angezeigt wird, können Sie mit dem APK Analyzer die DEX-Dateien überprüfen und dann das Hinzufügen der fehlenden Klassen zur primären DEX-Datei erzwingen .

Ähnliche Probleme treten auf, wenn Sie Proguard aktivieren und Klassen oder Methoden durch Spiegeln oder aus XML-Layouts verwenden. Mit dem APK Analyzer können Sie die Richtigkeit Ihrer Proguard-Konfiguration überprüfen und auf einfache Weise überprüfen, ob sich die Methoden und Klassen in der APK befinden und ob sie umbenannt wurden (wenn sie verschleiert sind). Sie können auch sicherstellen, dass die zu löschenden Klassen tatsächlich gelöscht und nicht im Methodenzähler gezählt werden.

Es würde uns interessieren, welche anderen Anwendungen Sie für APK Analyzer finden und welche anderen Funktionen Sie gerne in dieses Tool integriert sehen würden!

Jetzt auch beliebt: