Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

change apk filename in gradle failed with gradle:3.0.0-alpha4

I am trying to use android build tools "com.android.tools.build:gradle:3.0.0-alpha4" in my project. In my build script I rename the output apk which worked fine in the past but does not seem to be supported any more.

android {

   productFlavors {
        flavorUnsigned {
            applicationVariants.all { variant ->
                variant.outputs.all { output ->
                    output.outputFile = new File(
                            output.outputFile.parent,
                            output.outputFile.name.replace("app-flavorUnsigned-release-unsigned.apk", "DemoApp-${variant.versionName}($variant.versionCode).apk"))
                    def mappingFile = "${rootDir}/app/build/outputs/mapping/${getCurrentFlavor()}/release/mapping.txt"
                    if (variant.getBuildType().isMinifyEnabled()) {
                        variant.assemble.doLast {
                            copy {
                                from "${mappingFile}"
                                into "${rootDir}/app/build/outputs/apk"
                            }
                        }
                    }
                }
            }
        }

    }
}

But now I am getting this error while building my project

Error:Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=flavorUnsignedDebug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.
like image 396
pk4393 Avatar asked Jun 28 '17 10:06

pk4393


1 Answers

If you want to migrate your project to Android plugin 3.0.0-alpha1 or higher you should be doing the following : API change in variant output:

// If you use each() to iterate through the variant objects,
// you need to start using all(). That's because each() iterates
// through only the objects that already exist during configuration time—
// but those object don't exist at configuration time with the new model.
// However, all() adapts to the new model by picking up object as they are
// added during execution.
android.applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${variant.name}-${variant.versionName}.apk"
    }
}

Read this page to learn how to apply the plugin and adapt your project to some breaking changes.

like image 162
rcde0 Avatar answered Sep 30 '22 05:09

rcde0