无法在com.android.build.gradle.internal.api.ApplicationVariantImpl上找到属性'outputFile'

时间:2014-11-24 20:59:46

标签: android gradle android-studio android-gradle build.gradle

更新到AS 1.0 RC 1和插件0.14.4后,我在build.gradle的重命名部分出现问题:

applicationVariants.all { variant ->
            def file = variant.outputFile
            variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
        }

现在抛出:

Error:(78, 0) Could not find property 'outputFile' on com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@67e7625f.

并且我也无法跳转到ApplicationVariantImpl类来查看属性是如何重命名的。 有谁知道这方面的解决方法吗?

6 个答案:

答案 0 :(得分:83)

试试这个

applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def file = output.outputFile
        output.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
    }
}

答案 1 :(得分:21)

更全面:

applicationVariants.all { variant ->
    variant.outputs.each  { output ->
        output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
    }
}

答案 2 :(得分:6)

这种情况可能有以下几种原因:

1。)首先如@Khalidov之前所述,尝试

applicationVariants.all { variant ->
    variant.outputs.each { output ->
        output.outputFile = ...
    }
}

2.。)第二次尝试更新所有其他插件。

例如,我遇到Spoon的问题,通过更新Spoon解决了以下问题:

classpath 'com.stanfy.spoon:spoon-gradle-plugin:0.14.1'

答案 3 :(得分:5)

或者只有一个变体:

def apk = outputs[0].outputFile

而不是

def apk = variant.outputFile

答案 4 :(得分:1)

确保你运行最新的gradle版本(不是插件,自己动手)。

检查gradle-wrapper.properties。你在运行gradle 2.1吗?

有关兼容性的更多信息:http://tools.android.com/tech-docs/new-build-system/version-compatibility

答案 5 :(得分:0)

我设法解决如下:

旧:

buildTypes { 
libertação {

    runProguard false  // esta linha tem que ser mudado

    proguardFiles getDefaultProguardFile ( 'android.txt proguard-' ),  'proguard-rules.pro' 
} 

}

新:

buildTypes { 
libertação {

    minifyEnabled false  // nova versão

    proguardFiles getDefaultProguardFile ( 'android.txt proguard-' ),  'proguard-rules.pro' 
} 

}

在您的项目的文件buil.gradle中编辑,如本文由ruan65所述 Error:(26, 0) Gradle DSL method not found: 'runProguard()'

并且在编辑了这一行之后:

applicationVariants . all { variant -> 
variant . outputs . each { output -> 
    def file = output . outputFile 
    output . outputFile =  new  File ( file . parent , file . name . replace ( ".apk" ,  "-"  + defaultConfig . versionName +  ".apk" )) 
} 

}

正如那里所说的那样。 这让我安定下来了!