Где хранить глобальные константы в приложении для Android?

Я бы знал, какая наилучшая практика для хранения глобальных констант, которые могут измениться с помощью среды (debug, preprod, prod, release и т.д.) во время компиляции.

В iOS я использовал все глобальные константы в файле заголовка и менял его с помощью макропроцессора, чтобы увидеть этот ответ:

Где хранить глобальные константы в приложении iOS?

Какое решение я должен использовать для Android?

Ответ 1

Создайте константы класса в папке базового пакета.

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

Заполните его значениями public static final.

Более того, как class, так и interface также могут быть объявлены как abstract.

Ответ 2

Если значения ваших констант зависят от среды (плотность, локаль и т.д.), вы должны использовать ресурсы для их хранения (целое число, строка, размер и т.д.).

В другом случае вы можете поместить свои глобальные константы в один файл (лучшие практики - использовать префиксы для каждого набора констант) или поместить локальные константы в связанные классы (например, Intent содержит флаги, дополнения, категории и т.д.).

Ответ 3

Используйте public static final values. и сохраните их в отдельном файле java следующим образом:

    static String QC    = "http:/************";
    static String DEV   = "http:/************";
    static String CLOUD = "http:/************";


    static String SERVICEURL = CLOUD ; //Use this SERVICEURL in your code at run time

Ответ 4

Другим решением может быть использование файла ресурсов (если вы довольствуетесь сохранением только строковых значений).

Это можно использовать для хранения констант, таких как учетная запись, которой управляет это приложение:

Ex. WelcomeActivity.java

AccountManager am = AccountManager.get(WelcomeActivity.this);
Account account = am.getAccountsByType(getResources().getString(R.string.ACCOUNT_TYPE))[0];

Ex. RES/значения/strings.xml

<resources>
    <string name="ACCOUNT_NAME">com.acme.MyAccountSignature</string>
</resources>

Это также позволит вам изменить это без необходимости перекомпиляции (аналогично тому, как вы обычно отделяете переводы, для которых лучше всего использовать файл strings.xml).