Ich kann einen zerbrechlichen Weg finden, es zu tun, was vielleicht besser ist als gar nicht. Kopieren und fügen Sie den folgenden auf den Grund Ihres Moduls build.gradle Datei ersetzt ANDROID_HOME
mit dem Pfad Ihres Android-SDK-Installation und BUILD_TOOLS_VERSION
mit der gleichen Version angegeben in der buildToolsVersion
Spezifikation des android
Block:
buildscript {
dependencies {
classpath files("/Users/sbarta/sdk/build-tools/21.0.2/lib/dx.jar")
}
}
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
variant.assemble.doLast {
// Show the dex count after the assemble task is finished
showDexCount(
[filename: output.outputFile],
)
}
}
}
def showDexCount(Map... files) {
def maxReferences = (int) Math.pow(2, 16);
def buffer = 5000 // that's for safety, because you can't burn maxReferences
println "\n\n***********************************************************************************"
println "* DEX COUNTS *"
println "***********************************************************************************"
files.each {
def dex = new com.android.dex.Dex(it.filename)
def count = dex.tableOfContents.methodIds.size
if ((maxReferences - count - buffer) >= 0)
println String.format('* %1$5d (there are still %2$5d references to burn...) *',
count, maxReferences - count - buffer)
else
println String.format('* %1$5d !!!WARNING!!! Too many references, please decrease by %2$4d! *',
count, -(maxReferences - count - buffer))
}
println "***********************************************************************************\n"
}
Dies lädt den dex-Code selbst, um die dex-Dateien auszuwerten und die Anzahl der Methoden zu zählen; Es fügt seine Arbeit dem Ende der assemble
Aufgabe im Build-Skript hinzu, so dass Sie es in Befehlszeilen-Builds sehen oder wenn Sie es tatsächlich von Android Studio aus ausführen (wo es in der Gradle-Konsole angezeigt wird).
Ich habe versucht, es widerstandsfähiger zu machen und die Umgebungsvariable ANDROID_HOME zu verwenden, anstatt den Pfad hardcodieren zu müssen, aber die Verwendung von Umgebungsvariablen beim Erstellen von Android Studio ist problematisch (funktioniert aber über die Befehlszeile). In ähnlicher Weise habe ich versucht, die Build-Tool-Version von der anderen Stelle im Build-Skript abrufen zu lassen, auf die verwiesen wird, und ich habe auch versucht, eine globale Konstante zu definieren, konnte aber nicht das Scoping und die Reihenfolge der Ausführung vornehmen. Wenn jemand dies verbessern kann, bitte die Antwort kommentieren oder bearbeiten.
Dies ist von etwas angepasst, das von Carlos Sobrinho geschrieben wurde; Ich kann keine vom Web zugängliche Referenz zum Original finden.
Sie können überprüfen, die Anzahl der Methoden jeder Abhängigkeit in Ihrem Projekt ein Android Studio-Plugin verwendet, überprüfen Sie bitte die Antwort http://StackOverflow.com/Questions/30648172/Gradle-Library-Duplicates-in-dependencies/36056607#36056607 – darwin
gut gibt es eine Möglichkeit, herauszufinden, wie viele Methoden eine Abhängigkeit enthält? – CoDe