Tworzę aplikację na Androida za pomocą Gradle. Do tej pory używałem pliku Manifest do zwiększenia versionCode, ale chciałbym odczytać versionCode z pliku zewnętrznego i w zależności od tego, czy jest to smak wydania, czy smak debugowania, zwiększyć versionCode. Wypróbowałem dodatkowe właściwości, ale nie możesz ich zapisać, co oznacza, że następnym razem, gdy go zbuduję, otrzymam ten sam versionCode. Każda pomoc byłaby bardzo mile widziana!
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'
}
Odpowiedzi:
Jestem przekonany, że istnieje wiele możliwych rozwiązań; tutaj jest jeden:
Ten kod oczekuje istniejącego
version.properties
pliku, który należy utworzyć ręcznie przed pierwszą kompilacjąVERSION_CODE=8
.Ten kod po prostu wpływa na kod wersji w każdej kompilacji - musisz rozszerzyć technikę, aby obsłużyć kod wersji dla każdego smaku.
Możesz zobaczyć przykładowy projekt kontroli wersji, który demonstruje ten kod.
źródło
assembleRelease.finalizedBy incrementVersion
lub podobnego. Wyślę swój kod, gdy go uporządkuję../gradlew incrementVersionCode build
. Zadania nazwane w ten sposób sekwencyjnie zatrzymają się, gdy tylko jedno z zadań zakończy się niepowodzeniem.versionCode getIncrementingVersionCode()
Oto unowocześnienie mojej poprzedniej odpowiedzi, które można zobaczyć poniżej. Ten działa z Gradle 4.4 i Android Studio 3.1.1 .
Co robi ten skrypt:
projectDir/apk
aby był bardziej dostępny.Ten skrypt utworzy numer wersji, który wygląda jak
v1.3.4 (123)
i zbuduje plik apk, taki jak AppName-v1.3.4.apk .Wersja główna: W przypadku większych zmian należy ją zmienić ręcznie.
Wersja pomocnicza : W przypadku nieco mniejszych zmian konieczna jest ręczna zmiana.
Wersja poprawki: zwiększa się podczas pracy
gradle assembleRelease
Wersja kompilacji: zwiększa każdą kompilację
Numer wersji: taki sam jak wersja poprawki , dotyczy kodu wersji, który Sklep Play musi zwiększać przy każdym nowym przesłaniu pliku APK.
Po prostu zmień treść w komentarzach oznaczonych 1 - 3 poniżej, a skrypt zajmie się resztą. :)
==================================================== ==
WSTĘPNA ODPOWIEDŹ:
Chcę również, aby nazwa_wersji rosła automatycznie. Więc to tylko dodatek do odpowiedzi autorstwa CommonsWare, która działała idealnie dla mnie. To właśnie działa dla mnie
EDYTOWAĆ:
Ponieważ jestem trochę leniwy, chcę, aby moje wersjonowanie działało tak automatycznie, jak to tylko możliwe. Chcę mieć wersję kompilacji, która rośnie wraz z każdą kompilacją, podczas gdy numer wersji i nazwa wersji zwiększają się tylko wtedy, gdy tworzę wersję wydania.
To jest to, czego używam przez ostatni rok, podstawy pochodzą z odpowiedzi CommonsWare i mojej poprzedniej odpowiedzi, a także kilka innych. Powoduje to następującą wersję:
Nazwa wersji: 1.0.5 (123) -> Major.Minor.Patch (Build), Major i Minor są zmieniane ręcznie.
W build.gradle:
Łata i versionCode zwiększa się, jeśli można zbudować swój projekt poprzez terminal z „zmontować” , „assembleRelease” lub „AR” , który tworzy nowy folder w katalogu głównym projektu o nazwie apk / release, więc nie trzeba patrzeć przez build / wyjść / more / more / more, aby znaleźć swój apk.
Właściwości Twojej wersji powinny wyglądać następująco:
Oczywiście zacznij od 0. :)
źródło
Nieznacznie zaostrzona wersja doskonałej odpowiedzi CommonsWare tworzy plik wersji, jeśli nie istnieje:
źródło
if(versionPropsFile.exists())
zapewnia, że nie wybuchnie, jeśli pliku tam nie ma.versionProps.store(versionPropsFile.newWriter(), null)
nadpisuje plik niezależnie od tego, czy już istnieje.?:
oznacza Groovy. Operator Elvis jest skrócenie operatora potrójnego.Przyjrzałem się kilku opcjom, aby to zrobić, i ostatecznie zdecydowałem, że łatwiej będzie po prostu użyć bieżącego czasu dla versionCode, zamiast próbować automatycznie zwiększać versionCode i sprawdzać go w moim systemie kontroli wersji.
Dodaj do swojego
build.gradle
:Jeśli jednak spodziewasz się przesłać kompilacje po 2696 roku, możesz użyć innego rozwiązania.
źródło
1510351294
:))Innym sposobem
versionCode
automatycznego uzyskania wyniku jest ustawienieversionCode
liczby zatwierdzeń w pobranejgit
gałęzi. Realizuje następujące cele:versionCode
jest generowany automatycznie i konsekwentnie na dowolnym komputerze (w tym na serwerzeContinuous Integration
i / lubContinuous Deployment
serwerze).versionCode
można przesłać do Google Play.Wykorzystanie biblioteki gradle-git do osiągnięcia powyższych celów. Dodaj poniższy kod do swojego
build.gradle
pliku w/app
katalogu:UWAGA: Aby ta metoda zadziałała, najlepiej wdrożyć tylko w sklepie Google Play z tej samej gałęzi (np.
master
).źródło
Ostatnio pracowałem nad wtyczką Gradle dla Androida, która automatycznie generuje kod_wersji i nazwę_wersji . istnieje wiele dostosowań. tutaj możesz znaleźć więcej informacji na ten temat https://github.com/moallemi/gradle-advanced-build-version
źródło
Inną opcją do zwiększania wartości
versionCode
iversionName
jest użycie znacznika czasu.Od 1 stycznia 2022 r. FormattedDate = date.format ('rrMMddHHmm') przekracza pojemność liczb całkowitych
źródło
Aby zwiększyć versionCode tylko w wydaniu, zrób to:
oczekuje istniejącego
c://YourProject/app/version.properties
pliku, który utworzyłbyś ręcznie przed pierwszą kompilacjąVERSION_CODE=8
Plik
version.properties
:VERSION_CODE=8
źródło
Utwórz plik
version.properties
Zmień
build.gradle
:}
Wynik :
1.1.3.6
źródło
Zdefiniuj nazwę wersji w
AndroidManifest.xml
Wewnątrz
android{...}
bloku nabuild.gradle
poziomie aplikacji:Poza
android{...}
blokadąbuild.gradle
poziomu aplikacji:Po utworzeniu podpisanego APK:
Uwaga: Jeśli twoja nazwa_wersji różni się od my, musisz zmienić regex i wyodrębnić logikę części .
źródło
Przykłady pokazane powyżej nie działają z różnych powodów
Oto mój gotowy do użycia wariant oparty na pomysłach z tego artykułu:
źródło
Kredyty dla CommonsWare (zaakceptowana odpowiedź) Paul Cantrell (Utwórz plik, jeśli nie istnieje) ahmad aghazadeh (nazwa i kod wersji)
Więc zebrałem razem wszystkie ich pomysły i wymyśliłem to. To jest rozwiązanie typu „przeciągnij i upuść”, dokładnie o to, o co pytał pierwszy post.
Automatycznie zaktualizuje versionCode i versionName zgodnie ze stanem wydania. Oczywiście możesz przesuwać zmienne w zależności od swoich potrzeb.
źródło
Korzystając z Gradle Task Graph możemy sprawdzić / zmienić typ kompilacji.
Podstawowym pomysłem jest inkrementacja versionCode przy każdej kompilacji. Na każdej kompilacji licznik przechowywany w pliku version.properties . Będzie aktualizowany przy każdej nowej kompilacji APK i zastąpi ciąg versionCode w pliku build.gradle tą zwiększoną wartością licznika.
Umieść powyższy skrypt w pliku build.gradle modułu głównego.
Witryna referencyjna: http://devdeeds.com/auto-increment-build-number-using-gradle-in-android/
Dziękuję i pozdrawiam!
źródło
źródło
w wersji Gradle 5.1.1 na mac ive zmienił się sposób pobierania nazw zadań, chociaż próbowałem uzyskać smak / typ kompilacji z kompilacji, ale byłem zbyt leniwy, aby podzielić nazwę zadania:
kod pochodzi od @just_user tego
źródło
Są dwa rozwiązania, które bardzo mi się podobają. Pierwsza zależy od Sklepu Play, a druga od Gita.
Korzystając ze Sklepu Play, możesz zwiększyć kod wersji, patrząc na najwyższy dostępny przesłany kod wersji. Zaletą tego rozwiązania jest to, że przesyłanie APK nigdy się nie powiedzie, ponieważ kod wersji jest zawsze o jeden wyższy niż w Sklepie Play. Wadą jest to, że dystrybucja pakietu APK poza Sklep Play staje się trudniejsza. Możesz to ustawić za pomocą Gradle Play Publisher, postępując zgodnie z przewodnikiem szybkiego startu i informując wtyczkę, aby automatycznie rozwiązała kody wersji :
Korzystając z Git, możesz zwiększać kod wersji w oparciu o liczbę zatwierdzeń i tagów w repozytorium. Zaletą jest to, że wynik jest odtwarzalny i nie zależy od niczego poza repozytorium. Wadą jest to, że musisz utworzyć nowe zatwierdzenie lub tag, aby podbić kod wersji. Możesz to ustawić, dodając wtyczkę Version Master Gradle :
źródło