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:
- Tworzy plik version.properties , jeśli żaden nie istnieje (zagłosuj poniżej na odpowiedź Paula Cantrella, skąd wziąłem pomysł, jeśli podoba ci się ta odpowiedź)
- W przypadku każdej kompilacji, wersji debugowania lub dowolnego naciśnięcia przycisku uruchamiania w Android Studio liczba VERSION_BUILD wzrasta.
- Za każdym razem, gdy tworzysz wydanie, Twój kod wersji Androida dla sklepu Play rośnie, a numer poprawki rośnie.
- Bonus: po zakończeniu kompilacji kopiuje Twój apk,
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 .
Major version ⌄ ⌄ Build version
v1.3.4 (123)
Minor version ⌃|⌃ Patch version
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 pracygradle 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ą. :)
android {
compileSdkVersion 27
buildToolsVersion '27.0.3'
def versionPropsFile = file('version.properties')
def value = 0
Properties versionProps = new Properties()
if (!versionPropsFile.exists()) {
versionProps['VERSION_PATCH'] = "0"
versionProps['VERSION_NUMBER'] = "0"
versionProps['VERSION_BUILD'] = "-1" // I set it to minus one so the first build is 0 which isn't super important.
versionProps.store(versionPropsFile.newWriter(), null)
}
def runTasks = gradle.startParameter.taskNames
if ('assembleRelease' in runTasks) {
value = 1
}
def mVersionName = ""
def mFileName = ""
if (versionPropsFile.canRead()) {
versionProps.load(new FileInputStream(versionPropsFile))
versionProps['VERSION_PATCH'] = (versionProps['VERSION_PATCH'].toInteger() + value).toString()
versionProps['VERSION_NUMBER'] = (versionProps['VERSION_NUMBER'].toInteger() + value).toString()
versionProps['VERSION_BUILD'] = (versionProps['VERSION_BUILD'].toInteger() + 1).toString()
versionProps.store(versionPropsFile.newWriter(), null)
// 1: change major and minor version here
mVersionName = "v1.0.${versionProps['VERSION_PATCH']}"
// 2: change AppName for your app name
mFileName = "AppName-${mVersionName}.apk"
defaultConfig {
minSdkVersion 21
targetSdkVersion 27
applicationId "com.example.appname" // 3: change to your package name
versionCode versionProps['VERSION_NUMBER'].toInteger()
versionName "${mVersionName} Build: ${versionProps['VERSION_BUILD']}"
}
} else {
throw new FileNotFoundException("Could not read version.properties!")
}
if ('assembleRelease' in runTasks) {
applicationVariants.all { variant ->
variant.outputs.all { output ->
if (output.outputFile != null && output.outputFile.name.endsWith('.apk')) {
outputFileName = mFileName
}
}
}
}
task copyApkFiles(type: Copy){
from 'build/outputs/apk/release'
into '../apk'
include mFileName
}
afterEvaluate {
assembleRelease.doLast {
tasks.copyApkFiles.execute()
}
}
signingConfigs {
...
}
buildTypes {
...
}
}
==================================================== ==
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
defaultConfig {
versionCode code
versionName "1.1." + code
minSdkVersion 14
targetSdkVersion 18
}
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:
...
android {
compileSdkVersion 23
buildToolsVersion '23.0.1'
def versionPropsFile = file('version.properties')
if (versionPropsFile.canRead()) {
def Properties versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
def value = 0
def runTasks = gradle.startParameter.taskNames
if ('assemble' in runTasks || 'assembleRelease' in runTasks || 'aR' in runTasks) {
value = 1;
}
def versionMajor = 1
def versionMinor = 0
def versionPatch = versionProps['VERSION_PATCH'].toInteger() + value
def versionBuild = versionProps['VERSION_BUILD'].toInteger() + 1
def versionNumber = versionProps['VERSION_NUMBER'].toInteger() + value
versionProps['VERSION_PATCH'] = versionPatch.toString()
versionProps['VERSION_BUILD'] = versionBuild.toString()
versionProps['VERSION_NUMBER'] = versionNumber.toString()
versionProps.store(versionPropsFile.newWriter(), null)
defaultConfig {
versionCode versionNumber
versionName "${versionMajor}.${versionMinor}.${versionPatch} (${versionBuild}) Release"
minSdkVersion 14
targetSdkVersion 23
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
def fileNaming = "apk/RELEASES"
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
output.outputFile = new File(getProject().getRootDir(), "${fileNaming}-${versionMajor}.${versionMinor}.${versionPatch}-${outputFile.name}")
}
}
}
}
} else {
throw new GradleException("Could not read version.properties!")
}
...
}
...
Ł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:
VERSION_NUMBER=1
VERSION_BUILD=645
VERSION_PATCH=1
Oczywiście zacznij od 0. :)