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")
}
}