Подтвердить что ты не робот

Android gradle build System.getEnv( "RELEASE_PASSWORD" ) возвращает null

У меня возникают проблемы, когда System.getenv() возвращает значение null для переменной среды. Мой пароль хранится в переменной среды RELEASE_PASSWORD. Когда я это сделаю:

$ echo $RELEASE_PASSWORD

он выводит правильное значение, поэтому я знаю, что переменная установлена.

Я изначально устанавливал signingConfig signingConfigs.release в release buildType, и все работало нормально, но мне нужны разные подписи для разных продуктов. Если я жестко программирую пароль, он работает так же, как и предполагается. Когда я пытаюсь прочитать пароль из переменной окружения, ситуация становится нестабильной.

Это какая-то проблема в области видимости?

Это то, что у меня есть в моем build.gradle.

android {

  ...

  signingConfigs {
    release {
      storeFile ...;
      keyAlias ...;
      storePassword System.getenv("RELEASE_PASSWORD");
      keyPassword System.getenv("RELEASE_PASSWORD");
    }

    unsigned {
      keyAlias "";
      storePassword "";
      keyPassword "";
    }
  }

  buildTypes {
    debug {
      versionNameSuffix = "-DEBUG"
    }

    release {
    }
  }

  flavorGroups "storeFront"

  productFlavors {
    def googleVariable = signingConfigs.release
    def amazonVariable = signingConfigs.unsigned

    google {
        flavorGroup "storeFront"
        signingConfig googleVariable
    }

    amazon {
        flavorGroup "storeFront"
        signingConfig amazonVariable
    }
  }
}
4b9b3361

Ответ 1

Android Studio не передает переменные среды в Gradle, поэтому то, что вы пытаетесь сделать, не будет работать из среды IDE. Если вы хотите избежать сохранения пароля хранилища ключей в файле сборки, вот ответ с кодом для его сохранения в отдельном файле:

Подпишите APK, не помещая информацию в хранилище в файле build.gradle

Ответ 2

Для пользователя Windows, если вы создаете новую переменную среды, вам необходимо перезагрузить компьютер. Я не знаю, что не так с Windows, Но как это работает на нем. То, что я пробовал, в моем gradle script я написал задачу для печати моего пути JAVA_HOME, как это:

task printJavaHome{
     println System.getenv("JAVA_HOME") 
}

а затем синхронизируется с gradle.

Затем откройте окно терминала в своей студии.

и введите:

gradlew -q printJavaHome

Это покажет ваш домашний путь java, если вы установите его, иначе он напечатает null.

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

Теперь попробуйте установить новую переменную среды и загрузить ее и попытаться распечатать ее, как указано выше. Вы увидите нуль, если используете Windows. Но когда вы перезагрузите компьютер и снова выполните команду, он вернет текущее значение переменной среды.

То, что я испытал и думал о совместном использовании, может быть полезно для кого-то.

Ответ 3

Вы можете запустить Android Studio из командной строки, чтобы получить переменные среды, переданные в среду IDE. В Mac OS вы можете запустить его с терминала, запустив /Applications/Android\ Studio.app/Contents/MacOS/studio

Ответ 4

Для меня (с использованием Windows) достаточно было просто перезапустить Android Studio.

Ответ 5

Вот что я обнаружил об использовании переменных среды при работе с градиентом в ОС Windows:

переменная пользовательской среды:

 key: ANDROID_COMPILE_SDK_VERSION value: 28

системная переменная среды:

 key: AndroidSDK value: C:\Users\tom\AppData\Local\Android\sdk

в сценарии градации:

println System.getenv("ANDROID_COMPILE_SDK_VERSION")
println System.getenv("AndroidSDK")

Результат скрипта gradle (версия градиента, которую я использую - 4.6):

null
C:\Users\tom\AppData\Local\Android\sdk

Это наблюдение говорит о том, что градиент "System.getenv" работает только для получения переменных системной среды, а не переменных среды пользователя. Этот счетчик интуитивно понятен тому, как переменные среды работают в ОС Windows. Хотя я и не пробовал, я бы предположил, что значение переменной среды PATH включает только переменную среды "система" PATH и не объединяет переменную среды PATH пользователя в результате для System.getenv("Путь")

Ответ 6

Студию Android нужно закрыть и перезапустить, чтобы распознать новые измененные или добавленные переменные среды.

По какой-то причине я не думаю, что операция "Invalidate Cache and restart" подбирает новые переменные среды. Я сделал это пару раз, и я не думаю, что получил новые ценности, делающие эту операцию. Мне это трудно поверить, поэтому, возможно, у меня была некоторая опечатка, и я смущен тем, что я наблюдал; но я проверял орфографию несколько раз, потому что это очевидная причина. Без каких-либо изменений проблема, с которой я столкнулась, изменила переменные окружения после того, как полностью закрыла студию Android, а не выполняла операцию Invalidate Cache и перезапуска. Причина, по которой я сделал операцию Invalidate Cache и перезагрузки, состояла в том, что у меня было несколько сеансов Android Studio, и это похоже на простой способ закрыть их все и перезапустить их.