#android #gradle
#Android #gradle
Вопрос:
Я пытаюсь встроить несколько адресов сервера в свой файл build.gradle, но я не уверен, как это сделать. Я знаю, что в maven вы можете написать
<content.host>http://test.mysite.com</content.host>
и я могу использовать контент.хост в моем приложении для Android. В gradle, я знаю, вы можете создать тип сборки с помощью
buildTypes {
testBuild.initWith(buildTypes.debug)
testBuild{ /*test server info goes here*/ }
}
Но я не уверен, как я могу определить контент.разместите в gradle, используя тот же метод. Есть ли другой способ определить контент?хост в gradle или есть способ добавить пользовательское свойство в buildTypes?
Приветствия,
Деррил
Комментарии:
1. Где вы хотите использовать этот URL? В вашем Java-коде?
2. @CommonsWare да. Я могу сделать это в maven, и я бы предположил, что способ сделать это во многом похож на то, как вы сделали бы это в maven
Ответ №1:
Gradle для Android предлагает buildConfigField
, позволяя добавлять произвольные элементы данных в сгенерированный кодом BuildConfig
класс:
buildTypes {
debug {
buildConfigField "String", "SERVER_URL", '"http://test.this-is-so-fake.com"'
}
release {
buildConfigField "String", "SERVER_URL", '"http://prod.this-is-so-fake.com"'
}
mezzanine.initWith(buildTypes.release)
mezzanine {
buildConfigField "String", "SERVER_URL", '"http://stage.this-is-so-fake.com"'
}
}
В вашем Java-коде вы можете ссылаться на BuildConfig.SERVER_URL
, и он будет заполнен строкой на основе типа сборки, выбранного вами во время компиляции.
Комментарии:
1. Будет ли это также работать в файле сборки как расширение свойства (как это можно сделать для вкусов продукта)? Итак, я мог бы использовать BuildConfigField «SERVER_URL» в моем сценарии сборки?
2. @Zainodis: Извините, но я не узнаю термин «расширение свойства». Я не рассматривал возможность использования
buildConfigField
в определении вкуса продукта, поэтому я не знаю, поддерживается ли это опция.3. основная идея этих расширений заключается в том, чтобы придать вкусам дополнительные свойства, которые вы используете во время сборки, такие как versionName и т.д., Но пользовательские. Я попытался использовать опубликованный вами код, а затем использовать их в сборке gradle, а не внутри кода моего приложения, но такие свойства, как SERVER_URL, не были распознаны в файле сборки gradle при доступе к ним как buildTypes. SERVER_URL итак, я предполагаю, что это не вариант для свойств сборки?
4. @Zainodis: Опять же, я не исследовал эту область, извините.
5. @Sumit: Не пишите приложение для Android. Фактически, поскольку пользователи веб-браузеров могут видеть URL-адреса сервера, также не пишите веб-приложения. И не пишите программное обеспечение для настольных компьютеров, поскольку оно страдает от той же проблемы, что и приложения для Android. В противном случае, по характеру работы HTTP / HTTPS, кому-то не составит труда выяснить, к какому серверу вы подключаетесь.
Ответ №2:
Чтобы просто использовать поле независимо от типов сборки и вкусов продукта, вы можете добавить его в свой defaultConfig
с помощью:
defaultConfig {
...
buildConfigField "String", "OS", '"android"'
}
Тогда BuildConfig
выглядит так:
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.example.app";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
// Fields from default config.
public static final String OS = "android";
}