Android Studio использует это расположение JDK… которое отличается от того, что Gradle использует по умолчанию.
# 4 Как сделать приложение для клавиатуры | Android Studio | Сингальский
После того, как Android Studio синхронизирует мой проект gradle, я вижу следующее сообщение в журнале событий:
Android Studio использует это расположение JDK: /path/to/my/project/specific/jdk что отличается от того, что Gradle использует по умолчанию: /path/to/android/studio/embedded/jdk Использование разных мест может вызвать несколько демонов Gradle, если задачи Gradle запускаются из командной строки при использовании Android Studio. Настройте Android Studio на использование того же JDK, что и Gradle, и синхронизируйте проект.
я имею /path/to/my/project/specific/jdk установить в Project Structure -> SDK Location -> JDK Location -> Other
У меня в моем .bash_profile :
и STUDIO_JDK в документации говорится:
Устанавливает расположение JDK, с которым запускается Studio. Когда вы запускаете Android Studio, он проверяет STUDIO_JDK , JDK_HOME , и JAVA_HOME переменные среды в этом порядке.
Поэтому я ожидал, что Android Studio найдет /path/to/my/project/specific/jdk , но это не так. Есть ли специальная настройка JDK специально для gradle?
Обновить
За macOS происходит только в macOS Mojave 10.14.6 . На macOS Catalina 10.15.3 , вам нужно только установить JAVA_HOME в вашей оболочке.
Этот ответ касается macOS случаи. Это не подразумевает решений для Linux или Windows.
TL; DR
На macOS , Android Studio не получает переменные среды, определенные в вашем .bash_profile при запуске из Finder.app . Вы должны определить переменные среды в launchctl :
или, если вы хотите использовать свой системный JDK:
Но это работает только для текущего сеанса вашего компьютера. Далее вам нужно создать
или, если вы хотите использовать свой системный JDK:
Список активируется после перезагрузки системы. Вы также можете использовать launchctl load
/Library/LaunchAgents/environment.plist чтобы запустить его немедленно.
Более глубокое объяснение
Я подозревал, что Android Studio на самом деле не видит мой JAVA_HOME переменная среды, поэтому я проверил переменные среды процесса Android Studio:
это означало, что Android Studio не видит мой JAVA_HOME , как я и подозревал.
Затем я попытался запустить Android Studio с терминала:
и это дамп намного больше, включая мой JAVA_HOME . Таким образом, мне нужно было выяснить, как установить переменную среды для приложений, запускаемых из Finder.app , который я описал выше.
- Я думаю, что контекст этого ответа находится в OSX («Finder» — это собственный файловый менеджер). Это заставляет меня задуматься, такой же ли принцип и с Ubuntu?
- This only happens on macOS Mojave 10.14.6. On macOS Catalina 10.15.3 НЕПРАВИЛЬНО
- @OjonugwaJudeOchalifu что делает WRONG значить? Будьте более конкретными и конструктивными.
- @HeathBorders Lol. Я говорю, что у меня была такая же проблема, но я не на MacOS
- Благодарю. Я отредактирую ответ, чтобы упомянуть, что он находится в macOS контекст.
Я начал получать это предупреждение после обновления до Android Studio версии 3.6. Я получал предупреждение ниже:
Чтобы исправить это предупреждение, я изменил расположение JDK проекта на расположение Gradle JDK.
- Щелкните правой кнопкой мыши приложение в окне проекта
- открыть настройки модуля
- Расположение SDK
- Расположение JDK
из раскрывающегося списка выберите расположение JDK вашего Gradle. В моем случае это ниже местоположения:
Нажмите «Применить» и «ОК».
- Отлично. Это именно то, что мне нужно. Спасибо!
- На моем компьютере с Windows установлен jdk 13, я надеюсь, что это не проблема для студии Android, предупреждение исчезло, так что вроде все в порядке.
- Я использую cusom JVM (от моей компании), и он хранится в другом месте. Что я должен делать?
- Большое спасибо! У меня была такая же проблема после обновления моей студии Android до 4.0.
Я работаю над системой Windows. Я зашел в панель управления, открыл переменные среды и скопировал расположение ключа JAVA_HOME. Я поместил этот каталог в окно Project Structure / SDK Location в Android Studio. После сохранения изменений Gradle смог без проблем синхронизироваться. Местоположение окна SDK Locations обсуждается в этой публикации.
Я использую Windows, и при обновлении до AS 3.6.1 возникла такая же ошибка.
Помимо проектов Android, я также создаю проекты Java на одном компьютере, оба из которых используют разные версии Java. Поэтому указывать оболочку AS / Gradle на мой JAVA_HOME не вариант.
Чтобы решить эту проблему, мне нужна переменная среды JAVA_HOME, указывающая на мои проекты Java, и JAVA_HOME для AS / Gradle, чтобы указывать на версию JRE, поставляемую с AS.
Есть простое решение. Это немного беспорядочно, но работает. Для этого вам нужно будет видеть скрытые файлы. Затем измените пакетный файл оболочки Gradle следующим образом:
Заходим в функцию:
Это не постоянное решение, так как оно вполне может быть перезаписано новыми версиями Gradle, однако оно работает пока и, надеюсь, достаточно долго, чтобы кто-то (надеюсь, Google) указал AS и обертки Gradle в правильное место по умолчанию.
Я тоже использую систему Windows от Microsoft. Чтобы решить эту проблему, просто выполните следующие простые шаги.
Установите свой JAVA_HOME переменная окружения, указывающая на установленный вами jdk. В моем случае это было C: \ Program Files \ Java \ jdk-9.0.1
Затем в студии Android нажмите Выбрать JDK из файловой системы из вашего журнала событий или перейдите в структуру проекта, затем в папку sdk.
Установите местоположение jdk, как показано на изображении выше, и нажмите «Применить».
Источник
Android Studio is using this JDK location … which is different to what Gradle uses by default
After Android Studio sync my gradle project, I see the following message in the event log:
Android Studio is using this JDK location: /path/to/my/project/specific/jdk which is different to what Gradle uses by default: /path/to/android/studio/embedded/jdk Using different locations may spawn multiple Gradle daemons if Gradle tasks are run from command line while using Android Studio. Set Android Studio to use the same JDK as Gradle and sync project
I have /path/to/my/project/specific/jdk set in Project Structure -> SDK Location -> JDK Location -> Other SDK Location -> JDK Location -> Other» src=»https://i.stack.imgur.com/8v3YH.png»/>
I have the following in my .bash_profile :
and the STUDIO_JDK documentation says:
Sets the location of the JDK with which to run Studio. When you launch Android Studio, it checks the STUDIO_JDK , JDK_HOME , and JAVA_HOME environment variables in that order.
So I would expect that Android Studio would find /path/to/my/project/specific/jdk , but it doesn’t. Is there a special JDK setting specifically for gradle?
Answers
Update
For macOS only happens on macOS Mojave 10.14.6 . On macOS Catalina 10.15.3 , you only need to set JAVA_HOME in your shell.
This answer deals with macOS cases. It doesn’t imply Linux or Windows solutions.
TLDR
On macOS , Android Studio doesn’t receive your environment variables defined in your .bash_profile when launched from Finder.app . You must define your environment variables in launchctl :
or, if you want to use your system-defined JDK:
But this only works for the current session of your machine. Next, you have to create a
or, if you want to use your system-defined JDK:
The plist will activate after system reboot. You can also use launchctl load
/Library/LaunchAgents/environment.plist to launch it immediately.
Deeper explanation
I suspected that Android Studio didn’t actually see my JAVA_HOME environment variable, so I inspected the Android Studio process’ environment variables:
which meant Android Studio didn’t see my JAVA_HOME , as I suspected.
Next, I tried launching Android Studio from the terminal:
and this dumped a lot more output, including my JAVA_HOME . Thus, I needed to figure out how to set an environment variable for apps launched from Finder.app , which I describe above.
To fix it, open file called build.gradle in the project root, and change gradle version there to 0.9.+.
To be repeated for each project ;(
If you then get a message like «Unable to load class ‘ org.gradle.api.artifacts.result.ResolvedComponentResult «.
Go to you project_folder/gradle/wrapper directory and edit Unable to load class ‘org.gradle.api.artifacts.result.ResolvedComponentResult’. file changing the distributionUrl to
After upgrade to version 0.8.1 (full download and copy SDK folder over), had to have new version of gradle installed by IDE (using the «Fix it» link a couple of time :S ), and modifing the «android» section of the gradle file in project folder from 19.0 to 19.1, as below: buildscript < repositories < mavenCentral() >dependencies < classpath 'com.android.tools.build:gradle:0.12.+' >> apply plugin: ‘android’
You can use normal build run rather than instant run.
Go to Settings/Preferences > Build, Execution, Deployment option > Instant Run and uncheck all the three boxes.
Upgrading Gradle services URL:
Project > Gradle > Wrapper > gradle-wrapper.properties
Change URL from
(Find latest distributionUrl gradle plugin version Here: http://services.gradle.org/distributions
**Make sure to use gradle-x.xx-all.zip )
Delete your build folder
When you run project, build folder will be created automatically
Go to BUILD option in menu > Clean the project, Build the project
It should work without instant run.
There’s two separate things to discuss here: Dependency Configurations and Dependency Sources.
Dependency Configurations
Configurations help define the transitivity of a dependency, which in turn removes the pain of having to discover and specify the libraries your own project/library requires, including them automatically. This notion of configurations in gradle is very similar to that of Maven’s scopes:
- compile : Compile dependencies are available in all classpaths of a project. Furthermore, those dependencies are propagated to dependent projects. A compile-time dependency is generally required at runtime.
- apk : Defines a runtime dependency. A dependency with this scope will not be required at compile time, but it will be for execution. This means that you can save time while compiling and still have the dependency available when your project actually runs. This is a good example of when to use an apk dependency.
- provided : It means that this dependency is available on the runtime environment. As a consequence, this scope is only available on the compilation and test classpath, and is not transitive. It is not supported on Android projects, though you can workaround it by defining your own configuration as discussed here.
There are more configurations that you can encounter on Android, such as testCompile , which allows you to specify a compile-time dependency that will only be used for testing, say you want to use junit in your tests, then you would do as follows:
Dependency Source
Once you understand the configurations available for you, you need to specify an actual dependency. Dependencies might be internal or external, you may rely on another library you are working on, as well as on publicly available libraries. Here’s where the project keyword comes in, allowing you to specify a dependency to an internal module or library. By defining a dependency as compile project , you are adding that module or library as a transitive dependency to your project.
Assume you have a project messages with three modules ( producer , consumer and shared ), the project structure would look as follows:
Now assume that both consumer and producer store messages in json format and that you want to use google-gson for that purpose. Assume that both projects have some common source code that they depend on, your shared module. consumer ‘s build.gradle could then define the following dependencies:
To sum up, it is the combination of both configurations and sources that enables you to declare dependencies as compile , compile project , apk project and more!
Источник
Неверная конфигурация JDK Gradle?
Я очень новичок в Android Studio . У меня проблема с gradle . Он говорит,
То что я должен сделать, чтобы решить это?
В Android Studio выберите « File > Project Structure > JDK location . Укажите JDK в папку вашего установленного в настоящий момент JDK. И укажите местоположение SDK.
Если вам нужно / нужно, обновите свою установку JDK до версии, которую вы хотите использовать.
Затем найдите версию для текущей установки JDK, запустив javac -version . Убедитесь, что это то, что вы ожидаете.
Затем найдите каталог установки JDK:
- Он должен быть на вашем% PATH%.
- По умолчанию это будет подкаталог «C: \ Program Files \ Java», например: «C: \ Program Files \ Java \ jdk1.8.0_45»
Затем запустите Android Studio и перейдите на страницу настроек «Файл-> Структура проекта-> JDK Location».
Путь к файлу, заданный предпочтением, должен быть указанным выше директором установки JDK. Если это не так, обновите его.
- Используйте полный путь к каталогу установки; Например «C: \ Program Files \ Java \ jdk1.8.0_45».
- Используйте имя пути, а не URL.
Когда я столкнулся с этой же проблемой, я решил ее, указав путь к портативному (не установленному) JDK8.
Такая же ошибка я получил, когда я устанавливаю студию Android на своем компьютере. Во время установки я установил android sdk и android studio в другом пути, поэтому в структуре проекта я установил свой новый путь sdk. Еще я получил сообщение о недопустимом jdk … тогда я знал местоположение jdk, снова в структуре проекта я установил свой путь jdk. Он работает.
Источник