2017-05-18 20 views
9

Próbuję zaktualizować projekt Android Studio 3.klasa Wtyczka 3-alfa1 outputfile powoduje błąd

Poniższy fragment nie jest już akceptowane w pliku build.gradle.

applicationVariants.all { variant -> 

    variant.outputs.each { out -> 

     def oFile =out.outputFile // This line causes failure 

     //... 
    } 
} 

Błąd jest proste „nieważną” jeszcze intellisense sugeruje, że jest ona automatycznie je uzupełnia równie dobrze.

Sprawdzanie idea.log pokazuje następujący wyjątek:

Caused by: java.lang.RuntimeException: Not valid. 
at com.android.ide.common.build.ApkData.getMainOutputFile(ApkData.java:136) 
at com.android.build.gradle.internal.api.BaseVariantOutputImpl.getOutputFile(BaseVariantOutputImpl.java:60) 
at com.android.build.gradle.internal.api.ApkVariantOutputImpl_Decorated.getOutputFile(Unknown Source) 
at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.getProperty(BeanDynamicObject.java:228) 
at org.gradle.internal.metaobject.BeanDynamicObject.tryGetProperty(BeanDynamicObject.java:171) 
at org.gradle.internal.metaobject.CompositeDynamicObject.tryGetProperty(CompositeDynamicObject.java:55) 
at org.gradle.internal.metaobject.AbstractDynamicObject.getProperty(AbstractDynamicObject.java:59) 
at com.android.build.gradle.internal.api.ApkVariantOutputImpl_Decorated.getProperty(Unknown Source) 

mogę znaleźć żadnej dokumentacji na Gradle 4. byłby to błąd lub funkcja, która jest przestarzała może?

złożone także: https://issuetracker.google.com/issues/38408231

Odpowiedz

20

Aktualizacji: Fix do APK zmiana nazwy:

Użyj wszystkie iteratory zamiast każdy:

android.applicationVariants.all { variant -> 
    variant.outputs.all { 
     outputFileName = "${variant.name}-${variant.versionName}.apk" 
    } 
} 

poprzedniej odpowiedzi, nadal ważna: Jest to znany problem z nowej wtyczki:

błąd

Ta kompilacja występuje, ponieważ zadania specyficzne warianty nie są tworzone na etapie konfiguracji. Powoduje to, że wtyczka nie zna wszystkich swoich wyjść z góry, ale także oznacza krótszy czas konfiguracji. Jako alternatywę wprowadzimy nowe API, aby zapewnić podobną funkcjonalność.

Musimy czekać na alternatywny sposób to robić, według Migration Guide.

+0

Niewykorzystany że w dolnej części strony. Dzięki. – Kuffs

+1

Zmiana nazwy pliku APK jest możliwa. Zaktualizowaliśmy tę stronę w nowy sposób. –

1

Jeśli niewłaściwa wtyczka obsługuje jawnie ustawienie ścieżki do pliku, może to być obejście.

Miałem problemy z zadaniem Fabryki crashlyticsUploadDistributionRelease, podając mi ten sam ślad stosu jak powyżej. Naprawiłem go jawnie ustawienie właściwości ścieżki pliku wyjściowego w app/build.gradle:

ext.betaDistributionApkFilePath = "app/build/outputs/apk/release/app-release.apk"