等级插件3-alpha1 outputFile导致错误

时间:2017-05-18 09:36:11

标签: android android-studio android-gradle

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

build.gradle文件中不再接受以下代码段。

applicationVariants.all { variant ->

    variant.outputs.each { out ->

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

        //...
    }
}

错误很简单"无效"然而intellisense表明它是自动完成的。

检查idea.log会显示以下异常:

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)

我在Gradle 4上找不到任何文档。这可能是一个被弃用的bug或函数吗?

还提交于:https://issuetracker.google.com/issues/38408231

2 个答案:

答案 0 :(得分:23)

更新:修复 APK重命名

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

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

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

  

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

我们需要等待另一种方法,根据Migration Guide

答案 1 :(得分:1)

如果您的失败插件支持显式设置文件路径,则可能是一种解决方法。

我遇到了Fabrics crashlyticsUploadDistributionRelease任务的问题,给了我与上面相同的堆栈跟踪。我通过在app/build.gradle中明确设置输出文件路径属性来修复它:

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