J'ai mis à jour mon Android Studio aujourd'hui vers la version 3.3 fournie avec le plugin Gradle version 4.10.1.
Auparavant, mon build.gradle renommait mes apk avec ce code à la structure suivante:
app-{buildType[release|debug]}-{flavor[prod|stage]}-{versionName[1.2.4]-{versionCode[43]}.apk
app-release-prod-1.1.4-45.apk .
android.applicationVariants.all { variant -> def flavor = variant.flavorName variant.outputs.all { output -> def builtType = variant.buildType.name def versionName = variant.versionName def versionCode = variant.versionCode outputFileName = "app-${flavor}-${builtType}-${versionName}-${versionCode}.apk" } } outputs: app--release-1.0.4-88.apk
Mais j'ai eu cette erreur après la mise à jour.
AVERTISSEMENT: l'API 'variantOutput.getPackageApplication ()' est obsolète et a été remplacée par 'variant.getPackageApplicationProvider ()'. Il sera supprimé à la fin de 2019. Pour plus d'informations, voir https://d.android.com/r/tools/task-configuration-avoidance . Pour déterminer ce qui appelle variantOutput.getPackageApplication (), utilisez -Pandroid.debug.obsoleteApi = true sur la ligne de commande pour afficher une trace de pile. Modules concernés: application
Le problème se situe au niveau de output.outputFile.name car vous ne pouvez pas accéder aux données de sortie sur cette version du plugin.
Jusqu'à présent, j'ai essayé cette approche sans succès.
applicationVariants.all { variant -> variant.flavors*.name.all { flavor -> outputFileName = "${flavor}-${variant.buildType.name}-${variant.versionName}-${variant.versionCode}.apk".replace("-unsigned", "") } }
Une idée?
=================================================== =====
MISE À JOUR
J'ai repris cette question, j'ai essayé l'extrait suivant, mais je rencontre des problèmes pour récupérer la saveur de cette variante.
applicationVariants.all { variant -> variant.outputs.all { output -> outputFileName = output.outputFile.name.replace(".apk", "-${variant.versionName}-${variant.versionCode}.apk").replace("-unsigned", "") } }
Merci
8 Réponses :
Vous pouvez le faire comme ceci:
defaultConfig { ... project.ext.set("archivesBaseName", applicationId + "_V" + versionName + "("+versionCode+")_" + new Date().format('dd-MM mm')); }
Merci, cela pourrait être une option, mais j'aime aussi avoir la saveur sur mon nom apk. Voudrait conserver la structure de nom apk précédente.
pour renommer la version, vous pouvez le faire comme ceci
defaultConfig { project.ext.set("archivesBaseName", 'yourappname' + "_V" + defaultConfig.versionCode ); }
L'avertissement output.outputFile
lorsque vous utilisez output.outputFile
afin que votre réponse aboutisse au même avertissement.
Pouvez-vous essayer ci-dessous.
applicationVariants.all { variant -> variant.outputs.all { output -> outputFileName = outputFileName.replace(".apk", "-${variant.versionName}-${variant.versionCode}.apk").replace("-unsigned", "") } }
En utilisant la méthode setProperty , vous pouvez renommer votre nom .apk.
Tu peux le faire.
android { compileSdkVersion 28 defaultConfig { applicationId "com.expertBrains.abc" minSdkVersion 17 targetSdkVersion 28 versionCode 75 versionName "2.6.15" multiDexEnabled true setProperty("archivesBaseName", "(" + versionName + ") "+ new Date().format( 'yyyy-MM-dd HH:mm' )) } }
J'espère que cela pourrait aider. Je ne peux pas dire que c'est la meilleure façon, mais cela fonctionne.
productFlavour{ uat { versionName "2.8.74" buildConfigField("String", "ENVIRONMENT", '"uat"') setProperty("archivesBaseName", "iotg-uat-v" + versionName) } staging { versionName "2.9.4" buildConfigField("String", "ENVIRONMENT", '"staging"') setProperty("archivesBaseName", "iotg-staging-v" + versionName) } }
applicationVariants.all { variant -> variant.outputs.all { def appName = "AppName" def buildType = variant.variantData.variantConfiguration.buildType.name def newName = "${appName}${defaultConfig.versionName}_${buildType}.apk" outputFileName = newName } } Below code will generate apk file name as AppName1.2.0_buildType.apk
Essaye ça:
android.applicationVariants.all { variant -> variant.outputs.all { output -> def builtType = variant.buildType.name def versionName = variant.versionName def versionCode = variant.versionCode def flavor = variant.flavorName outputFileName = "app-${flavor}-${builtType}-${versionName}-${versionCode}.apk" } }
Cela génère le nom apk suivant: app-release-myFlavor-0.0.1-1.apk.
Fonctionne comme un charme
Comme mentionné dans les commentaires, la bonne façon était d'utiliser ${variant.getFlavorName()}.apk
variant.baseName
ou variant.baseName
.
éventuellement lié: stackoverflow.com/questions/54206898/...
Avez-vous essayé
${variant.getFlavorName()}.apk
variant.baseName
ouvariant.baseName
?variant.baseName c'est la même chose que variant.buildType.name, il imprime "release". Mais variant.getFlavorName () a fait le travail. De plus, variant.flavorName fonctionne aussi mais a eu un petit problème avec l'autre partie du fichier gradle et n'a pas fonctionné, maintenant c'est le cas. Merci.
@GensaGames si vous postez la réponse, je vous donnerai volontiers la prime
Salut @axierjhtjz voir ce commentaire stackoverflow.com/a/58373100/2448013
@GensaGames pourriez-vous s'il vous plaît poster votre commentaire comme réponse? C'est la première réponse correcte à la question que j'ai posée.
@axierjhtjz Désolé pour le changement de lieu de travail occupé) heureux que vous ayez résolu votre problème)