Je crée une application Android avec gradle. Jusqu'à présent, j'utilisais le fichier Manifest pour augmenter le versionCode, mais j'aimerais lire le versionCode à partir d'un fichier externe et, selon qu'il s'agit de la version de version ou de la version de débogage, augmenter le versionCode. J'ai essayé les propriétés supplémentaires, mais vous ne pouvez pas les enregistrer, ce qui signifie que la prochaine fois que je le construis, j'obtiens le même versionCode. Toute aide serait très appréciée!
project.ext{
devVersionCode = 13
releaseVersionCode = 1
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
dependencies {
compile project(':Cropper')
compile "com.android.support:appcompat-v7:18.0.+"
compile "com.android.support:support-v4:18.0.+"
compile fileTree(dir: 'libs', include: '*.jar')
}
def getReleaseVersionCode() {
def version = project.releaseVersionCode + 1
project.releaseVersionCode = version
println sprintf("Returning version %d", version)
return version
}
def getDevVersionCode() {
def version = project.devVersionCode + 1
project.devVersionCode = version
println sprintf("Returning version %d", version)
return version
}
def getLastVersioName(versionCode) {
return "0.0." + versionCode
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 9
targetSdkVersion 19
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
buildTypes {
release {
runProguard true
proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
proguardFile 'proguard.cfg'
debuggable false
signingConfig null
zipAlign false
}
debug {
versionNameSuffix "-DEBUG"
}
}
productFlavors {
dev {
packageName = 'com.swisscom.docsafe.debug'
versionCode getDevVersionCode()
versionName getLastVersioName(project.devVersionCode)
}
prod {
packageName = 'com.swisscom.docsafe'
versionCode getReleaseVersionCode()
versionName getLastVersioName(project.releaseVersionCode)
}
}
}
task wrapper(type: Wrapper) {
gradleVersion = '1.8'
}
Réponses:
Je suis sûr qu'il existe un certain nombre de solutions possibles; en voici une:
Ce code attend un
version.properties
fichier existant , que vous créeriez à la main avant la première compilationVERSION_CODE=8
.Ce code renverse simplement le code de version sur chaque build - vous devrez étendre la technique pour gérer votre code de version par saveur.
Vous pouvez voir l'exemple de projet de contrôle de version qui illustre ce code.
la source
assembleRelease.finalizedBy incrementVersion
ou quelque chose de similaire. Je publierai mon code une fois que je l'aurai rangé../gradlew incrementVersionCode build
. Les tâches appelées séquentiellement de cette manière s'arrêteront dès que l'une des tâches échouera.versionCode getIncrementingVersionCode()
Voici une modernisation de ma réponse précédente qui peut être vue ci-dessous. Celui-ci fonctionne avec Gradle 4.4 et Android Studio 3.1.1 .
Ce que fait ce script:
projectDir/apk
le rendre plus accessible.Ce script créera un numéro de version qui ressemble à
v1.3.4 (123)
et construira un fichier apk comme AppName-v1.3.4.apk .Version majeure: doit être modifiée manuellement pour des changements plus importants.
Version mineure: doit être modifiée manuellement pour des modifications légèrement moins importantes.
Version du correctif: augmente lors de l'exécution
gradle assembleRelease
Version de build: augmente chaque build
Numéro de version: identique à la version du correctif , il s'agit du code de version dont le Play Store doit avoir augmenté pour chaque nouveau téléchargement d'apk.
Changez simplement le contenu dans les commentaires étiquetés 1 à 3 ci-dessous et le script devrait faire le reste. :)
=================================================== ==
RÉPONSE INITIALE:
Je veux que le nom de version augmente également automatiquement. Ce n'est donc qu'un ajout à la réponse de CommonsWare qui a parfaitement fonctionné pour moi. C'est ce qui fonctionne pour moi
ÉDITER:
Comme je suis un peu paresseux, je veux que ma gestion des versions fonctionne aussi automatiquement que possible. Ce que je veux, c'est avoir une version de build qui augmente avec chaque build, tandis que le numéro de version et le nom de la version augmentent uniquement lorsque je crée une version de version.
C'est ce que j'utilise depuis un an, les bases sont tirées de la réponse de CommonsWare et de ma réponse précédente, ainsi que d'autres. Cela entraîne le contrôle de version suivant:
Nom de la version: 1.0.5 (123) -> Major.Minor.Patch (Build), Major et Minor sont modifiés manuellement.
Dans build.gradle:
Patch et versionCode est augmenté si vous assemblez votre projet via le terminal avec 'assemble' , 'assembleRelease' ou 'aR' qui crée un nouveau dossier dans la racine de votre projet appelé apk / RELEASE afin que vous n'ayez pas à regarder à travers build / output / plus / plus / plus pour trouver votre apk.
Les propriétés de votre version devraient ressembler à ceci:
Commencez évidemment par 0. :)
la source
Une version légèrement améliorée de l'excellente réponse de CommonsWare crée le fichier de version s'il n'existe pas:
la source
if(versionPropsFile.exists())
garantit qu'il n'explose pas si le fichier n'est pas là.versionProps.store(versionPropsFile.newWriter(), null)
écrase le fichier, qu'il existe déjà ou non.?:
signifiait Groovy. L' opérateur Elvis est un raccourcissement de l'opérateur ternaire.J'ai examiné quelques options pour ce faire, et j'ai finalement décidé qu'il était plus simple d'utiliser simplement l'heure actuelle pour le versionCode au lieu d'essayer d'incrémenter automatiquement le versionCode et de l'enregistrer dans mon système de contrôle de révision.
Ajoutez ce qui suit à votre
build.gradle
:Cependant, si vous prévoyez de télécharger des versions au-delà de l'année 2696, vous souhaiterez peut-être utiliser une solution différente.
la source
1510351294
:))Une autre façon d'obtenir un
versionCode
automatiquement est de définirversionCode
le nombre de commits dans lagit
branche extraite. Il atteint les objectifs suivants:versionCode
est généré automatiquement et de manière cohérente sur n'importe quelle machine (y compris unContinuous Integration
et / ouContinuous Deployment
serveur ).versionCode
peut être soumise à GooglePlay.Utilisation de la bibliothèque gradle-git pour atteindre les objectifs ci-dessus. Ajoutez le code ci-dessous à votre
build.gradle
fichier le/app
répertoire:REMARQUE: Pour que cette méthode fonctionne, il est préférable de ne déployer sur Google Play Store qu'à partir de la même branche (par exemple
master
).la source
Récemment , je travaillais sur un plugin gradle pour Android qui rend la génération codeVersion et versionName automatiquement. il y a beaucoup de personnalisation. ici vous pouvez trouver plus d'informations à ce sujet https://github.com/moallemi/gradle-advanced-build-version
la source
Une autre option, pour incrémenter le
versionCode
et leversionName
, consiste à utiliser un horodatage.À partir du 1er janvier 2022, formattedDate = date.format ('aaMMddHHmm') dépasse la capacité des nombres entiers
la source
Pour incrémenter versionCode uniquement dans la version commerciale, procédez comme suit:
attend un
c://YourProject/app/version.properties
fichier existant , que vous créeriez à la main avant la première compilationVERSION_CODE=8
Fichier
version.properties
:VERSION_CODE=8
la source
Créer un fichier
version.properties
Changement
build.gradle
:}
Production :
1.1.3.6
la source
Définir versionName dans
AndroidManifest.xml
android{...}
Blocage intérieurbuild.gradle
du niveau de l'application:android{...}
Blocage extérieur aubuild.gradle
niveau de l'application:Après avoir créé l'APK chanté:
Remarque: Si votre versionName est différent de my, vous devez modifier l' expression régulière et extraire la logique des parties .
la source
Les exemples ci-dessus ne fonctionnent pas pour différentes raisons
Voici ma variante prête à l'emploi basée sur les idées de cet article:
la source
Crédits à CommonsWare (Réponse acceptée) Paul Cantrell (Créer un fichier s'il n'existe pas) ahmad aghazadeh (Nom et code de la version)
Alors j'ai écrasé toutes leurs idées ensemble et j'ai trouvé ça. C'est la solution de glisser-déposer pour exactement ce que le premier message a demandé.
Il mettra automatiquement à jour le versionCode et la versionName en fonction de l'état de la version. Bien sûr, vous pouvez déplacer les variables pour répondre à vos besoins.
la source
En utilisant Gradle Task Graph, nous pouvons vérifier / changer type de construction.
L'idée de base est d'incrémenter le versionCode sur chaque build. Sur chaque build un compteur stocké dans le fichier version.properties . Il sera mis à jour à chaque nouvelle version d'APK et remplacera la chaîne versionCode dans le fichier build.gradle par cette valeur de compteur incrémentée.
Placez le script ci-dessus dans votre fichier build.gradle du module principal.
Site Web de référence: http://devdeeds.com/auto-increment-build-number-using-gradle-in-android/
Merci et salutations!
la source
la source
dans la version Gradle 5.1.1 sur mac, ive a changé la façon dont les noms de tâches ont été récupérés, j'ai bien essayé d'obtenir la saveur / le type de construction à partir de la construction mais j'étais trop paresseux pour diviser le nom de la tâche:
le code provient de @just_user celui-ci
la source
Il y a deux solutions que j'aime vraiment. Le premier dépend du Play Store et l'autre dépend de Git.
En utilisant le Play Store, vous pouvez incrémenter le code de version en regardant le code de version téléchargé le plus élevé disponible . L'avantage de cette solution est qu'un téléchargement d'APK n'échouera jamais puisque votre code de version est toujours supérieur à ce qui se trouve sur le Play Store. L'inconvénient est que la distribution de votre APK en dehors du Play Store devient plus difficile. Vous pouvez configurer cela à l'aide de Gradle Play Publisher en suivant le guide de démarrage rapide et en demandant au plugin de résoudre automatiquement les codes de version :
À l'aide de Git, vous pouvez incrémenter le code de version en fonction du nombre de validations et de balises de votre référentiel. L'avantage ici est que votre sortie est reproductible et ne dépend de rien en dehors de votre dépôt. L'inconvénient est que vous devez créer un nouveau commit ou une nouvelle balise pour modifier votre code de version. Vous pouvez configurer cela en ajoutant le plugin Version Master Gradle :
la source