Установите постоянное значение с помощью gradle

Я просто перешел в систему сборки android gradle, и мне не ясно, как установить постоянные значения.

например. У меня

API.java, который содержит

BASE_URL = "http://debug.server.com"

но когда gradle строит выпуск, мне нужно BASE_URL быть "http://release.server.com"

Как заменить это значение на время сборки?

Ответ 1

Gradle генерирует класс с именем BuildConfig, который содержит статические члены (такие как boolean DEBUG, для которых заданы значения true для вариантов отладки).

Вы можете запросить это в java следующим образом:

if (BuildConfig.DEBUG) {
    BASE_URL = "http://debug.server.com"
} else {
    BASE_URL = "http://release.server.com"
}

или то же самое, что и однострочный:

BASE_URL = BuildConfig.DEBUG ? "http://debug.server.com" : "http://release.server.com"

ИЛИ

Фактически вы можете установить BASE_URL внутри класса BuildConfig с помощью gradle следующим образом:

android {
    buildTypes {
        debug {
            buildConfigField "String", "BASE_URL", '"http://debug.server.com"'
        }

        release {
            buildConfigField "String", "BASE_URL", '"http://release.server.com"'
        }
    }
}

Обратите внимание на одиночные и двойные кавычки вокруг значения в gradle, как это отмечалось в комментариях к другим. Таким образом, двойные кавычки становятся частью значения.

В результате статическая ссылка BuildConfig.BASE_URL будет указывать на соответствующий URL-адрес (то есть "debug.server.com" для debug, "release.server.com" для выпуска)

Ответ 2

Ответ на пятно-овец правилен. Просто захотелось оставить решение для более чем двух сред.

Два варианта для постановки и жизни.

productFlavors {
    staging {
        ...
    }
    production {
        ...
    }
}

Вся конфигурация app зависит от текущей ENV. Использование:

public static String ENV_DEVELOPMENT = "development";
public static String ENV_STAGING = "staging";
public static String ENV_PRODUCTION = "production";

ENV = BuildConfig.DEBUG ? ENV_DEVELOPMENT : BuildConfig.FLAVOR;

Я могу переключаться между всеми разными ENV во время тестирования локально, но если вы выпустили, выполните настройку настройки/живого.