Да, вы можете иметь gradle.properties
файл в обеих ваших филиалах (вы можете прочитать о свойствах here), containig некоторого свойства, например buildBranchName
. Но значение, присвоенное этому свойству, будет отличаться в каждом плече. Например, в brach1 у вас есть файл gradle.properties в том же каталоге, что и ваш build.gradle сценарий и он имеет свойство
buildBranchName=branch1
внутри. В то же время, gradle.properties файл в branch2 содержит:
buildBranchName=branch2
Тогда, так как у вас есть андроид проект, вы можете использовать опцию в BuildConfig
поколения класса передать эту переменную в вас источники приложений. Вы можете прочитать об этом here, в разделе «Усовершенствование сборки BuildConfig». Все, что вам нужно, чтобы добавить свойство к этому сгенерированного класса для типов сборки, так же, как:
android {
...
buildTypes {
debug {
buildConfigField "String", "BUILD_BRANCH", buildBranchName
}
...
}
}
Затем, во время сборки, окончательный класс BuildConfig
будет сгенерирован и он будет иметь BUILD_BRANCH
поле, вы можете использовать в качестве простого статического поля этого класса.
Кроме того, если у кого-то есть проект без андроида, есть plugin, что позволяет делать то же самое для всех java-проектов.
Stanislav, little edit: я могу получить ветку git в build.gradle следующим образом: https://paste.kde.org/ppnxzmgpk, что, кажется, намного лучшее решение. Я не знал о buildConfigField, который делает эту работу. Спасибо! –
@MikhailKrutov yep, вы можете сделать это с помощью функции exec-type, но IMO, иногда это не лучшее решение, поскольку оно зависит от вызова командной строки удаленного процесса и не содержит фиксированного списка имен brach. Но да, в основном это зависит от требований. Например, у меня есть нечто похожее, но с большим количеством филиалов для разных версий и клиентов. В свойствах у нас есть имя клиента, которое одинаково для нескольких блоков, а имена хранятся как фиксированные и не зависят от имени ветви – Stanislav