Я создаю приложение для Android с помощью gradle. До сих пор я использовал файл манифеста для увеличения versionCode, но я хотел бы прочитать versionCode из внешнего файла и, в зависимости от того, является ли это разновидностью выпуска или разновидностью отладки, увеличить versionCode. Я пробовал дополнительные свойства, но вы не можете их сохранить, а это значит, что при следующем построении я получу тот же код версии. Любая помощь будет очень высоко ценится!
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'
}
Ответы:
Я уверен, что существует множество возможных решений; вот один:
Этот код ожидает существующего
version.properties
файла, который вы создадите вручную перед первой сборкойVERSION_CODE=8
.Этот код просто увеличивает код версии при каждой сборке - вам нужно будет расширить технику для обработки кода версии для каждого аромата.
Вы можете увидеть образец проекта управления версиями , демонстрирующий этот код.
источник
assembleRelease.finalizedBy incrementVersion
или что-то подобное. Я отправлю свой код, как только приведу его в порядок../gradlew incrementVersionCode build
. Задачи, вызываемые таким образом последовательно, будут остановлены, как только какая-либо из задач завершится ошибкой.versionCode getIncrementingVersionCode()
А вот и модернизация моего предыдущего ответа, который можно увидеть ниже. Этот работает с Gradle 4.4 и Android Studio 3.1.1 .
Что делает этот скрипт:
projectDir/apk
чтобы сделать его более доступным.Этот скрипт создаст номер версии, которая выглядит как
v1.3.4 (123)
и создаст файл apk, например AppName-v1.3.4.apk .Основная версия: необходимо изменить вручную для больших изменений.
Дополнительная версия: необходимо изменить вручную для чуть менее значительных изменений.
Версия патча: Увеличивается при запуске
gradle assembleRelease
Версия сборки: увеличивает каждую сборку
Номер версии: такой же, как версия патча , это код версии, который Play Store должен увеличивать для каждой новой загрузки apk.
Просто измените содержание в комментариях, отмеченных 1–3 ниже, а все остальное сделает сценарий. :)
================================================== ==
ПЕРВОНАЧАЛЬНЫЙ ОТВЕТ:
Я хочу, чтобы имя версии также увеличивалось автоматически. Так что это просто дополнение к ответу CommonsWare, который отлично сработал для меня. Это то, что работает для меня
РЕДАКТИРОВАТЬ:
Поскольку я немного ленив, я хочу, чтобы управление версиями работало максимально автоматически. То , что я хочу иметь билд , который увеличивается с каждой сборкой, в то время как номер версии и версия Имя только увеличиваются , когда я делаю сборку выпуска.
Это то, что я использовал в течение прошлого года, основы взяты из ответа CommonsWare и моего предыдущего ответа, а также некоторых других. Это приводит к следующему управлению версиями:
Название версии: 1.0.5 (123) -> Major.Minor.Patch (Build), Major и Minor меняются вручную.
В build.gradle:
Patch и VersionCode увеличиваются , если вы собираете свой проект через терминал «сборка» , «assembleRelease» или «Аr» , который создает новую папку в корневом каталоге проекта под названием APK / RELEASE , поэтому вам не нужно просматривать сборки / выходы / more / more / more, чтобы найти свой apk.
Свойства вашей версии должны выглядеть так:
Очевидно, начать с 0. :)
источник
Слегка усиленная версия отличного ответа CommonsWare создает файл версии, если он не существует:
источник
if(versionPropsFile.exists())
гарантирует, что он не взорвется, если файла нет.versionProps.store(versionPropsFile.newWriter(), null)
перезаписывает файл независимо от того, существует ли он уже.?:
виду в Groovy. Оператор Элвиса - это сокращение от тернарного оператора.Я рассмотрел несколько вариантов, чтобы сделать это, и в конечном итоге решил, что проще просто использовать текущее время для versionCode вместо того, чтобы пытаться автоматически увеличивать versionCode и проверять его в моей системе контроля версий.
Добавьте в свой
build.gradle
:Однако, если вы планируете загружать сборки после 2696 года, вы можете использовать другое решение.
источник
1510351294
:))Другой способ
versionCode
автоматического получения - установкаversionCode
количества коммитов в провереннойgit
ветке. Он решает следующие задачи:versionCode
генерируется автоматически и последовательно на любой машине (включая серверContinuous Integration
и / илиContinuous Deployment
).versionCode
может быть отправлено в GooglePlay.Использование библиотеки gradle-git для достижения вышеуказанных целей. Добавьте код ниже в свой
build.gradle
файл в/app
каталог:ПРИМЕЧАНИЕ. Чтобы этот метод работал, лучше всего развертывать в Google Play Store только из той же ветки (например
master
).источник
Недавно я работал над плагином gradle для Android, который автоматически генерирует versionCode и versionName . есть много настроек. здесь вы можете найти больше информации об этом https://github.com/moallemi/gradle-advanced-build-version
источник
Другой вариант увеличения
versionCode
иversionName
- использование метки времени.Начиная с 1 января 2022 года formattedDate = date.format ('yyMMddHHmm') превышает допустимую для целых чисел
источник
Чтобы увеличить versionCode только в версии выпуска, выполните следующие действия:
ожидает, что существующий
c://YourProject/app/version.properties
файл, который вы создадите вручную перед первой сборкой, будет иметьVERSION_CODE=8
Файл
version.properties
:VERSION_CODE=8
источник
Создать файл
version.properties
Изменить
build.gradle
:}
Вывод :
1.1.3.6
источник
Определить versionName в
AndroidManifest.xml
Внутренний
android{...}
блок наbuild.gradle
уровне приложения:Внешний
android{...}
блок наbuild.gradle
уровне приложения:После создания подписанного APK:
Примечание. Если ваше имя версии отличается от моего, вам нужно изменить регулярное выражение и извлечь логику частей .
источник
Приведенные выше примеры не работают по разным причинам.
Вот мой готовый вариант, основанный на идеях из этой статьи:
источник
Кредиты для CommonsWare (принятый ответ) Пол Кантрелл (Создайте файл, если он не существует) ахмад агазаде (название и код версии)
Так что я объединил все их идеи и придумал это. Это решение перетаскивания в точности то, о чем просил первый пост.
Он автоматически обновит versionCode и versionName в соответствии со статусом выпуска. Конечно, вы можете перемещать переменные в соответствии со своими потребностями.
источник
Используя Gradle Task Graph, мы можем проверить / переключить тип сборки.
Основная идея - увеличивать код версии для каждой сборки. При каждой сборке счетчик сохраняется в файле version.properties . Он будет обновляться при каждой новой сборке APK и заменять строку versionCode в файле build.gradle этим увеличенным значением счетчика.
Поместите приведенный выше скрипт в файл build.gradle основного модуля.
Справочный веб-сайт: http://devdeeds.com/auto-increment-build-number-using-gradle-in-android/
С уважением!
источник
источник
в версии Gradle 5.1.1 на Mac ive изменил способ получения имен задач, хотя я пытался получить тип / тип сборки из сборки, но мне было лень разделить имя задачи:
код от @just_user этот
источник
Мне очень нравятся два решения. Первый зависит от Play Store, а другой - от Git.
Используя Play Store, вы можете увеличить код версии, посмотрев на самый высокий доступный код загруженной версии. Преимущество этого решения в том, что загрузка APK никогда не завершится ошибкой, поскольку код вашей версии всегда на единицу выше, чем код версии в Play Store. Обратной стороной является то, что распространять APK за пределами Play Store становится сложнее. Вы можете настроить это с помощью Gradle Play Publisher, следуя руководству по быстрому запуску и указав плагину автоматически разрешать коды версий :
Используя Git, вы можете увеличивать код версии в зависимости от того, сколько коммитов и тегов имеет ваш репозиторий. Преимущество здесь в том, что ваш результат воспроизводится и не зависит от чего-либо, кроме вашего репо. Обратной стороной является то, что вам нужно сделать новую фиксацию или тег, чтобы увеличить код вашей версии. Вы можете настроить это, добавив плагин Version Master Gradle :
источник