2016-05-19 17 views
4

Neulich habe ich "App Info" von einer App untersucht, die ich entwickle, und zu meiner Überraschung stellte ich fest, dass eine riesige Menge an MB als "Cache" verwendet wurde. (Die App hat noch keinen Inhalt heruntergeladen, es war nur ein Modell). Zuerst dachte ich, ich könnte ein paar schwere Bibliotheken sein, die ich hinzugefügt hatte (Fresko ...), also beschloss ich, ein leeres Projekt zu erstellen, um herauszufinden, wo das Problem lag.Enormer Apk-Unterschied zwischen Gradle v1.x vs v2.x

Ich habe 2 Szenarien ausprobiert: Pre-Lollipop und Lollipop. Damit habe ich herausgefunden, dass es einen Unterschied in der Art und Weise gibt, wie sie mit "Daten" umgehen, aber die Gesamtgröße der Apk war die gleiche. Obwohl hier, in Pre-Lollipop (4.4.4) gab es fast keinen "Cache" (ERSTES BILD) in Lollipop ... gut 8 MB "Cache".

lollipop vs pre-lollipop - gradle 2.1

All dies war nicht genug, da die anderen apps, die ich in Lutscher entwickelt hatte und oben hatte viel weniger „Cache“. Ich habe angefangen darüber nachzudenken, was den Unterschied ausmachen könnte, und schließlich denke ich, dass ich etwas gefunden habe, eine klassische Version!

lollipop vs pre-lollipop - gradle 1.5

Das Projekt bauen mit gradle 1.5 kleinere apk Größe hat und so gut wie keine "Cache" (beide Lutscher und Pre-Lutscher)
Gibt es etwas, was ich vermisst habe? Warum der plötzliche Anstieg der "Cache" -Größe.
Gibt es eine Möglichkeit, dies zu vermeiden, während Sie die neueste Version verwenden?

+1

Verwenden Sie Android Studio? Wenn dies der Fall ist, versuchen Sie erneut, die Tests mit dem Android-Plug-in für Gradle 2.x und mit Instant Run sowohl aktiviert als auch deaktiviert auszuführen, um die beiden Szenarien zu vergleichen. Meine Vermutung ist, dass das, was Sie sehen, die Effekte von Instant Run sind, und das wird nicht das Verhalten Ihrer tatsächlichen Produktions-App widerspiegeln. – CommonsWare

+0

** Sie haben absolut Recht !!! ** Ich dachte, das könnte das Problem sein, aber nicht überprüft: P. **Vielen Dank** – iroyo

Antwort

1

Instant Run liefert inkrementelle Teile Ihrer App und spiegelt Änderungen wider, die Sie am Code vorgenommen haben. Das Zeug muss immer noch von Ihrer App geladen werden können, also legen sie diese Informationen anscheinend an einem Ort ab, der als "Cache" (getCacheDir()?) Gezählt wird.

In ähnlicher Weise wird die Haupt-APK Ihrer App selbst ein bisschen größer sein, da sie einen Teil des Codes enthalten muss, der weiß, wie diese dynamisch wechselnden Bits geladen werden.

Wenn Sie diese Werte messen müssen, deaktivieren Sie entweder Instant Run oder führen Sie einen Releasebuild aus (der nicht automatisch ausgeführt wird).

Verwandte Themen