Android Gradle 3.0.0-alpha2 plugin, Cannot set the value of read-only property 'outputFile'

Viewed 43428

i was using this code

applicationVariants.all { variant -> 
    variant.outputs.each { output ->
        def SEP = "_"
        def flavor = variant.productFlavors[0].name
        def buildType = 
        variant.variantData.variantConfiguration.buildType.name
        def version = variant.versionName
        def date = new Date()
        def formattedDate = date.format('ddMMyy_HHmm')
        def newApkName = PROJECT_NAME + SEP + flavor + SEP + buildType + SEP + version + SEP + formattedDate + ".apk"
        def file = new File(newApkName)
        output.outputFile = file
    }
}


to change the name of apk file when i build new apk, but since i use the Android Studio 3.0 Canary 2 this error appear:
Cannot set the value of read-only property 'outputFile'....

8 Answers

This is the complete example of this question.

Only you have to paste in your gradle 3.0+ after productFlavours

    android.applicationVariants.all { variant ->
    variant.outputs.all {

        def SEP = "_"
        def flavor = variant.productFlavors[0].name
        def buildType = variant.variantData.variantConfiguration.buildType.name
        def version = variant.versionName
        def versionCode = variant.versionCode
        def date = new Date();
        def formattedDate = date.format('ddMMyy_HHmm')

        outputFileName = "${flavor}${SEP}${buildType}${SEP}${version}${SEP}${versionCode}${SEP}${formattedDate}.apk"
    }
    }

I founded gradle 3.0 is no longer work. source link

However, more complicated tasks that involve accessing outputFile objects no longer work. That's because variant-specific tasks are no longer created during the configuration stage. This results in the plugin not knowing all of its outputs up front, but it also means faster configuration times.

then I used command gradlew to compile project.and cpthe output apk to my specified path

In Execute shell, i putted below command.

./gradlew clean assembleDebug
cp $WORKSPACE/app/build/outputs/apk/debug/*.apk $WORKSPACE/JenkinsApk

I had the same problem. Error "Cannot set the value of read-only property 'outputFile'....""

So what I did is changing the version of the Android Plugin Repository to 2.3.3 in the Project Structure window. It works now and the error desappearded.

Project Structure

Later, do Clean and Rebuild for the project and that's it

Hope this would be helpful for you.

This is a year and half since the question was asked but maybe this will help someone (like me) who discovers this post first. I believe the answer to change the file name and directory was answered here.

applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def relativeRootDir = output.packageApplication.outputDirectory.toPath()
                     .relativize(rootDir.toPath()).toFile()
            output.outputFileName = new File( "$relativeRootDir/release", newOutputName)
        }
    }

After update to Android Studio 3.0.0 and use the new gradle, now, the output of apks will be distributed in directories by flavors name and build types.

Related