Android Gradle 3.0.0-alpha2 plugin, Impossible de définir la valeur de la propriété en lecture seule ‘outputFile’

j’utilisais ce 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 } } 

pour changer le nom du fichier apk lorsque je construis un nouvel apk, mais depuis que j’utilise Android Studio 3.0 Canary 2 cette erreur apparaît:
Impossible de définir la valeur de la propriété en lecture seule ‘outputFile’ ….

Comme le suggère le guide de migration du plugin Android 3.0 :

  • Utilisez all() au lieu de each()
  • Utilisez outputFileName au lieu de output.outputFile si vous ne modifiez que le nom du fichier (c’est votre cas)

Exemple du guide:

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

Voir ci-dessous:

 applicationVariants.all { variant -> variant.outputs.all { output -> def newApkName = applicationId + "-" + variant.versionName + "(" + variant.versionCode + ")" + ".apk"; outputFileName = new File("${project.projectDir}/../outputs/apks/" + variant.name, newApkName); } } 

Le code ci-dessous fonctionne pour moi sur android studio canary 3.0.0-alpha3

 android.applicationVariants.all { variant.outputs.all { def newApkName newApkName = "APPLICATION_NAME-" + defaultConfig.versionName + "-" + defaultConfig.versionCode".apk" outputFileName = newApkName; } } 

Cela change le nom du fichier apk

Ceci est l’ exemple complet de cette question.

Seulement vous devez coller votre produit 3.0+ après 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" } } 

J’ai fondé Gradle 3.0 n’est plus un travail. lien source

Cependant, les tâches plus complexes qui impliquent l’access aux objects outputFile ne fonctionnent plus. En effet, les tâches spécifiques aux variantes ne sont plus créées lors de la configuration. Cela a pour conséquence que le plug-in ne connaît pas toutes ses sorties, mais cela signifie aussi des temps de configuration plus rapides.

alors j’ai utilisé la commande gradlew pour comstackr project.and cp la sortie apk à mon chemin spécifié

Dans Execute shell, j’ai placé la commande ci-dessous.

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

J’ai eu le même problème. Erreur “Impossible de définir la valeur de la propriété en lecture seule ‘outputFile’ ….”

J’ai donc modifié la version du référentiel de plug-ins Android en 2.3.3 dans la fenêtre Structure du projet. Cela fonctionne maintenant et l’erreur a disparu.

Structure du projet

Plus tard, nettoyez et reconstruisez pour le projet et c’est tout

J’espère que cela vous sera utile.

Après la mise à jour vers Android Studio 3.0.0 et l’utilisation du nouveau gradle, la sortie des apks sera maintenant dissortingbuée dans des répertoires par noms de saveur et types de construction.