2017-03-07 1 views
1

Ich habe die folgende Aufgabe in meinem Android build.gradle Datei, die kopiert meine gebaut APK-Datei für mich:Android Gradle Plugin Update v2.3.0 Pausen Kopieren Aufgabe

/** 
* Copies the final release APK into the project root folder. 
*/ 
task copyRelease(type: Copy) { 
    // define output files exactly to work around a file locking issue 
    outputs.files.setFrom(file("../app-release.apk")) 

    from "build/outputs/apk/app-release.apk" 
    into ".." 
} 

Diese für eine lange Zeit gearbeitet hat, und brach heute bei Android Studio vorgeschlagenen Update zu tun:

  • Android Gradle Plugin v2.3.0 (von v2.2.3)
  • Gradle v3.3 (von v2.14.1)

die Build jetzt Grade Lauf gibt den folgenden Fehler auf der Linie outputs.files.setfrom(...):

No signature of method: org.gradle.api.internal.tasks.DefaultTaskOutputs$TaskOutputUnionFileCollection.setFrom() is applicable for argument types: (java.io.File) values: [..\app-release.apk] 
Possible solutions: sort() 

Zusammenfassend scheint es, wie TaskOutputUnionFileCollection.setFrom() nimmt nicht mehr File Parameter.

Aber ich weiß nicht, wie dieser Code auf die neue Version zu migrieren und eine look through the source class hat mir nicht geholfen.


Ich habe an der Android Gradle plugin Known Issues page sowie die Gradle 3.3. Release Notes sah und fand keinen direkten Bezug auf diese.

+0

Das „File-Locking Problem“, dass die Bruchlinie zwingt, die ähnlich ist [in diesem Link ausführlich] (https : //discuss.gradle.org/t/build-failure-with-failed-to-capture-snapshot-of-input-files-for-task-war-during-up-to-date-check/9132/8). Der Stammordner des Projekts enthält den Ordner '.gradle'. –

+0

Ich bin auch auf dieses Problem gestoßen und kann es in keiner Dokumentation finden. Konnten Sie einen Workaround finden? – user1088166

+0

@ user1088166 Ich habe die Problemumgehung hinzugefügt, die ich verwendet habe. Was ich brauche, aber wenn Sie eine bessere Lösung finden, zögern Sie nicht, es zu veröffentlichen. –

Antwort

0

Ich konnte keine direkte & genaue Übersetzung des obigen Codes finden, ohne eine Problemumgehung zu implementieren. Das Problem liegt darin, den Stammordner des Projekts für das Ziel des Kopierbefehls zu verwenden.

Die Abhilfe war einen separaten Ordner ..\release und dann der folgende Code funktioniert gut zu erstellen:

/** 
* Copies the final release APK into the project root folder. 
*/ 
task copyRelease(type: Copy) { 
    from "build/outputs/apk" 
    into "../release" 
    include "app-release.apk" 
} 
Verwandte Themen