57 votes

Impossible de définir la valeur de la propriété en lecture seule 'outputFile' pour ApkVariantOutputImpl_Decorated

J'ai été en utilisant le code suivant dans mon gradle script pour renommer le apk généré avec AndroidStudio:

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

Il était donc générer apk avec des noms comme: 345-application de libération.apk, où 345 est le versionCode.

Mais après la mise à jour de AndroidStudio 3.0 il renvoie l'erreur suivante:

Impossible de définir la valeur de propriété en lecture seule 'outputFile" pour ApkVariantOutputImpl_Decorated{apkData=Principal{type=PRINCIPAL, fullName=debug, filters=[]}} de type com.android.construire.gradle.interne.l'api.ApkVariantOutputImpl.

Comment puis-je obtenir un semblable renommer avec les nouveaux outils de construction.

112voto

AndrzejSc Points 976

Utilisez output.outputFileName au lieu de output.outputFile

31voto

Zumry Mohamed Points 31

Solution pour Studio 3.0+ et Gradle 3.0+

Pour changer le nom de l'APK dans 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"))
   }
}  
 

Pour Gradle 3.4 +

 android {
   ......
   applicationVariants.all { variant ->
       variant.outputs.all {
           def flavor = variant.name
           def versionName = variant.versionName
           outputFileName = "prefix_${flavor}_${versionName}.apk"
       }
   }
}
 

Le résultat serait comme ça,

prefix_release_1.0.1.apk

14voto

user2190304 Points 111

Essayez ce code:

 buildTypes {

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

    }
 

9voto

Ghanshyam Nayma Points 560

Dans ou après le diplôme 3.1.0

essayez ci-dessous le code

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

1voto

Surbhit Rao Points 130

Dans mon cas, je l'ai résolu en refusant simplement de mettre à jour Gradle 4.4 (dans mon cas). Ainsi, lorsque Studio vous demande (lorsque vous ouvrez votre projet pour la première fois) de mettre à jour Gradle pour qu'il prenne en charge l'exécution instantanée, etc. ça devrait aller.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X