Android + Gradle: Лучшее место для установки динамических архивовBaseName
В нашем Android-проекте мы хотим, чтобы имя нашего APK содержало такую информацию, как дата, git имя ветки и короткий хеш-код.
Мы установили это как часть нашего defaultConfig
android {
defaultConfig {
setProperty("archivesBaseName", "$projectName.$branchName.$date.$buildNumber.$versionCode-$versionName-$versionSha")
}
}
Это работает большую часть времени, но наша сборка иногда терпит неудачу с ошибками, указывающими на то, что значение устарело (например, после переключения ветвей). Принуждение Gradle Синхронизация в Android Studio обычно исправляет его.
Итак, есть ли лучший, более надежный способ убедиться, что свойство остается в актуальном состоянии и при необходимости синхронизирует Gradle?
Ответы
Ответ 1
попробуйте вызвать clean.execute()
до
android { ... }
это самая дешевая "синхронизация", о которой я могу думать:)
clean.execute()
android {
defaultConfig {
setProperty("archivesBaseName", "$projectName.$branchName.$date.$buildNumber.$versionCode-$versionName-$versionSha")
}
}
Ответ 2
Если во время процесса сборки возникла ошибка, появится окно "Сообщения", чтобы описать проблему. Gradle может рекомендовать некоторые параметры командной строки, которые помогут вам решить проблему, например, --stacktrace или --debug. Чтобы использовать параметры командной строки в процессе сборки:
- Откройте диалоговое окно "Настройки или настройки": в Windows или Linux выберите
Файл > Настройки в главном меню.
- Перейдите к сборке, выполнению, развертыванию > Компилятор.
- В текстовом поле рядом с параметрами командной строки введите параметры командной строки.
- Нажмите OK, чтобы сохранить и выйти.
Gradle применит эти параметры командной строки в следующий раз, когда вы попытаетесь создать приложение.
Я взял информацию из эту страницу.
Ответ 3
У меня была одна и та же проблема, они не всегда соответствовали сборке.
Я решил это, используя:
project.ext.set("archivesBaseName", "myAppName");
в блоке defaultConfig, и у меня возникла проблема.
Не уверен, что он будет работать для ветки, номера сборки или даты, но стоит сделать это.
Здесь мои конфиги, включая блок DefaultConfig. Для моего случая я использовал только жестко закодированное имя versionName и build Number (я называю его versionCode, потому что я его динамически устанавливал). Но, возможно, вы можете настроить его на свои нужды:
defaultConfig {
minSdkVersion 15
targetSdkVersion 22
versionCode System.getenv("BUILD_NUMBER") as Integer ?: 0
versionName "6.2.5." + versionCode
}
project.ext.set("archivesBaseName", "myAppname" + defaultConfig.versionName);