Ich baue eine Android App mit gradle. Bisher habe ich die Manifest-Datei verwendet, um den versionCode zu erhöhen, aber ich möchte den versionCode aus einer externen Datei lesen und je nachdem, ob es sich um die Release-Version oder die Debug-Version handelt, den versionCode erhöhen. Ich habe die zusätzlichen Eigenschaften ausprobiert, aber Sie können sie nicht speichern, was bedeutet, dass ich beim nächsten Erstellen denselben Versionscode erhalte. Jede Hilfe wäre sehr dankbar!
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'
}
Antworten:
Ich bin sicher, dass es eine Reihe möglicher Lösungen gibt. Hier ist eine:
Dieser Code erwartet eine vorhandene
version.properties
Datei, die Sie vor dem ersten Build von Hand erstellen würdenVERSION_CODE=8
.Dieser Code stößt einfach den Versionscode bei jedem Build an - Sie müssten die Technik erweitern, um Ihren Versionscode pro Geschmack zu verarbeiten.
Sie können das Beispielprojekt für die Versionierung sehen, das diesen Code demonstriert.
quelle
assembleRelease.finalizedBy incrementVersion
oder Ähnliches tut. Ich werde meinen Code veröffentlichen, sobald ich ihn aufgeräumt habe../gradlew incrementVersionCode build
. Auf diese Weise nacheinander aufgerufene Aufgaben werden beendet, sobald eine der Aufgaben fehlschlägt.versionCode getIncrementingVersionCode()
Hier kommt eine Modernisierung meiner vorherigen Antwort, die unten zu sehen ist. Dieser läuft mit Gradle 4.4 und Android Studio 3.1.1 .
Was dieses Skript macht:
projectDir/apk
, um sie zugänglicher zu machen.Dieses Skript erstellt eine Versionsnummer, die aussieht,
v1.3.4 (123)
und erstellt eine APK- Datei wie AppName-v1.3.4.apk .Hauptversion: Muss für größere Änderungen manuell geändert werden.
Nebenversion: Muss für etwas weniger große Änderungen manuell geändert werden.
Patch-Version: Erhöht sich beim Ausführen
gradle assembleRelease
Build-Version: Erhöht jeden Build
Versionsnummer: Wie bei der Patch-Version gilt dies für den Versionscode, den der Play Store für jeden neuen Apk-Upload erhöht haben muss.
Ändern Sie einfach den Inhalt in den Kommentaren mit den Bezeichnungen 1 - 3 unten, und das Skript sollte den Rest erledigen. :) :)
================================================== ==
ERSTE ANTWORT:
Ich möchte, dass der Versionsname ebenfalls automatisch erhöht wird. Dies ist also nur eine Ergänzung zu der Antwort von CommonsWare, die für mich perfekt funktioniert hat. Das funktioniert bei mir
BEARBEITEN:
Da ich etwas faul bin, möchte ich, dass meine Versionierung so automatisch wie möglich funktioniert. Ich möchte eine Build-Version haben , die mit jedem Build zunimmt, während die Versionsnummer und der Versionsname nur zunehmen, wenn ich einen Release-Build erstelle.
Dies ist, was ich im letzten Jahr verwendet habe. Die Grundlagen stammen aus der Antwort von CommonsWare und meiner vorherigen Antwort sowie einigen weiteren. Dies führt zu folgender Versionierung:
Versionsname: 1.0.5 (123) -> Major.Minor.Patch (Build), Major und Minor werden manuell geändert.
In build.gradle:
Patch und versionCode werden erhöht, wenn Sie Ihr Projekt über das Terminal mit 'assemble' , 'assembleRelease' oder 'aR' zusammenstellen , wodurch ein neuer Ordner in Ihrem Projektstamm mit dem Namen apk / RELEASE erstellt wird, sodass Sie nicht durch Build / Outputs schauen müssen / more / more / more um deine apk zu finden.
Ihre Versionseigenschaften müssten folgendermaßen aussehen:
Beginnen Sie natürlich mit 0. :)
quelle
Eine leicht verschärfte Version der hervorragenden Antwort von CommonsWare erstellt die Versionsdatei, wenn sie nicht vorhanden ist:
quelle
if(versionPropsFile.exists())
stellt sicher, dass es nicht explodiert, wenn die Datei nicht vorhanden ist.versionProps.store(versionPropsFile.newWriter(), null)
überschreibt die Datei unabhängig davon, ob sie bereits vorhanden ist.?:
in Groovy bedeutete. Der Elvis-Operator ist eine Abkürzung des ternären Operators.Ich habe mir einige Optionen dazu angesehen und letztendlich entschieden, dass es einfacher ist, nur die aktuelle Zeit für den versionCode zu verwenden, anstatt zu versuchen, den versionCode automatisch zu erhöhen und in mein Revisionskontrollsystem einzuchecken.
Fügen Sie Folgendes hinzu
build.gradle
:Wenn Sie jedoch erwarten, Builds über das Jahr 2696 hinaus hochzuladen, möchten Sie möglicherweise eine andere Lösung verwenden.
quelle
1510351294
:))Eine andere Möglichkeit,
versionCode
automatisch eine zu erhalten, besteht darinversionCode
, die Anzahl der Commits in der ausgechecktengit
Verzweigung festzulegen. Es erreicht folgende Ziele:versionCode
wird automatisch und konsistent auf jedem Computer (einschließlich einesContinuous Integration
und / oderContinuous Deployment
Servers) generiert .versionCode
an GooglePlay übermittelt werden.Verwenden der Gradle-Git- Bibliothek, um die oben genannten Ziele zu erreichen. Fügen Sie Ihrer
build.gradle
Datei im/app
Verzeichnis den folgenden Code hinzu :HINWEIS: Damit diese Methode funktioniert, sollten Sie sie nur aus demselben Zweig (z. B.) im Google Play Store bereitstellen
master
.quelle
Vor kurzem arbeitete ich auf einem gradle Plugin für Android , das macht Erzeugung version und version automatisch. Es gibt viele Anpassungen. Hier finden Sie weitere Informationen dazu https://github.com/moallemi/gradle-advanced-build-version
quelle
Eine andere Option zum Inkrementieren von
versionCode
undversionName
und ist die Verwendung eines Zeitstempels.Ab Januar überschreitet 1 2022 formattedDate = date.format ('yyMMddHHmm') die Kapazität von Ganzzahlen
quelle
Um versionCode nur in der Release-Version zu erhöhen, gehen Sie wie folgt vor:
erwartet eine vorhandene
c://YourProject/app/version.properties
Datei, die Sie vor dem ersten Build von Hand erstellen würdenVERSION_CODE=8
Datei
version.properties
:VERSION_CODE=8
quelle
Erstelle Datei
version.properties
Änderung
build.gradle
:}}
Ausgabe :
1.1.3.6
quelle
Definieren Sie versionName in
AndroidManifest.xml
Innerhalb des
android{...}
Blocksbuild.gradle
der App-Ebene:Außerhalb
android{...}
Block inbuild.gradle
der App-Ebene:Nach dem Erstellen der gesungenen APK:
Hinweis: Wenn Ihre version anders als meine, müssen Sie ändern regex und Extrakt Teile Logik .
quelle
Die oben gezeigten Beispiele funktionieren aus verschiedenen Gründen nicht
Hier ist meine gebrauchsfertige Variante, die auf Ideen aus diesem Artikel basiert:
quelle
Credits an CommonsWare (Akzeptierte Antwort) Paul Cantrell (Datei erstellen, falls nicht vorhanden) ahmad aghazadeh (Versionsname und Code)
Also habe ich all ihre Ideen zusammengebracht und mir das ausgedacht. Dies ist die Drag & Drop-Lösung für genau das, was im ersten Beitrag gefragt wurde.
Der Versionscode und der Versionsname werden automatisch entsprechend dem Versionsstatus aktualisiert. Natürlich können Sie die Variablen verschieben, um sie Ihren Anforderungen anzupassen.
quelle
Mit Gradle Task Graph können wir den Build-Typ überprüfen / wechseln .
Die Grundidee besteht darin, den versionCode bei jedem Build zu erhöhen . Bei jedem Build wird ein Zähler in der Datei version.properties gespeichert. Es wird bei jedem neuen APK-Build auf dem neuesten Stand gehalten und ersetzt die versionCode- Zeichenfolge in der build.gradle- Datei durch diesen inkrementierten Zählerwert .
Platzieren Sie das obige Skript in Ihrer build.gradle-Datei des Hauptmoduls.
Referenz-Website: http://devdeeds.com/auto-increment-build-number-using-gradle-in-android/
Danke & Grüße!
quelle
quelle
In der Gradle 5.1.1-Version auf Mac ive wurde geändert, wie die Aufgabennamen abgerufen wurden. Ich habe zwar versucht, den Build-Geschmack / -Typ aus dem Build zu ermitteln, war aber zu faul, um den Aufgabennamen aufzuteilen:
Code ist von @just_user dieser
quelle
Es gibt zwei Lösungen, die ich wirklich mag. Der erste hängt vom Play Store ab und der andere von Git.
Im Play Store können Sie den Versionscode erhöhen, indem Sie den höchsten verfügbaren hochgeladenen Versionscode anzeigen. Der Vorteil dieser Lösung ist, dass ein APK-Upload niemals fehlschlägt, da Ihr Versionscode immer um eins höher ist als der im Play Store. Der Nachteil ist, dass das Verteilen Ihrer APK außerhalb des Play Store schwieriger wird. Sie können dies mit Gradle Play Publisher einrichten, indem Sie der Kurzanleitung folgen und das Plugin , Versionscodes automatisch aufzulösen :
Mit Git können Sie den Versionscode basierend auf der Anzahl der Commits und Tags in Ihrem Repository erhöhen. Der Vorteil hierbei ist, dass Ihre Ausgabe reproduzierbar ist und von nichts außerhalb Ihres Repos abhängt. Der Nachteil ist, dass Sie ein neues Commit oder Tag erstellen müssen, um Ihren Versionscode zu verbessern. Sie können dies einrichten, indem Sie das Version Master Gradle-Plugin hinzufügen :
quelle