Найти в Дзене
Marco Hoffman

Android. Константа, которая видна из всего проекта.

Обычно, при разработке приложений, константы обьявляются либо в коде (если нужны только там), либо в ресурсах (если нужны и там, и в коде). Однако бывает, что одна и та же константа нужна ещё и в манифесте, и в gradle-файлах. Как быть? Тут на помощь нам приходит gradle: (Картинка) А затем воспользоваться возможностью задания ресурсов через gradle: (Картинка) Можно так же добавить эту константу в buildConfig: (Картинка) Но польза этого сомнительна. Дело в том, что ресурсы - существенно более гибкий и безопасный инструмент, который даст нам возможность задать константу, к примеру, для нескольких конфигураций. Чтобы в коде получить строку - достаточно пробросить контекст (что легко решается через Di. (Картинка) Остаётся один вопрос: а как быть с многомодульностью? Или наоборот - если нужная глобальная константа для всего проекта? Тут на помощь приходят properties файлы, которые можно переопределить. А так же отдельный метод, который прочитает и корневой, и локальный файл properties. Всё в

Обычно, при разработке приложений, константы обьявляются либо в коде (если нужны только там), либо в ресурсах (если нужны и там, и в коде).

Однако бывает, что одна и та же константа нужна ещё и в манифесте, и в gradle-файлах. Как быть?

Тут на помощь нам приходит gradle:

  • В манифесте у элементов тоже есть аттрибуты string с возможностью reference. Для них можно использовать обычную ссылку на string. (Картинка)
  • Есть аттрибуты, у которых другой тип, и задать их с помощью xml уже нельзя. Тут на помощь приходит manifestPlaceholders: (картинка)
  • Но с ManifestPlaceholders есть одна проблема: их не видно ни из кода, ни из ресурсов . Чтобы их "подружить" - придётся создать общую константу в gradle, а затем ссылаться на неё из manifestPlaceholders

(Картинка)

А затем воспользоваться возможностью задания ресурсов через gradle:

(Картинка)

Можно так же добавить эту константу в buildConfig:

(Картинка)

Но польза этого сомнительна. Дело в том, что ресурсы - существенно более гибкий и безопасный инструмент, который даст нам возможность задать константу, к примеру, для нескольких конфигураций. Чтобы в коде получить строку - достаточно пробросить контекст (что легко решается через Di.

(Картинка)

Остаётся один вопрос: а как быть с многомодульностью? Или наоборот - если нужная глобальная константа для всего проекта?

Тут на помощь приходят properties файлы, которые можно переопределить. А так же отдельный метод, который прочитает и корневой, и локальный файл properties.

Всё вместе можно оформить даже в мини-плагин. Но писать код плагина не хочу. Благодаря множеству открытых и готовых решений, разработчиков уже пытается заменить нейросеть. Поэтому задачка плагина для глобальных констант - остаётся вам на самостоятельную реализацию!