3

Ich arbeite in einem Projekt, in dem ich mehrere Bibliotheken wie Google Play Service, Nachrüstung, Gson, Glide, Twitter und Facebook SDK verwende. Was ich also wissen will, ist die genaue Größe jeder Bibliothek in meiner Anwendung. Bitte hilf mir, ob es irgendwelche Möglichkeiten gibt, die Größe im Android Studio zu analysieren. Irgendwelche Werkzeugvorschläge oder Tipps für meine Anforderung wären mir sehr hilfreich. Ich poste die Abhängigkeiten, die ich in meinem build.gradle verwende, wie folgt.Wie man die Größe der Bibliotheken berechnet, die als eine Abhängigkeit im Android-Projekt hinzugefügt wird

compile('com.twitter.sdk.android:twitter:[email protected]') { 
     transitive = true; 
    } 
compile 'com.android.support:appcompat-v7:23.2.1' 
compile 'org.twitter4j:twitter4j-core:4.0.2' 
compile 'com.github.bumptech.glide:glide:3.6.1' 
compile 'com.google.android.gms:play-services-gcm:8.4.0' 
compile 'com.android.support:support-v4:23.2.0' 

Hinweis: Ich bin der Analyse dieser Bericht um die apk Größe meiner Anwendung zu reduzieren, indem die Bibliotheken zu entfernen, die viel Speicher belegt.

Ich bin mit dieser Lösung für die letzten paar Tage völlig fest. Ich habe sogar viel gesucht und konnte keinen optimierten Ansatz finden, um die genaue Größe der Bibliotheken in meinem Projekt zu berechnen.

Bitte helfen. Danke im Voraus.

+1

Nun, sobald sie in Ihrer App sind, werden alle Bibliotheken mit Ihrer APK zusammengeführt und daher ist es schwierig, sie auseinander zu teilen. Sie können sich die Größe der JAR- oder AAR-Dateien sowie die der transitiven Abhängigkeiten ansehen, um eine grobe Schätzung zu erhalten. Zum Beispiel scheint [Glide ~ 465KB] zu sein (http://mvnrepository.com/artifact/com.github.bumptech.glide/glide/3.6.1), während "support-v4: 23.2.1" ~ 1.2 ist MB (plus weitere ~ 19KB für seine 'Support-Annotations' Abhängigkeit). – CommonsWare

+0

Sie könnten einem völlig leeren Android-Projekt einzeln eine Abhängigkeit hinzufügen, ein APK generieren und die Differenz für jedes berechnen. – fractalwrench

+0

@fractalwrench Das ist in Ordnung. Aber auch hier wäre es ein langwieriger Prozess, man muss das Projekt immer wieder neu aufbauen. – Chandru

Antwort

3

nicht sicher, dass es es ist etwas, den Sie suchen, aber das kann irgendwie helfen:

task depsize { 
    doLast { 
     final formatStr = "%,10.2f" 
     final conf = configurations.default 
     final size = conf.collect { it.length()/(1024 * 1024) }.sum() 
     final out = new StringBuffer() 
     out << 'Total dependencies size:'.padRight(45) 
     out << "${String.format(formatStr, size)} Mb\n\n" 
     conf.sort { -it.length() } 
      .each { 
       out << "${it.name}".padRight(45) 
       out << "${String.format(formatStr, (it.length()/1024))} kb\n" 
      } 
     println(out) 
    } 
} 

Die Aufgabe druckt Summe aller Abhängigkeiten und druckt sie mit Größe in kb aus, nach Größe absteigend sortiert.

+0

Hallo @medvedev. Danke für deine Antwort. Ich habe genau das Gleiche gesucht. Ich habe diesen Code in build.gradle (app) eingefügt, aber es wird nichts im Log gedruckt. Habe auch versucht, diese in build.gradle (project) zu kopieren. – Chandru

+0

Das ist seltsam. Ich habe dieses Stück Code von meinem build.gradle kopiert. Um die Ausgabe zu erhalten, führe ich "Gradle Depsize" –

+0

Allerdings funktionierte es für meine nicht-android Build. Habe es nicht mit Android versucht. Das tut mir leid. –

3
task (depsize) << { 
def size = 0; 
configurations._debugApk.collect { it.length()/(1024 * 1024) }.each { size += it } 
println "Total dependencies size: ${Math.round(size * 100)/100} Mb" 

configurations 
     ._debugApk 
     .sort { -it.length() } 
     .each { println "${it.name} : ${Math.round(it.length()/(1024) * 100)/100} kb" } 
} 

Versuchen Sie dies in Ihrem App-Modul gradle.build und dann können Sie direkt von Gradle einlaufen. Wenn Sie alle posissible configuratuions sehen möchten hinzufügen:

configurations 
     .findAll() 
     .each { println "${it.name}" } 
+0

Danke für die Antwort. Können Sie mir bitte mitteilen, wo Sie das hinzufügen können? Sobald es getan ist, werde ich die Antwort akzeptieren, so dass es für andere, die alle nach dieser Anforderung suchen, sehr hilfreich wäre. – Chandru

+0

Ich habe meine Antwort aktualisiert ... Sie können sie am Ende Ihres App-Moduls gradle.build platzieren – David

3

Der einfachste Weg ist es, eine Website nutzen genannt http://www.methodscount.com/, wo man nur die Kompilierung Anweisung einfügen und Sie erhalten alle Größe Details über sie.

Beispiel, wenn ich com.github.paolorotolo einfügen: appintro: 4.1.0 in sie dann bekomme ich dieses Ergebnis:

enter image description here

Es ist nicht für wenige Bibliotheken arbeiten, aber für die meisten der Fälle, es ist Job.