Создание плагина для standalone проекта
Для этого проекта не нужно придумывать что-то хитрое – просто создается плагин, который добавляет текстовый файл и зависимости в этом файле. Создание standalone проекта дает вам возможность публиковать и делиться им с другими. Предпочтительный и самый простой способ – это использование плагина Java Gradle. Он автоматически добавит зависимость gradleApi(), сгенерирует необходимые дескрипторы плагина в итоговом JAR файле и сконфигурирует Plugin Marker Artifact для пользования после публикации.
Для начала разахрхивируйте и откройте стартовый проект с названием ProjectTrackerPlugin в IntelliJ.
В build.gradle добавьте java-gradle-plugin и maven внутри задач plugins. Будет выглядеть примерно так:
Эти два плагина помогут создать плагин и опубликовать его. После внесения изменений загрузите их с помощью команды Command-Shift-I для macOS или Control-Shift-O для ПК. Далее создайте package внутри директории src/main/kotlin и назовите его com.raywenderlich.plugin. Внутри создайте Kotlin класс SaveDependencyTask и расширьте его с DefaultTask().
Создайте companion object и добавьте следующие константы, которые помогут определить, куда сохранить текстовый файл:
Создайте переменную configuration типа Collection и объявите ее с @Input:
Вышеперечисленное позволит вам определить наличие входного значения для этой задачи. Оно будет использовано для передачи списка конфигураций из модуля, использующего плагин, так, что у него будет доступ ко всем зависимостям.
Далее создайте функцию checkDependency и добавьте аннотацию через @Input. Внутри функции:
Этот код во многом похож на тот, что вы написали в плагине buildSrc. Вы проверяете наличие пути и при его отсутствии создаете требуемые директории и файлы.
И, наконец, добавьте оставшиеся функции, которые фактически будут выполнять запись в текстовый файл:
После этого ваша задача готова. Теперь создайте Kotlin класс в той же директории и назовите его SaveDependancy и имплементируйте Plugin. В применимой функции зарегистрируйте созданную задачу:
Вуаля! Вы сделали собственный Gradle плагин в standalone проекте.
Далее посмотрим, как использовать этот плагин в проектах Android Studio.
Настройки в Android Studio
Рассмотрим настройки, доступные в Android Studio. Закройте текущий проект, чтобы увидеть стартовое окно студии. В правой части нажмите на пункт Configure. В следующем окне выберите пункт Settings, чтобы оказаться в окне настроек студии. В левой части найдите пункт Build, Execution, Deployment, затем подпункт Build Tools, далее подпункт Gradle. По умолчанию, там всё чисто, только указан путь у Service directory path. Это были общие настройки.
Теперь рассмотрим настройки, относящиеся к проекту. Запустите любой проект в Android Studio. Выберите меню File | Settings…. Снова пройдитесь по пунктам Build, Execution, Deployment | Build Tools | Gradle. Вы увидите практически такое же окно с небольшими изменениями. Теперь поле Linked Gradle Projects не будет пустым, а также появятся дополнительные настройки. По умолчанию рекомендуют использовать Use default gradle wrapper.
Gradle Task
На правой стороне Android Studio имеется вертикальная вкладка Gradle, которую можно развернуть. Она содержит список задач (task), которая выполняет Gradle при работе с текущим проектом. Вы можете выделить любую из этих задач и запустить её двойным щелчком. Можно выделить несколько задач.
Узнать debug.keystore: MD5 и SHA1
Иногда требуется узнать значения debug.keystore: MD5 и SHA1. Обычно их получают через командную строку. Но это долго и неудобно, так как нужно помнить все аргументы. Есть способ проще. Открываем вкладку Gradle, нажимаем на кнопку со стрелками Refresh all Gradle Projects. Затем последовательно открываем элементы Tasks | android и запускаем команду signingReport. В нижнем окне Run увидите нужную информацию.
Gradle Console
Когда выполняется какая-то задача Gradle, то ход её выполнения можно увидеть в окне Gradle Console. Открыть её можно через вкладку Gradle Console в нижней правой части студии.
Terminal
Запускать задачи Gradle можно и в окне Terminal.
На панели инструментов имеется значок Sync Project with Gradle Files, которую следует использовать при редактировании файлов Gradle. Как правило, студия также выводит предупреждающее сообщение с ссылкой при изменении файла, которая делает ту же работу.
Добавление зависимостей через интерфейс студии
В статье описывался способ включения библиотеки в проект через редактирование файла build.gradle. Существует альтернативный вариант через настройки студии. Щёлкните правой кнопкой мыши на имени модуля (app) и выберите пункт Open Module Settings (быстрая клавиша F4). В правой части окна находятся вкладки, которые оказывают влияние на файл build.gradle. Например, вкладка Dependencies содержит подключаемые библиотеки.
Чтобы добавить новую зависимость, нажмите на значок с плюсом и выберите нужный вариант, например, Library dependency. Откроется список доступных библиотек из репозитория Maven.
Объявление зависимостей
Простой «Hello World» пример полностью автономный и не зависит от каких-либо дополнительных библиотек.
Однако, большинство приложений зависит от внешних библиотек, с реализацией распостраненного и/или
сложного функционала.
К примеру, предположим, что в дополнение к «Hello World!» вы хотите, чтобы приложение печатало текущую дату и время.
Вы могли бы использовать функциональность из стандартных(native) Java библиотек, но мы можем сделать это
и другими интересными способами, например с помощью Joda Time библиотеки.
Во первых, изменим , как показано ниже:
Здесь использует Joda Time класс для получения и печати текущего времени.
Если бы вы запустили для сборки проекта сейчас, то получили бы ошибку сборки,
потому что вы не объявили Joda Time компилируемую зависимость в сборке.
Во-вторых, вам необходимо добавить источники сторонних библиотек:
Блок означает, что сборка должна разрешать зависимости из Maven Central
репозитория. Gradle опирается в основном на многие соглашения и возможности, определенные в
инструменте сборки Maven, включая использование Maven Central как источник библиотек зависимостей.
Теперь, когда мы готовы к приему сторонних библиотек, объявим их:
В блоке вы описываете единственную зависимость Joda Time. В частности,
вы запрашиваете(читаем справа на лево) версию 2.2 библиотеки joda-time в joda-time группе.
Другое, что хотелось бы отметить, это необходимость указания ключевого слова , обозначающее
доступность библиотеки во время компиляции(а если бы вы собирали WAR файл, то была бы включена /WEB-INF/libs
папка в WAR). Также существуют другие заметные ключевые слова, среди которых:
-
. Требуемые зависимости для компиляции кода, но которые будут
доступны во время работы кода контейнера(например, Java Servlet API) -
. Зависимости, используемые для компиляции и запуска тестов, но не
требуемые для компиляции и запуска кода проекта
И наконец, назначим имя для нашего JAR артефакта.
блок определяет, как JAR файл будет назван. В данном случае мы получим .
Теперь, если мы запустим , Gradle должен будет загрузить Joda Time зависимость из
репозитория Maven Central и успешно собрать проект.
Сборка Java кода
Начнем с простого, создадим очень простой в корневой папке проекта(там,
где src), который содержит только одну строчку:
Эта единственная строчка в конфигурации сборки приносит значительную пользу. Запустите gradle tasks
снова и вы увидите новые задачи в списке, включая задачи для сборки проекта, создания JavaDoc и запуска тестов.
Вы будете изпользовать задачу gradle build достаточно часто. Эта задача компилирует, тестирует и
упаковывает код в JAR-файл. Вы можете запустить её таким образом:
Через несколько секунд, «BUILD SUCCESSFUL» будет означать, что сборка прошла успешно.
Чтобы увидеть результаты сборки, посмотрите на содержимое каталога build. Здесь
вы найдете несколько директорий, среди которых три наиболее значимые:
- classes. Скомпилированные .class файлы
- reports. Отчеты в течении сборки(такие как отчеты о тестировании)
- libs. Библиотеки для сборки проекта(обычно в виде JAR и/или WAR файлов)
Классы в каталоге с .class файлами генерируются во время сборки Java-кода. Соответственно,
вы должны найти там HelloWorld.class и Greeter.class.
На данный момент проект не имеет зависимостей от библиотек, поэтому ничего нет в папке dependency_cache.
Каталог отчетов должен содержать отчет о выполнении тестов для проекта. Т.к. проект пока не содержит тестов,
данный отчет будет нам неинтересен.
Каталог библиотек должен содержать JAR-файл с названием каталога проекта. В дальнейшем, вы увидите,
как указывать имя JAR-файла и его версию.
Задачи для Gradle
У Gradle есть задачи, и каждая из них представляет собой мелкую часть работы по сборке. Вы можете как создать произвольное задание, так и написать плагин, содержащий в себе несколько таких задач.
Чтобы увидеть все задачи, запустите ./gradlew tasks в терминале из корневой папки с проектом. Будут напечатаны все задачи:
Вы можете написать свою собственную задачу на модульном уровне файла build.gradle. Вот пример, найденный внутри директории приложения. Откройте его и добавьте код после блока plugins:
Для выполнения созданной задачи в терминале запустите ./gradlew -q printSomething. Опция в командной строке -q пресекает сообщения лога Gradle, так, что выведется:
Метод doLast очень важен здесь, так как он сообщает Gradle выполнить действие, только когда задача вызвана. Без этого вы будете выполнять это действие во время конфигурации при каждый сборке. На деле также есть метод doFirst, который можно переписать. Если у вас есть:
Тогда после запуска ./gradlew printSomething будет выведено:
Наличие методов doFirst и doLast позволяет расширять задачи и выполнять функционал в определенных часть жизненного цикла задачи.
Упаковка проекта
Каждый платформа имеет различные форматы дистрибутивов. В этом разделе мы увидим, как мы можем генерировать эти дистрибутивы через Gradle.
Упаковка desktop проекта
Эта команда создаст исполняемый JAR файл, расположенный в директории. Он содержит весь необходимый код, а также все свои assets
из директории android/assets и может быть запущен либо двойным щелчком или из командной строки с помощью команды . У вашей аудитории должна быть установлена JVM. JAR файл будет работать на Windows, Linux и Mac OS X!
Упаковка JAR вместе с JVM
Если вы хотите упаковать для распространения ваш JAR вместе с JVM, то вы можете использовать packr
tool. Таким образом, вашей аудитории не нужно будет устанавливать JVM, за счет увеличения размера приложения на 23-30Мб на каждой платформе.
Упаковка Android проекта
Команда создаст не подписанный APK файл в директории. Вы можете установить этот APK файл на любое Android устройство, которое
позволяет . Для
публикации приложения в Google Play Store вы должны подписать свой APK файл. Собранный
командой выше APK будет уже в режиме релиза, вам нужно будет только следовать инструкциям по keytool и jarsigner.
Упаковка iOS проекта
Команда создаст IPA в директории, который вы опубликуете в Apple App Store. Вы можете просмотреть руководство Apple по
публикации приложений в App Store.
Упаковка HTML проекта
Команда скомпилирует ваше приложение в Javascript и поместит полученный JavaScript, HTML и assets файлы в директорию.
Содержимое директории должно находится и быть доступно серверу, например: Apache или Nginx. Как будто это статический HTML/Javascript сайт. Там нет
Java и Java-апплетов!
Если у вас установлен Python, то вы можете протестировать данный дистрибутив, выполнив следующие действия в директории.
Затем вы можете открыть браузер http://localhost:8000 и посмотреть ваш проект в действии.
Запуск проекта
Gradle позволяет легко запускать проект из командной строки. Просто используйте команду gradlew, указав целевую платформу и команду запуска для этой
платформы.
Запуск desktop проекта
Эта команда скомпилирует основной и desktop проект, и затем запустит desktop стартер. Рабочей директорией является assets директория Android проекта!
Запуск Android проекта
Эта задача создаст debug APK вашего приложения, установит его на первый подключенный эмулятор или устройство и запустит основную Activity. Процесс
разделен на две задачи, потому что Android Gradle плагин позволяет создавать несколько версий вашего приложения (например: debug, release, …). Вы
можете найти более подробную информацию на сайте Android Gradle Plugin.
Запуск iOS проекта
Первые две команды запустят ваше приложение на эмуляторе iPhone или iPad, последняя команда запустит ios проект на подключенном устройстве, при условии,
что оно готово. Пожалуйста, обратитесь к документации Apple о том, как подготовить устройство
Обратите внимание, что
Время компиляции
В первый раз, когда вы запустите ваш iOS проект, компиляция займет много времени. Время компиляции значительно снизится при последующих запусках
Команда приведет к запуску приложения в GWT Super Dev режиме, который компилирует Java код в JavaScript и позволяет отлаживать Java код прямо в
браузере. Если вы видите сообщение в вашей оболочке, откройте браузер и перейдите по этому адресу.
Перетащите «Dev Mode On» закладку на свою панель закладок браузера. Затем откройте http://localhost:8080/html.
Это ваше работающее приложение в браузере! При изменении любого вашего Java кода в основном проекте, просто нажмите на закладку, затем нажмите кнопку
«Compile». Изменения вступят в силу в течение нескольких секунд. Если вы измените ваши assets, то вы должны перезагрузить сервер командой выше.
Что может делать Gradle
Теперь, когда Gradle установлен, посмотрим, что он может делать. Прежде, чем вы создадите
build.gradle для проекта, выможете проверить, какие доступны задачи:
Вы должны увидеть список доступных задач. Если вы запустите Gradle в каталоге,
в котором нет ещё файла build.gradle, то увидите несколько
самых элементарных задач:
Не смотря на то, что эти задачи доступны, они не представляют большого значения без конфигурации
для сборки проекта. С файлом, некоторые задачи будут более полезны.
Список задач будет увеличиваться при добавлении плагинов в , таким
образом вы будете время от времени запускать tasks, чтобы проверить, какие задачи доступны.
Говоря о добавлении плагинов, в следующей части урока вы добавите плагин, который отвечает
за базовую функциональность сборки Java-проектов.
конфигурация идеи
Создайте новый файл на диске D(Используйте команду dos)), В качестве основного каталога хранилища пакетов jar, загруженного gradle, по умолчанию. Откройте файл-> setting-> Build, Execution, Deployment-> Gradle, измените его следующим образом:Указан каталог файла GradleУказан домашний каталог Gradle Work
настройки склада
Рекомендуется установить следующим образом
Репозиторий — это просто набор файлов, упорядоченный по группе, имени и версии. По умолчанию Gradle не определяет никаких репозиториев. Хранилища используются здесь, чтобы указать хранилище. mavenLocal (): указывает на использование локального хранилища maven, а локальный склад указывает местоположение хранилища, указанное в файле настроек при настройке maven. Такие как, ПокаСкопируйте файл вПод каталогом, как правило, нетДля файлов gradle ищет пакеты jar в следующем порядке: : Укажите адрес ускорения изображения Alibaba Cloud mavenCentral (): это центральный склад Maven, который можно использовать напрямую без какой-либо настройки и объявления jcenter (): центральный склад JCenter фактически построен с использованием Maven, но он более дружественен, чем склад Maven, распространяется через CDN и поддерживает доступ https. позадиУкажите склад maven, обычно используйте адрес частного склада или другую стороннюю библиотеку Gradle ищет файлы jar в порядке конфигурации. Если он существует локально, он не будет загружен снова. Если он не существует, перейдите на склад Maven, чтобы загрузить его
Обратите внимание, что загруженный файл JAR находится не на складе Maven, а в главном рабочем каталоге Gradle, как показано выше.оглавление Ссылка«Gradle battle» как настроить использование локального склада Maven
Команда построения
Команды очистки
Команда сборки пакета
Пропустить тестирование при компиляции, использовать,Параметры используются для исключения задач, которые не нужно выполнять
Публикация плагина в локальную директорию
Ваш плагин готов! Для публикации в вашу локальную директорию откройте файл build.gradle в вашем проекте IntelliJ и добавьте:
После добавления кода снова синхронизируйте изменения Gradle. Эта задача опубликует ваш плагин в желаемом месте. Вы можете выполнить задачу, щелкнув зеленую кнопку воспроизведения рядом с задачей или выполнив команду ./gradlew -q uploadArchives в терминале. Скомпилируйте и запустите, и вы увидите директорию плагина в желаемом месте.
Затем вы будете использовать его в своем проекте Android Studio. Снова запустите проект ProjectTracker и откройте файл build.gradle на уровне проекта. Внутри repositories в блоке buildscript добавьте:
И добавьте в задачу dependencies:
Теперь ваш проект имеет доступ к файлам плагина. Для его применения откройте на уровне модуля файл build.gradle и добавьте следующие строки в файл Gradle:
В итоге вы можете вызвать задачу в файле build.gradle, добавив в самый низ:
Запустите ./gradlew clean для очистки Gradle и вызовите ./gradlew -q writeModuleDependencies. Наслаждайтесь вашим плагином!
Что дальше?
Вы можете загрузить окончательный проект, нажав кнопку Download Materials.
Фух! В этом руководстве вы узнали о многих вещах. Теперь вы можете создать свой собственный плагин Gradle и использовать его в разных проектах.
И это еще не все! Чтобы узнать больше о плагине Gradle и о том, что еще вы можете с ним сделать, ознакомьтесь с официальной документацией Gradle.
Создание плагина, используя директорию buildSrc
Теперь создадим плагин по-другому. Сначала создайте директорию buildSrc в корне проекта. Именно там будет вся логика по сборке. А так, как она поддерживает Kotlin DSL, вы можете писать плагин на Kotlin.
Внутри новой директории создайте файл build.gradle.kts. Внутри этого файла добавьте код:
Итак, что же здесь происходит? Для начала buildSrc – это та директория, на которую Gradle обращает внимание при компиляции. Если он находит специальный сборочный код, то добавляет его в путь класса
В этом файле вы применяете плагин kotlin-dsl, но при попытке синхронизировать проект с его добавлением ничего не будет работать. Нужно также добавить mavenCentral() в repositories, потому что именно тут находится плагин. После добавления этих строчек синхронизируйте проект, и вы заметите еще несколько директорий в папке buildSrc. Структура вашего проекта будет выглядеть как-то так:
Это значит, что ваш файл build.gradle.kts был успешно добавлен в путь класса Gradle. Далее правой кнопкой мышки нажмите на папку buildSrc и выберете New ▸ Directory и далее src/main/java.
Здесь можно начать писать плагины на Kotlin, и все модули будут иметь доступ к ним. Откройте папку java и создайте класс на Kotlin BuildManager, который имплементирует Plugin.
Вы можете создавать задачи внутри метода apply по примеру того, как вы это делали в модуле build.gradle ранее. Для этого вы создадите задачу, которая не только распечатывает предложение.
Внутри apply добавьте этот код:
Добавьте import для класса File вверху файла:
Вы создаете задачу под названием renameApk и в этом классе находите расположение вашего APK, и затем переименовываете его. Но что, если APK еще не был создан? Или что, если вы удалили файл по какой-то причине? В этом случае последняя строка .dependsOn(«build») приходит на помощь. Эта функция создаст зависимость в задаче build, которая предоставит APK.
Но при попытке выполнить задачу из терминала, приложение упадет и выдаст ошибку BUILD FAILED. Это все из-за того, что вы не применили плагин к проекту. Чтобы это исправить, перейдите в файл build.gradle.kts и добавьте следующее:
В коде выше вы регистрируете ваш плагин путем использования одного из расширений функций – gradlePlugin. Используя функцию create, можно сообщить имя, ID, версию и ссылку на плагин класса, который вы создали.
Самое время добавить зарегистрированный плагин в ваш модуль. Перейдите в файл build.gradle и добавьте его в конец списка задач plugins:
Вот и все! Синхронизируйте проект, запустите ./gradlew clean для очистки директории build и выполните задачу через ./gradlew -q renameApk. Перейдите в папку /app/build/outputs/apk/release и найдите переименованный APK.
Continuous Build
Continuous Build allows you to automatically re-execute the requested tasks when task inputs change.
For example, you can continuously run the task and all dependent tasks by running:
$ gradle test --continuous
Gradle will behave as if you ran after a change to sources or tests that contribute to the requested tasks. This means that unrelated changes (such as changes to build scripts) will not trigger a rebuild. In order to incorporate build logic changes, the continuous build must be restarted manually.
If Gradle is attached to an interactive input source, such as a terminal, the continuous build can be exited by pressing (On Microsoft Windows, it is required to also press or after ). If Gradle is not attached to an interactive input source (e.g. is running as part of a script), the build process must be terminated (e.g. using the command or similar). If the build is being executed via the Tooling API, the build can be cancelled using the Tooling API’s cancellation mechanism.
There are several issues to be aware with the current implementation of continuous build. These are likely to be addressed in future Gradle releases.
Gradle starts watching for changes just before a task executes. If a task modifies its own inputs while executing, Gradle will detect the change and trigger a new build. If every time the task executes, the inputs are modified again, the build will be triggered again. This isn’t unique to continuous build. A task that modifies its own inputs will never be considered up-to-date when run «normally» without continuous build.
If your build enters a build cycle like this, you can track down the task by looking at the list of files reported changed by Gradle. After identifying the file(s) that are changed during each build, you should look for a task that has that file as an input. In some cases, it may be obvious (e.g., a Java file is compiled with ). In other cases, you can use logging to find the task that is out-of-date due to the identified files.
Due to class access restrictions related to Java 9, Gradle cannot set some operating system specific options, which means that:
-
On macOS, Gradle will poll for file changes every 10 seconds instead of every 2 seconds.
-
On Windows, Gradle must use individual file watches (like on Linux/Mac OS), which may cause continuous build to no longer work on very large projects.
The JDK file watching facility relies on inefficient file system polling on macOS (see: JDK-7133447). This can significantly delay notification of changes on large projects with many source files.
Additionally, the watching mechanism may deadlock under heavy load on macOS (see: JDK-8079620). This will manifest as Gradle appearing not to notice file changes. If you suspect this is occurring, exit continuous build and start again.
On Linux, OpenJDK’s implementation of the file watch service can sometimes miss file system events (see: JDK-8145981).
-
Creating or removing symbolic link to files will initiate a build.
-
Modifying the target of a symbolic link will not cause a rebuild.
-
Creating or removing symbolic links to directories will not cause rebuilds.
-
Creating new files in the target directory of a symbolic link will not cause a rebuild.
-
Deleting the target directory will not cause a rebuild.
The current implementation does not recalculate the build model on subsequent builds. This means that changes to task configuration, or any other change to the build model, are effectively ignored.
Меняем номер версии библиотек в одном месте
Очень часто в проекте используются взаимосвязанные библиотеки с одинаковыми номерами.
Можно быстро поменять у всех номера через переменную. Для этого используется секция ext, в которой указывается переменная и номер версии. Затем в секции dependencies номер версии заменяется на имя переменной
Обратите внимание, что одинарные кавычки заменяются на двойные, а символ $ указывает на строковый тип. Расширенная версия с разными переменными в другом виде
Расширенная версия с разными переменными в другом виде.
Если в проекте используются несколько модулей с одинаковыми зависимостями, то эти записи можно перенести в корневой build.gradle, чтобы не менять номера версий в каждом модуле.
Обратитесь к Gradle для настройки внутреннего зеркала
скрипт сборки gradle.build
build.gradle — это стандартный файл сценария сборки Gradle. При выполнении команды Gradle файл сценария build.gradle в текущем каталоге будет загружен по умолчанию. Сценарий gradle.build выглядит следующим образом:
Репозитории в buildScript являются зависимыми библиотеками, необходимыми для этого скрипта, и не имеют никакого отношения к проекту. При выполнении скрипта из этой библиотеки будут загружены соответствующие фляги и плагины. Вторым хранилищем является библиотека jar, от которой должен зависеть проект.
Посмотреть все задачи и значения, определенные в проекте
команда
Например, результат выглядит следующим образом
- собрать: собрать
- build: скомпилировать и выполнить тест
- очистить: удалить каталог сборки
- jar: создать пакет jar
- test: выполнить юнит-тесты
Преобразование проекта Maven в проект Gradle
Выполнение корневого каталога
Приведенная выше команда автоматически сгенерирует файлы и конфигурацию, необходимые для проекта gradle, на основе файла pom, а затем повторно импортирует их вместе с проектом gradle.
настройки
Это файл конфигурации модуля. Большая часть роли settings.gradle заключается в настройке подпроектов. Файл сценария settings.gradle в корневом каталоге предназначен для глобальной конфигурации модуля. Конфигурация. settings.gradle используется для создания многопроектных проектов Gradle. Проект соответствует модулю модуля в IDEA. Например, настройте имя модуля
ссылкаНачало работы с Gradle-только этот СсылкаВы действительно понимаете Gradle?
Измените версию плагина Gradle и версию Gradle в Android Studio
http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>style=»clear:both;»>
Измените версию плагина Gradle и версию Gradle в Android Studio
В проектах Android нам обычно нужно установить версию плагина gradle и версию gradle.
плагин gradle
В файле build.gradle в корневом каталоге проекта версию плагина gradle можно указать через путь к классам.
В AndroidStudio вы также можете использоватьЧтобы указать версию плагина gradle, как показано на следующем рисунке:
Как обновить плагин Gradle
Если указанная вами версия подключаемого модуля gradle не загружена, подключаемый модуль gradle будет загружен автоматически при следующей сборке проекта или в классе инструментов Android Studio,операционная.
Обновить версию Gradle
На следующем рисунке показано соответствие между плагином gradle и версией gradle:
Также есть два способа указать версию Gradle, первый — через панель инструментов Android Studio.Способ, как показано ниже:
Другой — изменить корневой каталог проекта.Файл выглядит следующим образом:
ссылка:
Интеллектуальная рекомендация
1. Для реальных сигналов (для понимания): A (ω) является соотношением амплитуды выходного сигнала и амплитуды входного сигнала, называемого частотой амплитуды. Φ (ω) — это разница межд…
Один. вести Многие люди задавали некоторые вопросы о создании проекта Flex + LCDS (FDS) в сообщениях и группах. Из-за операции ее трудно четко объяснить, поэтому я написал простой учебник (я обещал эт…
package com.example.phonehttp; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.widget.ScrollView; import android.widget.TextView; public class MainActi…
Он предназначен для реализации подкласса того же родительского класса с родительским классом. Полиморфизм Один и тот же ссылочный тип использует разные экземпляры для выполнения разных операций; Идея …
тема: Объедините два упорядоченных слоя в новый заказанный список и возврат. Новый список состоит из всех узлов двух связанных списков, данных сплавным. Пример: Анализ: два связанных списка состоит в …
Вам также может понравиться
D. Самая ценная строка Пример ввода 2 2 aa aaa 2 b c Образец вывода aaa c На самом деле, будучи задетым этим вопросом, вы должны быть осторожны. После инвертирования строки, если две строки имеют один…
Given a 2D integer matrix M representing the gray scale of an image, you need to design a smoother to make the gray scale of each cell becomes the average gray scale (rounding down) of all the 8 surro…
calc () может быть очень незнакомым для всех, и трудно поверить, что calc () является частью CSS. Поскольку он выглядит как функция, почему он появляется в CSS, поскольку это функция? Этот момент такж…
Основываясь на дереве регрессии, сформированном CART, а также на предварительной и последующей обрезке дерева, код выглядит следующим образом:…
Откат Обновление в режиме онлайн с версии Centos (CentOS Linux версии 7.3.1611 (Core) до CentOS Linux версии 7.5.1804 (Core)) # ошибка соединения yum-ssh после обновления yexpected key exchange group …