2016-12-11 5 views
2

Ich habe 3 Konfigurationen zu Gradle Aromen hinzugefügt. Und ich füge ihnen einige Zip-Abhängigkeiten hinzu. Ich entpacke diese Zip-Datei nach preBuild. Das Problem ist, dass meine Unzip-Task immer auch Gradle-Datei oder Abhängigkeiten nicht geändert wird. Diese Dekomprimierungsaufgabe benötigt Zeit und ich entwickle die ndk-Anwendung. Jedes Mal, wenn ich meine statischen Bibliotheken mit meiner unzip-Aufgabe ändere, denkt gradle, dass sich die Bibliotheken geändert haben, damit sie wieder aufgebaut wird.Gradle führt immer Aufgabe

Ich möchte die Ausführung von Unzip-Task blockieren, wenn Gradle-Datei nicht geändert wird. Dies sieht wie ein kleiner Cache-Mechanismus aus. Hier ist meine Aufgabe.

dependencies { 
    compile "com.google.android.gms:play-services:9.4.0" 
    compile 'com.android.support:multidex:1.0.0' 
    compile 'com.android.support:appcompat-v7:24.+' 
    compile 'com.android.support:design:24.+' 
    compile fileTree(dir: 'src/main/libs', include: ['*.jar']) 
    alphaCompile 'my alpha release static library from private maven repository in zip type' 
    betaCompile 'my beta release static library from private maven repository in zip type' 
    prodCompile 'my prod release static library from private maven repository in zip type' 
} 


task unzip(group: "Static Libraries", description: "Unzip all static libraries") { 
    doFirst{ 
     // get zip files from configurations 
     // unzip and move static libraries to destination folder 
     } 
    } 
} 
preBuild.finalizedBy (unzip) 
+0

Sie schließen den wichtigsten Teil Ihrer Frage aus - den Hauptteil der 'doFirst'-Methode. Sie deklarieren keine Eingaben/Ausgaben für Ihre Aufgabe, daher kann Gradle nichts über seine aktuelle Überprüfung wissen. – mkobit

+0

Okay, ich verstehe, ich muss lernen, Zyklus Lebenszyklus. Ich sah Großbuchstaben Dokumentation, aber es sieht kompliziert aus.Kann mir sagen, wie kann ich I/O zu meiner benutzerdefinierten Aufgabe mit doFisrt() definieren? –

+0

Sie werden Ihre Aufgabe _configuration_ im Block '{}' für die Aufgabendefinition definieren wollen. Dieser Teil wird in der Phase _configuration_ ausgeführt. Wenn Sie dort eine Konfiguration definieren, werden Probleme auftreten (siehe [diese Seite im Benutzerhandbuch] (https://docs.gradle.org/current/userguide/potential_traps.html#mkdirTrap)). Ich werde daran arbeiten, die Frage ein wenig zu beantworten. – mkobit

Antwort

1

Es ist schwer, Ihnen eine genaue Antwort zu geben, weil Sie den Code in Ihrem doFirst Block ausgeschlossen haben, aber es sieht aus wie Sie die Copy Aufgabe nutzen können, wenn Sie nur Konfigurationsdateien bekommen und sie dann woanders unzipping:

tasks.create('unzip', Copy) { 
    dependsOn configurations.alphaCompile 
    from { 
    project.configurations.alphaCompile.collect { zipTree(it) } 
    } 
    into project.file("${project.buildDir}/unzipDir/") 
} 

Wenn Sie benötigen eine eigene Aufgabe zu definieren, müssen Sie Ein- und Ausgänge während der configuration Phase registrieren, indem Sie Task.getInputs() und Task.getOutputs() so dass Gradle von vor der Ausführung überprüfen.

+0

Okay ich verstehe was ich vermisst habe. Aber jetzt Grapple löst Ausnahme: Konnte nicht Methode unzip() für Argumente finden [unzip, Klasse org.gradle.api.tasks.Copy, build_4mrnler6ctu70k48fsy3b1k5d $ _run_closure5 @ 1d372b43] auf Projekt –

+0

Haben Sie Zitate um 'unzip'? Ich erstelle die Aufgabe hier mit dem Aufgabencontainer und nicht so, wie Sie in Ihrem Beispiel beschleunigen. – mkobit

+0

Entschuldigung für meine späte Antwort. Deine Antwort ist richtig, es hat mir sehr geholfen. Vielen Dank! :) –