update tools studio full configurar actualizar android android-gradle

android - tools - No se puede establecer el valor de la propiedad de solo lectura ''outputFile'' para ApkVariantOutputImpl_Decorated



install gradle android studio (6)

En o después de gradle 3.1.0

intente código debajo

applicationVariants.all { variant -> variant.outputs.all { output -> outputFileName = new File( "release_build", // here you can change the name output.outputFile.name) } }

Estaba usando el siguiente código en mi script de gradle para cambiar el nombre de los apks generados con AndroidStudio:

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

Entonces generaba apks con nombres como: 345-app-release.apk , donde 345 es el código de versión.

Pero después de actualizar a AndroidStudio 3.0, devuelve el siguiente error:

No se puede establecer el valor de la propiedad de solo lectura ''outputFile'' para ApkVariantOutputImpl_Decorated {apkData = Main {type = MAIN, fullName = debug, filters = []}} de tipo com.android.build.gradle.internal.api.ApkVariantOutputImpl.

¿Cómo puedo lograr un cambio de nombre similar con las nuevas herramientas de construcción?


Solución para Studio 3.0+ y Gradle 3.0+

Para cambiar el nombre del APK en Android

applicationVariants.all { variant -> variant.outputs.each { output -> output.outputFileName = new File(output.outputFile.parent, output.outputFile.name.replace("app-release.apk", "Your_name.apk")) } }


En mi caso, lo resolví simplemente negándome a actualizar a Gradle 4.4 (en mi caso). Por lo tanto, cuando Studio le pregunta (cuando abre su proyecto por primera vez) que actualice Gradle para que sea compatible con la ejecución instantánea, etc. simplemente se niega y usted debería estar bien.


Prueba este código:

buildTypes { applicationVariants.all { variant -> variant.outputs.each { output -> def name = "myapp_v${variant.versionName}(${variant.versionCode}).apk" output.outputFileName = name } } }


Use output.outputFileName lugar de output.outputFile


cambie su código en: -

applicationVariants.all { variant -> variant.outputs.each { output -> output.outputFile = new File(output.outputFile.parent, "${variant.applicationId}-${variant.versionName}.apk") } }