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

  • Android Studio Update 0.4.0找不到buildConfig()
  • 升级到Android Studio 2.3后,“包android.support.multidex不存在”
  • Gradle 0.9。+ / 0.9.2错误:无法加载类'com.android.builder.testing.api.DeviceProvider'
  • 在Android Studio中自动将调试器附加到Android进程
  • values-21,values-22或values-xx文件夹在Android Studio 1.0之后不见了
  • Android Studio:无法在检测测试中写入共享首选项
  • Android Studio的调试窗口中“'此'不可用”
  • Android Studio等待构建完成
  • 更新 :修复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"