Как передать System.property в Android-приложение из Gradle?

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

String isTesting = System.getProperty("IS_TESTING");

Я пытался передать аргумент, используя флаг -D в gradle, например ./gradlew assemble -DIS_TESTING. Или сделать так:

task setCustomProp << {
    System.setProperty("IS_TESTING", "true")
}

preBuild.dependsOn setCustomProp

Даже пытался изменить gradle.properties, добавив эту строку:

org.gradle.jvmargs=-DIS_TESTING=true

Но ни одна из этих попыток не приводит к получению значения кода приложения. Я просто пытаюсь получить как:

@Override
  public void onCreate() {
    super.onCreate();
    String isTesting = System.getProperty("IS_TESTING");
}

«ни одна из этих попыток не приводит к получению значения кода приложения» — код приложения работает в Android, а не на вашем компьютере для разработки. В Android нет настраиваемых системных свойств, за исключением создания собственного ПЗУ. Если вы хотите, чтобы системное свойство на вашем компьютере для разработки было встроено в ваше приложение для Android. пусть ваш скрипт Gradle использует buildConfigField, чтобы поместить значение системного свойства в BuildConfig, или использует resValue, чтобы поместить значение системного свойства в строковый ресурс.

CommonsWare 17.07.2019 17:32

Я пытаюсь сделать это, потому что пытаюсь изменить переменную окружения здесь github.com/facebook/react-native/blob/… React использует этот IS_TESTING для изменения некоторой конфигурации.

Amadeu Cavalcante Filho 17.07.2019 17:36

Вам нужно будет поговорить об этом с командой React Native. Я понятия не имею, почему у них есть этот код там.

CommonsWare 17.07.2019 17:45

Я могу представить себе два сценария, в которых может быть установлено системное свойство IS_TESTING. Один из них связан с модульным тестом, так как он работает на JVM, поэтому я предполагаю, что у нас есть способ установки системных свойств при запуске модульных тестов. Другое дело, если Андроид устанавливает IS_TESTING, возможно, как часть инструментального тестового прогона. Несмотря на это, ты не имеет возможности установить его напрямую для запуска обычного приложения Android конечным пользователем.

CommonsWare 17.07.2019 17:56

В итоге я изменил свойства системы внутри инструментальных тестов.

Amadeu Cavalcante Filho 18.07.2019 17:24
3
5
546
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Почему бы вам просто не добавить:

buildConfigField "boolean", "IS_TESTING", "true" 

построить.градле.

а затем в вашем:

@Override
  public void onCreate() {
    super.onCreate();
    boolean isTesting = BuildConfig.IS_TESTING
}

Это хорошо, но я боюсь, что застрял с System.getProperty, так как моя проблема связана с другой библиотекой - на самом деле с нативной реакцией вы можете взглянуть на github.com/facebook/react-native/blob/…

Amadeu Cavalcante Filho 17.07.2019 17:38

Другие вопросы по теме