Android-приложение/конфигурация бизнес-логики

как разработчик приложения хранит специфичные для приложения (например, адреса моего сервера, конечные точки пути и т. д.) глобальные и создает значения конфигурации, специфичные для вариантов, в приложении для Android? Кроме того, возможно ли иметь переопределения? т.е. я хочу установить значение по умолчанию в моем global.config, но коллизии в staging-build-variant.config и prod-build-variant.config должны переопределить это, в то время как dev-build-variant.config просто использует значение по умолчанию.

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

я задал это как комментарий в этот вопрос, который кажется близким к тому, что я м ищу, но подумал, что задам вопрос для большей экспозиции.

РЕДАКТИРОВАТЬ: возможно, я плохо объяснил это - чтобы уточнить, этот комментарий.


person Justin    schedule 10.06.2016    source источник


Ответы (1)


Джастин, похоже, тебе нужен библиотечный проект. Вам нужно будет создать проект библиотеки с одной конфигурацией по умолчанию. Допустим, этот проект называется Core и у него есть следующий файл strings.xml:

<string name="server_address">htt://path.to.server</string>

Таким образом вы можете создать модуль (названный app1) для проекта, который использует проект библиотеки Core. Затем вы закончите с двумя файлом strings.xml. Таким образом, файл strings.xml из вашего модуля приложения будет переопределять файл strings.xml из проекта библиотеки. Тогда вы можете иметь:

<string name="server_address">htt://app1.path.to.server</string>

Ресурсы: Создание проекта библиотеки

[ОБНОВЛЕНО]

Вместо использования библиотеки вы можете попробовать переменную класса. См. этот вопрос: Переменные Gradle И эта ссылка о вариантах сборки: Варианты сборки

person ikkarion    schedule 10.06.2016
comment
это кажется излишне сложным. чтобы уточнить, пример конкретного значения конфигурации варианта сборки: адрес хоста API. в варианте производственной сборки (который я распространяю среди пользователей, возможно, в чем-то под названием production_config.yaml) я бы хотел использовать api_host: https://api.mysite.com. в варианте сборки dev (который я разрабатываю и собираю локально, возможно, в dev_config.yaml) я мог бы использовать api_host: http://localhost:8080. пример глобального значения конфигурации (возможно, в config.yaml): путь к пользовательскому ресурсу (/users). - person Justin; 14.06.2016
comment
поэтому в коде выполнение Config.get('api_host') + Config.get('users_path') вернет https://api.mysite.com/users в рабочей сборке и http://localhost:8080/users в сборке для разработчиков. - person Justin; 14.06.2016
comment
Джастин, я нашел лучший способ, используя переменные Gradle. Проверьте обновленный ответ. - person ikkarion; 14.06.2016