Grade Plugin 3-alpha1 outputFile会导致错误

我正在尝试将项目更新到Android Studio 3。

下面的代码片段不再被build.gradle文件接受。

applicationVariants.all { variant -> variant.outputs.each { out -> def oFile =out.outputFile // This line causes failure //... } } 

该错误是一个简单的“无效”,但intellisense表明,它是autocompletes罚款。

检查idea.log显示以下exception:

 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) 

我可以find没有关于Gradle 4的文档。这是一个错误或function,可能被弃用?

另请提交: https : //issuetracker.google.com/issues/38408231

Solutions Collecting From Web of "Grade Plugin 3-alpha1 outputFile会导致错误"

更新 :修复APK重命名

使用所有迭代器而不是每个

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

以前的答案,仍然有效 :这是新插件已知的问题:

发生此构build错误是因为在configuration阶段不再创build特定于变体的任务。 这导致插件不能预先知道所有的输出,但这也意味着更快的configuration时间。 作为替代,我们将引入新的API来提供类似的function。

根据“ 移民指南” ,我们需要等待另一种方式

如果你的失败的插件支持明确设置文件path,这可能是一个解决办法。

我遇到了面料crashlyticsUploadDistributionRelease任务的问题,给我跟上面一样的堆栈跟踪。 我通过在app/build.gradle显式设置输出文件path属性来修复它:

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