2015-09-01 10 views
6

In den letzten Tagen habe ich versucht, die Bauzeit für unser Projekt ohne Glück zu verbessern. Es macht mir nichts aus, 1m40s auf einen sauberen Build warten zu müssen, aber wenn ich eine Zeile in eine einzelne Java-Datei einfüge, bekomme ich dieselbe Build-Zeit wie in einem sauberen Build. Ich muss etwas falsch machen, aber ich kann einfach keine Dokumentation oder Stack-Overflow-Frage finden, die mich in die richtige Richtung weist. Es ist mir gelungen, eine Reihe von Informationen zu sammeln, die ich hier zentralisieren werde, in der Hoffnung, dass jemand mit einem besseren Verständnis des Themas mir erklärt, warum ich diese abgrundtiefen Bauzeiten bekomme.Android Studio - Gradel inkrementeller Build

Hier geht es:

  • Ich verstehe, dass diese Option in meiner build.gradle Datei ist das, was ich suche.

    android { 
        dexOptions { 
         incremental true 
        } 
    ... 
    

    Glorious inkrementeller Build. Dies funktioniert jedoch anscheinend nicht für mich, da mein Projekt die Multidex-Funktion für die Retrokompatibilität mit Android-Versionen vor Lollipop verwendet.

  • Proguard zur Rettung! Mit Proguard kann ich meine ausführbare Datei minimieren und alle unbenutzten Methoden entfernen. Ich habe mit proguard minify ein paar Fehler bekommen, aber ich konnte es richtig einstellen und es funktioniert. Groß! Dex-Generation dauert etwa 20 für jeden Build. Leider ist nichts umsonst, und die Progrard-Graples-Aufgabe dauert ungefähr 2m50s. Noch schlimmer als mein erster Fall.

Gibt es eine Lösung für dieses Problem?

+0

Ist die Aktivierung von 'offline arbeiten' in Global Gradle Einstellungen hilfreich? – nhaarman

+0

Leider nein. Die Aufgabe, die in meinem Build-Prozess wirklich zeitaufwendig ist, ist die dex-Generierung. Das Abrufen der Abhängigkeiten ist eigentlich ziemlich schnell. –

Antwort

10

Endlich eine Lösung gefunden. Es war die ganze Zeit in den offiziellen Dokumenten, ich brauchte nur ein tieferes Verständnis des Build-Prozesses, um zu verstehen, was gesagt wurde.

Inkrementelle Builds und Multidex sind in der Tat inkompatible Optionen. Für SDK-Versionen sind 21+ inkrementelle Builds für Multidex-APKs möglich, indem nur die betroffenen Dex-Dateien neu erstellt werden. Weitere Informationen finden Sie hier:

http://developer.android.com/tools/building/multidex.html

+0

Haben Sie erwogen, BUCK zu verwenden? https://www.google.com/search?q=buck+facebook&ie=utf-8&oe=utf-8 –

+0

Ich werde es untersuchen, danke für den Vorschlag! Ich bin mir nicht sicher, ob ich es bei der Arbeit verwenden kann, aber ich werde es sicherlich bei meinem persönlichen Projekt versuchen. –

3

Ich habe keine direkte Antwort haben wie Sie das Problem mit Gradle zu lösen, aber ich habe einen Vorschlag, die Sie erhöhen die Geschwindigkeit Ihrer baut helfen könnte.

Kürzlich habe ich das gleiche Problem: unser Build dauerte fast 4 Minuten. Ich habe verschiedene Build-Optionen ausprobiert, bin aber nicht zu nennenswerten Gewinnen gekommen.

Nach ein paar Recherchen stoße ich auf Jrebel for Android. Es ist etwas wie "Instant Run" auf Steroiden. Es unterstützt viele Arten von Änderungen (UI, Methoden, Felder usw.) und aktualisiert die Anwendung in Echtzeit, ohne die Aktivität neu zu erstellen (daher den Status zu speichern). Normalerweise dauert es zehn bis dreißig Sekunden, um irgendeine Art von Änderung vorzunehmen.

Das Tool ist nicht kostenlos, aber sie bieten verschiedene Preisoptionen und Test-Konto, so dass Sie es ausprobieren können. Es funktioniert wie gewohnt Plugin für Android Studio oder Eclipse und die Installation ist sehr einfach.

aktualisieren

Jetzt noch freie Version sie haben: link to post

0

ich heute diese Option versucht (13. November 2017) und bekam die folgende Build-Warnung:

Achtung: Die android.dexOptions.incremental Eigenschaft ist veraltet und hat keine Auswirkungen auf den Build-Prozess.

Ich googelte dann für die Warnmeldung und die Antwort bestätigte, dass seit einem neueren Gradle-Release der Eintrag veraltet ist. Siehe android.dexOptions.incremental property is deprecated