Как обновить gradle windows
Плагин Android Gradle 3.0.0 - это крупное обновление версии, которое значительно улучшает производительность нескольких модулей. Но это также изменило поведение этого плагина, DSL и APIS.
Обновление до Gradle 3.0.0 приведет к следующим улучшениям производительности:
- Поскольку построение декса для каждого вызова улучшает скорость построения, каждый класс компилируется в отдельный файл DEX, и только измененные классы перекомпилируются. Чтобы увеличить скорость создания APK, вам нужно установить minSdkVersion на 20 или ниже, но использоватьlegacy multi-dex。
- При изменении зависимостей Gradle улучшает скорость сборки, не перекомпилируя модули, которые не обращаются к API зависимостей. Используя новую конфигурацию зависимостей Gradle (реализация, api, compileOnly и runtimeOnly), вы можете строго контролировать раскрытие API-интерфейсов зависимостей.
Обновить
Настроить версию Gradle
Плагин Android 3.0.0 требует Gradle4.1 или выше.
Нужно быть вgradle-wrapper.propertiesВ файле настроено следующее содержимое:
Настроить плагин Android Gradle
Если вы используете Android Studio 3.0 или новее, вам будет предложено автоматически обновить до последней версии плагина Android. Для ручного обновления проекта на уровне проекта build.gradle Настройте следующий контент.
NOTICE:
Для многомодульных и составных сборок, если подключаемый модуль Android загружается более одного раза за сборку, могут возникнуть ошибки сборки, вы можете проверитьРаспространенные ошибкиОтремонтировать его.
Новый интерфейс конфигурации зависимостей
описание проблемы
Чтобы понять ограничения старой системы сборки плагина Gradle 2.0, рассмотрим следующий проект с несколькими уровнями модулей:
Глядя на модуль самого низкого уровня, можно сделать два разных изменения:
- Изменение реализации: изменения внутренней реализации без изменения внешнего интерфейса модуля
- Изменение двоичного интерфейса приложения (ABI): изменение внешнего интерфейса модуля
Примечание: на рисунке ниже перекомпилированный модуль будет выделен красным цветом.
Implementation change
Поскольку внешний интерфейс модуля остается неизменным, Gradle будет только перекомпилировать модуль. Все упомянутые модули останутся без изменений.
В этом случае проблем нет.
ABI change
Когда интерфейс внешнего модуля изменяется, модуль, который ссылается на этот модуль, также необходимо перекомпилировать.
Но эти модули могут напрямую открывать доступ к части базовых модулей через свои собственные интерфейсы! Поэтому, чтобы быть полностью безопасным, его нужно перекомпилировать.
Следовательно, Gradle необходимо будет перекомпилировать все модули.
Теперь у нас есть большая проблема: изменение кода приводит к перекомпиляции всех модулей. Основная причина этой ситуации в том, что Gradle не знает, произошла ли утечка интерфейса этого модуля через другой модуль.
Модификации плагина Android Gradle 3.0
Последний плагин Android Gradle 3.0 требует, чтобы вы четко указали, есть ли утечка в интерфейсе модуля. Исходя из этого, судите, нужно ли перекомпилировать.
Следовательно compile Связанные интерфейсы устарели, и были введены следующие интерфейсы:
- api : Интерфейс этого модуля может просочиться через собственный интерфейс, а это значит, что он отличается от старой версии. compile Точно так же.
- implementation : Интерфейс модуля может использоваться только сам по себе и не может передаваться в модули более высокого уровня.
зависимость конфигурации api
Теоретически вы можете просто заменить все зависимости компиляции зависимостями api, но это все равно приведет к перекомпиляции всех модулей.
Лучше всего использовать implementation Заменить все compile 。
Конфигурация реализации зависит от
использовать implementation Уменьшит перекомпиляцию модуля.
Примечание: если вы хотите передать интерфейс базового модуля в интерфейс более высокого уровня api 。
Другая зависимая конфигурация
Поскольку интерфейсы были изменены, команда также использовала эту возможность, чтобы наконец дать другим конфигурациям соответствующие имена:
- provided превратиться в compileOnly 。
- apk превратиться в runtimeOnly 。
- Другие, такие как testCompile, были пересмотрены.
Распространенные ошибки
Ошибки, связанные со вкусом
Теперь плагин требует, чтобы ароматы принадлежали измерению аромата, даже если есть только один цветочек.
Ошибки конфигурации, связанные с зависимостями
При использовании решений с зависимостями вариантов вам больше не нужно использовать конфигурации для конкретных вариантов (например, freeDebugImplementation) для получения зависимостей локальных модулей - плагин автоматически предоставит конфигурацию.
Следует использовать следующую конфигурацию:
Это связано с тем, что Android Studio не добавила build / classes / groovy / test в путь к классам JUnitStarter. Для конкретных проблем и временных решений см. Эту ссылку IDE didn’t add build/classes/groovy/test to JUnitStarter classpath
Учтите, что приложение настроено с типом сборки, называемым «staging», но одна из его зависимых библиотек не существует в этом типе сборки. При компиляции «промежуточной» версии приложения оно не будет знать, какую версию зависимой библиотеки использовать, и увидит ошибки, аналогичные приведенным выше.
Плагин Android Gradle содержит элементы DSL, которые могут помочь управлять Gradle для решения ситуации, когда сопоставление вариаций между приложениями и зависимостями невозможно. Обратитесь к таблице ниже, чтобы определить, какой атрибут DSL следует использовать для устранения определенных ошибок сборки, связанных с сопоставлением зависимостей вариантов.
- приложение включает, но зависимая библиотека не включает
Приложение содержит тип сборки, который не входит в зависимую библиотеку. Например, приложение содержит тип сборки «промежуточный», но зависимая библиотека содержит тип сборки «отладка» и «выпуск».
Примечание. Когда зависимая библиотека содержит тип сборки, не включенный в приложение, проблем нет. Это потому, что нет необходимости полагаться на библиотеки для создания типа сборки.
решение:
Используйте matchingFallbacks, чтобы указать альтернативное соответствие для данного типа сборки, как показано ниже:
- Определенное измерение вкуса, область, где приложение существует, но зависимая библиотека не существует
Для конкретного измерения вкуса, которое существует в приложении и его зависимых библиотеках, но приложение содержит ароматы, которые библиотека не включает.
Например, и приложение, и зависимости содержат «ярусное» измерение вкуса. Однако «уровень» в приложении включает «бесплатные» и «платные», а зависимая библиотека включает только «демо» и «платные».
Примечание: для данного параметра вкуса, существующего в приложении и его зависимых библиотеках, когда библиотека содержит вкусы, которых нет в приложении, проблем нет. Это потому, что android gradle plun никогда не будет запрашивать ароматы, которые приложение не включает из зависимостей.
Используйте matchFallbacks, чтобы указать альтернативное соответствие для «бесплатного» варианта приложения, как показано ниже:
- Зависимая библиотека содержит параметры аромата, которые приложение не поддерживает.
Зависимая библиотека содержит параметры вкуса, которые приложение не поддерживает.
Например, зависимая библиотека содержит размерность «minApi», а приложение - нет. При создании версии «freeDebug» плагин не знает, использовать ли версию «minApi23Debug» или «minApi18Debug» зависимой библиотеки.
Примечание. Когда приложение содержит измерение вкуса, но зависимая библиотека не существует, это нормально. Это связано с тем, что подключаемый модуль соответствует только измерению разновидности, которое существует в зависимой библиотеке. Например, зависимая библиотека не содержит измерения ABI, а «freeX86Debug» приложения настраивает только версию «freeDebug» зависимая библиотека.
в defaultConfig Используется в конфигурации missingDimensionStrategy Укажите недостающий размер. Также может быть в productFlavors Чтобы перезаписать конфигурацию по умолчанию.
Как я могу сказать gradle для повторной загрузки зависимостей из репозиториев?
Как правило, вы можете обновить зависимости в вашем кэше с помощью параметра командной строки --refresh-dependencies . Вы также можете удалить кэшированные файлы в
/.gradle/caches . При следующей сборке Gradle попытается загрузить их снова.
Каков ваш конкретный вариант использования? Используете ли вы динамические версии зависимостей или версии SNAPSHOT?
В системах Unix вы можете удалить все существующие артефакты (артефакты и метаданные), загруженные Gradle с помощью:
Я не могу говорить за OP, но мой конкретный вариант использования - проверить, действительно ли работает моя конфигурация репозитория не MavenCentral./ .m2 (если существует). Если вы настроили репозиторий Maven, некоторые из этих артефактов также будут загружены в
/ .m2. Лучше убрать
/ .m2, чтобы начать с чистого листа.
Maven Local имеет значение только в том случае, если ваша сборка определяет его как хранилище. @Gopinath - это опасный совет, так как .m2 может содержать файл настроек maven. Я думаю, вы имеете в виду удалить .m2 / хранилищеЕсли вы используете последнюю версию Gradle, вы можете использовать опцию --refresh-dependencies.
Вы можете обратиться к руководству Gradle .
Следует отметить, что поскольку gradle попытается загрузить все файлы зависимостей, это займет много времени. Стоит также отметить, что это не всегда работает. Я только что протестировал запуск «gradle clear war --refresh-dependencies» с кешированным файлом jar, которому было три дня, когда я вчера развернул новую версию. Сборка прервалась из-за отсутствующей зависимости, которая была добавлена в новый код. После этого у меня все еще была трехдневная банка в тайнике. В итоге я просто удалил папку с версиями в моем кэше .m2 и перестроил ее. Затем он получил новейшую версию, потому что у него практически не было выбора! Это прекрасно работало как './gradlew build --refresh-dependencies' из терминала Android Studio. Спасибо! Есть ли способ заставить Android Studio сделать это на сборке из IDE?Опция --refresh-dependencies указывает Gradle игнорировать все кэшированные записи для разрешенных модулей и артефактов. Новое разрешение будет выполнено для всех настроенных репозиториев с пересчетом динамических версий, обновлением модулей и загрузкой артефактов.
Вы можете указать Gradle повторно загрузить некоторые зависимости в сценарии сборки, пометив зависимость как «изменяющуюся». Gradle будет проверять наличие обновлений каждые 24 часа, но это можно настроить с помощью ResolutionStrategy DSL. Я считаю полезным использовать это для SNAPSHOT или NIGHTLY.
Я нашел это решение в этой ветке форума .
Вы случайно не знаете, как это работает с источниками для той же библиотеки? В настоящее время скомпилированная библиотека загружается каждый раз, когда она изменяется, а источник - нет. Версия снимка «меняется» по определению. Gradle знает это, поэтому вам не нужно определять это в объявлении зависимости. Спасибо за это. FWIW, наша зависимость была от версии моментального снимка, и пока мы не сделали это, она не проверяла обновления для каждой сборки. @ Umi Есть сжатая версия этого? Такие как compile 'com.burrowsapps:ads:1.0:true' ?Для MAC
./gradlew build --refresh-dependencies
Для Windows
gradlew build --refresh-dependencies
Можно также попробовать gradlew assembleDevelopmentDebug --refresh-dependencies
Android использует обычный gradle. Это просто плагин. Оболочка Gradle не является эксклюзивной для Android. Вы можете создать один с помощью gradle wrapper задачи; Вы даже можете создать оболочку, используя другую оболочку Gradle: gradlew wrapperДля Windows . для того, чтобы заставить gradle повторно загружать определенные зависимости:
удалите зависимости, которые вы хотите повторно загрузить из каталога ниже:
удалить все каталоги метаданных по пути:
запустить gradle build (или, gradlew build если используется gradle wrapper) в корневом каталоге проекта.
примечание: числа в путях к файлам выше могут отличаться для вас.
Можно удалить папку с кешированными банками.
В моем случае на Mac библиотека кэшировалась по пути:
Я удалил папку с кэшированной библиотекой («cached-library-to-remove» в приведенном выше примере), удалил папку сборки моего проекта и снова скомпилировал. Свежая библиотека была загружена тогда.
Вместо удаления всего кэша Gradle, как предлагают некоторые ответы здесь, вы можете удалить кэш для определенной группы или идентификатора артефакта. Я добавил следующую функцию в мой .bash_profile :
Затем при следующей сборке или при повторной синхронизации gradle повторно загрузит зависимости.
Есть 2 способа сделать это:
- Использование параметра командной строки для обновления кэша зависимостей.
- Вы можете удалить локальный кеш, где артефакты являются кешами Gradle и запустить сборку
Используя параметр --refresh-dependencies :
Краткое объяснение --refresh-dependencies опция указывает Gradle игнорировать все кэшированные записи для разрешенных модулей и артефактов.
Долгое объяснение
Использование delete: при удалении кешей
Вы просто очищаете все кэшированные банки и суммы sha1, и Gradle находится в ситуации, когда на вашем компьютере нет артефактов, и он должен загрузить все. Да, он будет работать на 100% в первый раз, но когда будет выпущен другой SNAPSHOT, и он станет частью вашего дерева зависимостей, вам снова придется столкнуться с выбором обновления или очистки кешей.
Это сработало для меня. Убедитесь, что Gradle не переведен в автономный режим, сняв отметку с кнопки «Файл»> «Настройки»> «Gradle»> «Автономная работа».
Добавьте это на верхний уровень вашего build.gradle, приятно иметь вышеуказанные зависимости
Я убедился, что мои зависимости написаны так:
После этого я открываю панель Gradle в Android Studio и нажимаю кнопку со стрелками синего круга. Я всегда вижу, как мои обновления получают новую свежую копию.
Ни одно из приведенных выше решений не помогло мне.
Если вы используете IntelliJ, я решил просто обновить все проекты Gradle:
$ sudo apt install gradle Reading package lists. Done Building dependency tree Reading state information. Done gradle is already the newest version (2.10-1). 0 upgraded, 0 newly installed, 0 to remove and 629 not upgraded.
Как мне перейти на Gradle 4.x? Предпочтительно, с umake, а не SDKMAN! Кажется, что они предлагают.
(я не хочу обновлять все пакеты из-за медленного соединения.)
Вы можете использовать ppa:
sudo add-apt-repository ppa:cwchien/gradle sudo apt-get update sudo apt upgrade gradle
Вы можете использовать ppa:
sudo add-apt-repository ppa:cwchien/gradle sudo apt-get update sudo apt upgrade gradle
Вы можете использовать ppa :
Вы можете использовать ppa :
Вы можете использовать ppa :
Вы можете использовать ppa :
Вы можете использовать ppa :
Вы можете использовать ppa :
Вы можете использовать ppa :
При запуске upgrade gradle я получил ошибку The following packages have unmet dependencies. powershell : Depends: liblttng-ust0 but it is not installed . Я должен запустить этот sudo apt-get -f install , затем sudo apt-get -f install gradle . Таким образом, он удаляет предыдущий и устанавливает последние с нуля. – Anum Sheraz 20 July 2018 в 18:55 @AnumSheraz: powershell находится в другом хранилище вообще. Это не должно иметь ничего общего с градлой. Но, похоже, sudo apt-get -f install исправил свою проблему. – serv-inc 21 July 2018 в 12:52Вы также можете сказать Gradle обновить себя, используя оболочку Gradle.
Сначала вы создаете оболочку, а затем говорите ей, чтобы использовать выбранную вами версию Gradle:
Теперь этот проект будет использовать Gradle 4.9, независимо от того, что установлено. Однако вам нужно помнить, что нужно запустить Gradle через оболочку, т. Е. Запустить ./gradlew вместо обычного gradle .
Обертка позволяет вам легко выполнять разные проекты, используя разные версии Gradle.
Когда вы создадите созданную оболочку для элемента управления источником, все, кто проверяет проект, будут использовать ту же версию Gradle. Это может многое помочь с несовместимыми скриптами сборки, когда что-то изменилось между версиями Gradle.
проект использует старую версию плагина Android Gradle. Этот минимальная поддерживаемая версия 0.5.0. Пожалуйста, обновите версию com зависимости.андроид.инструменты.построить:Gradle в'
как мне это сделать? Я не могу найти никаких инструментов обновления для gradle плагин в Android studio.
обновить gradle легко (Март 2018):
File→Settings→Build, Execution, Deployment→Build Tools→Gradle→использовать оболочку Gradle по умолчанию (рекомендуется)
следующий таблица показывает, какая версия ш совместим с конкретной версией Android плагин для Gradle:
последние версии, которые вы можете использовать с Android Studio 3.2 (октябрь 2018):
Это может быть не точный ответ для OP, но это ответ на название вопроса: Как обновить Gradle в Android Studio (AS):
после выпуска android studio V 3.0 (стабильный),он покажет всплывающее окно, Если доступно обновление gradle
вручную, просто измените версию gradle в верхний уровень (уровень проекта) до последней,
проверьте ниже диаграммы
открыть >Структура Проекта>Проект
Android Studio имеет встроенный структура проекта меню для проверки и обновления gradle и плагина, используемых в текущем проекте.
ниже веб-сайт дает подробное объяснение о том, как обновить ш и плагин Gradle в из Android Studio.
для тех, у кого все еще есть эта проблема (например, для переключения с 2.8.0 на 2.10.0), перейдите в файл gradle-обертка.свойства и установить distributionUrl как способ.
Я изменил 2.8.0 на 2.10.0 и не забудьте синхронизировать после
открыть свой корень build.gradle файл и изменить версию Gradle, как это
для совместимости версий Gradle это видеть.
на Mac, откройте терминал и выполните следующие команды как в - инструкции:
после завершения установки терминал спросит, следует ли установить его в качестве версии по умолчанию, поэтому введите y и сделайте его версией по умолчанию.
Теперь откройте Android Studio - > Терминал и выполните следующую команду
Я пока не могу комментировать.
то же, что и Кевин, но с другим шагом пользовательского интерфейса:
Это может быть не точный ответ для OP, но это ответ на название вопроса: Как обновить Gradle в Android Studio (AS):
выберите Файл > Параметры > сборки,выполнения,развертывания > построить инструменты > ш ш начало пути
теперь установите использовать оболочку gradle по умолчанию и редактировать Project\gradle\wrapper\gradle-wrapper.файлы свойств поля distributionUrl такой
Это работает для меня:
просто перейдите к ' / home / your-user/.gradle / wrapper / dists/'
удалить все внутри этого
Он будет заменен на Android studio
при запуске терминала: ионная эмуляция android
для меня я скопировал папку шрифтов из активов в папку res и вызвал проблему, потому что Android Studio не принимала заглавные имена. Я переключился в режим просмотра проекта и удалил его, а затем добавил его как файл ресурсов шрифта, щелкнув правой кнопкой мыши папку res.
большую часть времени вы можете иметь Android Studio автоматически обновлять плагин Gradle.
Если ваша версия плагина Gradle позади, Instant Run, скорее всего, не будет работать. Поэтому, если вы перейдете в Настройки мгновенного запуска (настройки > сборка, выполнение, развертывание > мгновенный запуск), вы увидите кнопку Обновить проект в правом верхнем углу (изображение ниже). Нажатие на это обновит как оболочку Gradle, так и инструменты сборки.
Если ваша кнопка запуска серая. Вот как я это исправил.
перейдите в меню Выполнить, а затем нажмите это:
затем он запустит ваш эмулятор, и ваша кнопка запуска снова станет зеленой, и вы можете использовать ее. Вот как я это исправил.
Читайте также: