2017-11-17 2 views
0

Also ich bin mir sicher, dass dies etwas sehr dumm Fehler ist, aber ich brauche deine Hilfe, da ich kein Groß-Experte bin.Benutzerdefinierte Graples Task wird auch während der Synchronisierung ausgeführt

AUFGABE: Version lesenCode aus der Datei fügen Sie +1 hinzu und speichern Sie es zurück. So

task executeOrderSixtySix { 
def versionPropsFile = file('versionCodes.properties') 
if (versionPropsFile.canRead()) { 
    def Properties versionProps = new Properties() 

    versionProps.load(new FileInputStream(versionPropsFile)) 

    def versionNumber = versionProps['DEV_VERSION'].toInteger() + 1 
    versionProps['DEV_VERSION'] = versionNumber.toString() 
    versionProps.store(versionPropsFile.newWriter(), null) 

    //  'assembleDebug' 

} else { 
    throw new GradleException("Nyeeeh on versionCodes.properties!") 
}} 

, wenn ich einen internen Tropfen zu tun haben, würde Ich mag diese Aufgabe ausgeführt werden soll zunächst, erhöhen Sie die devVersion Zahl von 1 und führen Sie dann die ‚zusammenbauen‘ Aufgabe, alle Artefakte zu bauen.

PROBLEM: Diese Aufgabe wird ausgeführt, selbst wenn ich nur die Cradle-Datei synchronisiere, die die ganze Zeit zu einem erhöhten versionCode führt.

Ich möchte nicht den Versionscode während der Synchronisierung, Entwicklung Build nur für QAdrop, wenn ich auch jedes APK zusammenbauen muss.

Könnten Sie mir bitte helfen und mir sagen, warum diese Aufgabe angerufen/ausgeführt wird und wer kann ich verhindern?

+0

als Aushilfe Lösung, die ich diese hinzugefügt, wenn ('executeOrderSixtySix' in gradle.startParameter.taskNames) { ......}, der gut arbeitet, aber ich tun Ich glaube, es sollte einen besseren Weg geben. – Karoly

Antwort

1

Sie benötigen einen doLast Block innerhalb Ihres Taskblocks. Die build.gradle-Datei ist ein Konfigurationsskript, das so gelesen wird, als würde sie den Task bei der Konfiguration deklarieren und die Aktion für die Ausführung deklarieren.

Alles, was in der Task vor oder nach dem doLast-Block ausgeführt wird, würde während der Konfigurationszeit ausgeführt werden. Der Code im doLast-Block selbst wird zur Ausführungszeit ausgeführt.

task executeOrderSixtySix { 
    doLast { 
     def versionPropsFile = file('versionCodes.properties') 
     if (versionPropsFile.canRead()) { 
      def Properties versionProps = new Properties() 

      versionProps.load(new FileInputStream(versionPropsFile)) 

      def versionNumber = versionProps['DEV_VERSION'].toInteger() + 1 
      versionProps['DEV_VERSION'] = versionNumber.toString() 
      versionProps.store(versionPropsFile.newWriter(), null) 

      //  'assembleDebug' 

     } else { 
      throw new GradleException("Nyeeeh on versionCodes.properties!") 
     } 
    } 
} 

Ref: https://www.oreilly.com/learning/write-your-own-custom-tasks-in-gradle

+0

Danke, werde es versuchen. Wen kann ich von hier aus grundlegende Build-Aufgaben nennen? Wie zum Beispiel AssembledDebug? – Karoly

+0

können Sie dependsOn verwenden, um die Abhängigkeit dieser Aufgabe zu definieren. Wenn Sie dies nach dem assemblyDebug ausführen möchten, dann können Sie 'task executeOrderSixtySix (dependsOn: assembleDebug) 'schreiben – Emma

+0

Ich würde gerne vorher ausführen, also diese Aufgabe die Versionsnummer erhöhen und assembleDebug wird die neue Nummer aus der Datei auswählen! – Karoly

Verwandte Themen