Можно ли объявить переменную в Gradle для использования в Java? По сути, я хотел бы объявить некоторые переменные в build.gradle, а затем получить их (очевидно) во время сборки. Так же, как макросы препроцессора в C / C ++ ...
Пример объявления будет что-то вроде этого:
android {
debug {
A_VAR_RETRIEVABLE_IN_JAVA = 42
}
release {
A_VAR_RETRIEVABLE_IN_JAVA = 42+52
}
}
Есть ли способ сделать что-то подобное?
java
android
gradle
android-gradle-plugin
klefevre
источник
источник
<project>/src/
, если вы создадите этот файлdebug/res/values/strings.xml
и другой файлrelease/res/values/strings.xml
, вы можете установить ресурсы для отладочной и выпускной сборок также немного чище.android
плагина? т.е. просто используяapply plugin java
? Спасибо!Пример использования ключа приложения Api в приложении Android (Java и XML)
gradle.properties
build.gradle
Использование в коде Java
Использование в коде XML
источник
./gradlew -PAppKey="1234" testdebug
defaultConfig
блок: stackoverflow.com/a/51521146/321354@string/APP_KEY_2
Пример использования системных свойств, установленных в build.gradle, чтение из Java-приложения (продолжение вопроса в комментариях):
В основном, используя
test
задачу вbuild.gradle
, с помощью метода тестовой задачиsystemProperty
задайте системное свойство, которое передается во время выполнения:А вот остальная часть примера кода (который вы, вероятно, могли бы вывести, но в любом случае сюда включен): он получает системное свойство
MY-VAR1
, ожидаемое во время выполнения дляVALUE-TEST
:Тестовый случай: если
MY-VAR
не установлен, тест должен провалиться:Выполнить (примечание: тест пройден):
Я обнаружил, что сложная часть на самом деле получает выходные данные из gradle ... Итак, здесь настраивается ведение журнала (slf4j + logback), и в файле журнала отображаются результаты (в качестве альтернативы run
gradle --info cleanTest test
; есть также свойства, которые получают stdout для консоль, но, вы знаете, почему)Если вы закомментируете "
systemProperty...
" (что, кстати, работает только вtest
задаче), то:Для полноты вот конфиг logback (
src/test/resources/logback-test.xml
):файлы:
build.gradle
src/main/java/example/HelloWorld.java
src/test/java/example/HelloWorldTest.java
src/test/resources/logback-test.xml
источник
version = '0.0.1-SNAPSHOT'
через Java-код?systemProperty
действительно имеет смысл только для тестирования, поэтому я понимаю, почему они сделали это таким образом (это не упущение), но в то же время я также попытался использовать gradle для вещей, для которых он не предназначен (например, для DSL приложения). ) так что я могу определить. В качестве альтернативы, я бы порекомендовал просто загрузить свойства из файла свойств (или службы конфигурации и т. Д.), Потому что, если он не находится в «тестовом» режиме, то это «производственный» режим и требует логики приложения. (Во всяком случае, это теория.)Вы можете создать поле конфигурации сборки, которое можно переопределить с помощью системных переменных среды во время сборки:
Fallback используется при разработке, но вы можете переопределить переменную при запуске сборки на Jenkins или другом инструменте.
В вашем приложении build.gradle :
Переменная будет доступна как
BuildConfig.SERVER_URL
.источник
Ответ rciovati полностью верен. Я просто хотел добавить еще один тидбит, в котором вы также можете создавать переменные для каждого типа сборки в части конфигурации по умолчанию вашего build.gradle. Это будет выглядеть так:
Это позволит вам иметь доступ к через
Просто хотел бы отметить этот сценарий, если вы хотите общий конфиг.
источник
Я использую этот код и работаю очень хорошо.
}
источник
Как вы можете вставить результат String функции в buildConfigField
Вот пример даты сборки в удобочитаемом формате:
источник
я использую
Он основан на ответе Денниса, но получает его из переменной окружения.
источник
Ни один из приведенных выше ответов не дал мне никаких указаний, поэтому мне пришлось потратить два часа на изучение Groovy Methods.
Я хотел быть в состоянии пойти против производства, песочницы и местной среды. Поскольку я ленивый, я хотел изменить URL только в одном месте. Вот что я придумал:
Альтернативный синтаксис, потому что вы можете использовать только
${variable}
с двойными кавычками в Groovy Methods.Мне было трудно понять, что строки должны быть объявлены как строки, заключенные в кавычки. Из-за этого ограничения я не мог использовать ссылку
API_HOST
напрямую, что я и хотел сделать в первую очередь.источник