Comment définir versionName en APK nom de fichier à l'aide de gradle?
Je suis en train de définir un numéro de version dans le gradle auto-généré nom de fichier APK.
Maintenant gradle génère myapp-release.apk
mais je veux qu'il ressemble à quelque chose comme myapp-release-1.0.apk
.
J'ai essayé de changer les options qui semble en désordre. Est-il un moyen simple de faire cela?
buildTypes {
release {
signingConfig signingConfigs.release
applicationVariants.each { variant ->
def file = variant.outputFile
variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
}
}
J'ai essayé le code ci-dessus avec pas de chance. Toutes les suggestions?
(à l'aide de gradle 1.6)
Vous devez vous connecter pour publier un commentaire.
Je n'ai qu'à changer le nom de la version en un seul endroit. Le code est simple aussi.
Les exemples ci-dessous permettra de créer des fichiers apk nommé nommé MyCompany-MyAppName-1.4.8-debug.apk ou MyCompany-MyAppName-1.4.8-libération.apk en fonction de la construction de la variante sélectionnée.
Noter que cette solution fonctionne sur les deux APK et App Faisceaux (.aab fichiers).
Voir Aussi: Comment faire pour modifier le proguard de mappage de nom de fichier dans gradle pour projet Android
Solution pour les Dernières Plugin Gradle
La solution ci-dessus a été testé avec la suivante Android Plugin Gradle Versions:
Je vais mettre à jour ce post que de nouvelles versions sortent.
Solution Testée Uniquement sur les versions 1.1.3-1.3.0
La solution suivante a été testé avec les suivants Android Plugin Gradle Versions:
application gradle fichier:
setProperty("archivesBaseName", "MyCompany-MyAppName-$versionName")
setProperty("archivesBaseName", "MyCompany-MyAppName-$versionName-$date")
semble proche de ce que vous demandez et bien qu'il semble générer apk avec la date dans le nom de fichier, android studio ne peut pas installer automatiquement entre eux, jetant chemin d'accès Local n'existe pas dans mes tests. Je me demande pourquoi vous voulez ce, en premier lieu, que gradle construit, lorsqu'il est utilisé avec git sont répétables. Avoir des estampilles sur un binaire ne pas vraiment me dire quelque chose sur le code utilisé pour les générer.setProperty("archivesBaseName", "MyCompany-MyAppName-$versionName")
dans votredefaultConfig
fonctionne bien avec gradle:1.5.0 plugin.applicationName
dans le gradle.propriétés fichier et l'utiliser dans la construction.gradle comme suit:setProperty("archivesBaseName", "$applicationName-$versionName")
. Ou vous pouvez utiliser le$applicationId
variablevariant.buildType.name
pour le nom? Je sais que ce n'est pas vraiment la configuration par défaut de l'connexes, mais je suis à essayer de comprendre comment faire pour supprimer le obsolètesvariantOutput.getAssemble()
avertissementCela a résolu mon problème: à l'aide de
applicationVariants.all
au lieu deapplicationVariants.each
Mise à jour:
De sorte qu'il semble que cela ne fonctionne pas avec les 0.14+ versions d'android studio plugin gradle.
Cela fait l'affaire (de Référence de cette question
) :
versionName
défini dansAndroidManifest.xml
au lieu de gradle config? Il me donnemyapp-release-null.apk
maintenant.variant.outputs.each { output -> output.setOutputFile(new File (file.parent, some_new_filename) }
each
àall
etoutput.outputFile
àoutputFileName
. Si quelqu'un confims cela fonctionne, il peut être édité dans la réponse 🙂Error:(34, 0) Cannot set the value of read-only property 'name'
output -> def newName = outputFileName; newName.replace(".apk", "-${variant.versionName}.apk"); outputFileName = new File(newName)
output -> outputFileName = "${variant.name}-${variant.versionName}.apk"
. J'ai ajouté un réponse dans lequel il semble beaucoup plus claire.(MODIFIÉ pour fonctionner avec Android Studio 3.0 et Gradle 4)
Je cherchais un plus complexe apk nom de fichier renommer option et j'ai écrit celui-ci dans l'espoir qu'il est utile pour quelqu'un d'autre. Il renomme le fichier apk avec les données suivantes:
Il m'a fallu un peu de recherche en gradle classes et un peu de copier/coller à partir d'autres réponses. Je suis à l'aide de gradle 3.1.3.
Dans la construction.gradle:
Si vous compilez aujourd'hui (13-10-2016) à 10:47, vous obtenez les noms de fichier suivants, selon le goût et le type de construction que vous avez choisi:
Remarque: le non alignés version apk nom est toujours celui par défaut.
each
àall
etoutput.outputFile
àoutputFileName
" - ce poste fournit quelques détails à ce sujet: stackoverflow.com/a/44265374/2162226Pour résumer, pour ceux qui ne savent pas comment importer un package dans
build.gradle
(comme moi), utiliser labuildTypes
,===== EDIT =====
Si vous définissez votre
versionCode
etversionName
dans votrebuild.gradle
fichier comme ceci:Vous devez la définir comme ceci:
====== EDIT avec Android Studio 1.0 ======
Si vous utilisez Android Studio 1.0, vous obtiendrez un message d'erreur comme ceci:
Vous devez changer le
build.Types
partie à cette question:Si vous ne spécifiez pas versionName dans defaultconfig.ini.php bloquer ensuite
defaultConfig.versionName
entraîneranull
pour obtenir versionName de manifeste, vous pouvez écrire le code suivant dans la construction.gradle:
Dans mon cas, je voulais juste trouver un moyen d'automatiser la génération de différents
apk
nom pourrelease
etdebug
variantes. J'ai réussi à le faire facilement en mettant ce fragment comme un enfant deandroid
:Pour le nouveau Android plugin gradle 3.0.0 vous pouvez faire quelque chose comme ça:
Ce produire quelque chose comme :
My_nice_name_3.2.31_dbg.apk
Gradle 4
La syntaxe a changé un peu dans Gradle 4 (Android Studio 3+) (à partir de
output.outputFile
àoutputFileName
, idée de cette réponse est maintenant:Une autre alternative est d'utiliser les éléments suivants:
Ce sera mis en "appname-1.0.0" pour tous vos apk sorties.
No such property: archivesBaseName for class: org.gradle.api.internal.project.DefaultProject_Decorated
La bonne façon de renommer apk, comme par @Jon répondre
Ou d'une autre façon vous pouvez obtenir les mêmes résultats avec
Il y a beaucoup de réponses sont correctes, soit en totalité ou après quelques modifications. Mais je vais ajouter le mien en tout cas depuis que j'ai eu le problème avec toutes car j'ai été en utilisant des scripts pour générer VersionName et VersionCode dynamiquement par accrochage dans le
preBuild
tâche.Si vous utilisez une approche similaire, c'est le code qui fonctionne:
À expliquer: Depuis que je suis primordial code de version et le nom de la première action de
preBuild
j'ai du ajouter le renommage de fichiers à la fin de cette tâche. Donc, ce que gradle va faire dans ce cas est:Injecter version de code/nom-> ne paquetage actions -> remplacez le nom de l'apk
Dans mon cas, je résoudre cette erreur de cette façon
l'ajout d'un SUFFIXE à la version Debug, dans ce cas, je l'ajout de la "DEBUG" texte à mon Debug déployer
Pour les dernières gradle versions, vous pouvez utiliser l'extrait de code suivant:
Définir votre manifeste de l'application de l'emplacement de la première
Et plus tard dans la construction.gradle
Ajuster si vous avez des différents manifestes par type de build. mais depuis que je suis le seul - fonctionne parfaitement pour moi.
Comme de Android Studio 1.1.0, j'ai trouvé cette combinaison a travaillé dans le android corps de la
build.gradle
fichier. C'est, si vous ne pouvez pas comprendre comment faire pour importer le fichier manifeste xml de données. Je voudrais qu'il était plus pris en charge par Android Studio, mais juste jouer avec les valeurs jusqu'à ce que vous obtenir le désiré apk nom de sortie: