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

Переменная окружения в settings.gradle не работает с Android Studio

У меня есть многомодульный проект с проектом библиотеки в другом корневом пути. В качестве иллюстрации вы можете представить что-то вроде этого:

/projects_home/projects/app_root
   |--app/
   |   |--build.gradle
   |--build.gradle
   |--settings.gradle

/libraries_home/libraries
   |--libA
       |--build.gradle

В моем файле settings.gradle я могу установить абсолютный путь к проекту библиотеки, используя атрибут projectDir. Это прекрасно работает как в консоли, так и в Android Studio.

Но если я пытаюсь использовать переменную среды, она перестает работать с Android Studio. Настройки .gradle для приведенного выше примера выглядят следующим образом:

include ':app'
include ':libA'

project(':libA').projectDir = new File("$System.env.LIB_ROOT", '/libraries/libA')

Если я создаю с помощью оболочки graddle с консоли, она все равно работает. Но AS перестает работать со следующей ошибкой msg:

Gradle 'app' project refresh failed:
Configuration with name 'default' not found.

Если я отключу переменную среды, сборка на консоли завершится с тем же сообщением:

* What went wrong:
A problem occurred configuring project ':app'.
> Configuration with name 'default' not found.

Поэтому я предполагаю, что AS каким-то образом не сможет получить доступ к переменным окружения, установленным с моим ~/.bashrc

Может кто-нибудь из вас, возможно, знает способ, как я могу узнать AS о моей среде?

4b9b3361

Ответ 1

Android Studio не читает переменные среды, поэтому этот подход не будет работать. Кроме того, использование схемы projectDir в settings.gradle, вероятно, вызовет проблемы. Android Studio имеет ограничение, что все его модули должны быть расположены под корнем проекта. Если у вас есть библиотеки, которые используются в нескольких проектах, и они не могут быть размещены под одним корнем проекта, лучшим советом является их публикация JAR или AARs в локальном репозитории Maven, который могут выбрать отдельные проекты.

Ответ 2

Android Studio выполняет чтение переменных среды. Вы можете доказать это, запустив Android Studio из оболочки, в которой эти env. переменные указываются вместо панели приборов X-window.

Причина, по которой у вас не были эти переменные, - это среда X-окна, которую вы использовали, не читала $HOME/.bashrc, которая содержала эти переменные. Это имеет смысл, потому что bashrc для Bash не X.

Предположим, вы используете GNOME или Unity для запуска Android Studio с указанными переменными окружения, просто измените файл .desktop Android Studio (например, ~/.local/share/applications/android-studio.desktop):

Найдите эту строку:

Exec="/home/username/tools/android/android-studio/bin/studio.sh" %f

Измените его на:

Exec=env LIB_ROOT=/libraries_home "/home/username/tools/android/android-studio/bin/studio.sh" %f

Примечание:

Эта модификация просто добавляет env LIB_ROOT=/libraries_home к исходной команде. Вы должны заменить username своим собственным именем пользователя.

Обновление

Если у вас есть какие-либо вопросы, пожалуйста, оставить комментарий сначала, вместо этого отредактировав ответ напрямую. В частности, я не знаю, как связаться с редактором.

Ответ 3

Несмотря на то, что ответ от Скотта Барты верен, я понял, что есть способ решить мою проблему и не поделиться этим, если у кого-то еще есть такое же требование.

Теперь я использую файл gradle.properties, который определяет и использует свойства gradle вместо свойств системы. Документацию по этой функции можно оштрафовать в руководстве пользователя

Решение моего исходного вопроса теперь выглядит следующим образом:

$USER_HOME/.gradle/gradle.properties:

LIB_ROOT=/libraries_home

Файл settings.gradle должен быть изменен, чтобы использовать свойство gradle вместо системного свойства:

include ':app'
include ':libA'

project(':libA').projectDir = new File(LIB_ROOT, '/libraries/libA')

Это отлично работает для меня, без головы, а также с AS.

Еще несколько слов о том, что я работаю с модулями, которые не помещаются под одним корнем проекта. До сих пор похоже, что AS не жалуется на это. Но я только начал работать с этой структурой, и может случиться, что позже я столкнулся с проблемами. Мне нравится в этом более плоское представление в AS, которое больше похоже на то, что я использую его с Eclipse.

То, что также описано в руководстве пользователя, заключается в установке системных свойств с помощью файла gradle.properties. Я также пробовал это, но я столкнулся с теми же проблемами с AS, используя переменные среды.

Ответ 4

На Mac, Android Studio не читает переменные среды для использования в Gradle, по-видимому. Я считаю, что это причина путаницы в ответах здесь - возможно, это происходит в Windows.

Чтобы заставить Android Studio читать переменные среды, я запускаю приложение из командной строки:

> /Applications/Android\ Studio.app/Contents/MacOS/studio 

Другие ответы здесь предлагают решения, отличные от использования переменных среды. Для моей ситуации я использую библиотеку, которую я не писал, для которой требуется использование переменной окружения, и я бы не стал редактировать их код, чтобы было легче обновить его позже.

EDIT: И у меня есть значок док-станции для запуска Android Studio таким образом: https://superuser.com/a/260712/501568 объясняет, как.

Ответ 5

Он работает для меня со следующими шагами:

  • Задайте переменную в Windows
  • Reboot
  • достигните его в gradle build: System.env.MYVARIABLE

Ответ 6

Вы можете установить переменную окружения, добавив:

-DYOUR_VARIABLE=variable_value

до ~/Library/Preferences/AndroidStudioX.X/studio.vmoptions, которую вы можете открыть, выбрав "Справка → Изменить пользовательские параметры виртуальной машины..." в меню Android Studio.

И тогда вы можете использовать его как:

System.env.YOUR_VARIABLE

в файле build.gradle или settings.gradle.