Android studio sync with gradle

Синхронизация проекта Android Studio с файлами Gradle

Я работал над проектом, а затем получил приглашение обновить Android Studio. После этого я начал получать эту ошибку при попытке запустить приложение

Возможно, проект должен быть синхронизирован с файлами Gradle

Как я могу это решить?

Нажатие кнопки «Sync Project With Gradle Files» должно сделать трюк:

Tools -> Android -> Sync Project with Gradle Files

Если это не удается, попробуйте запустить проект «Реконструкция»:

Build -> Rebuild Project

Старый ответ

При попытке запустить приложение вместо выбора каталога, выделенного здесь синим цветом

Вместо этого я выбрал подкаталог

И щелкнули «запустить». Все проблемы с Gradle автоматически разрешаются, и автоматически пропадает пропавшая директория apk.

Новое решение

Проект Sync project with gradle files исчез из Android Studio на некоторое время. Он возвращается, и вы можете найти его здесь:

Нажмите кнопку и дождитесь завершения задачи.

У меня возникла эта проблема после установки плагина genymotion (еще одного Android-амулятора). Более пристальное внимание уделено тому, что для выполнения градиента нужны инструменты SDK версии 19.1.0 (раньше у меня было 19.0.3).

Чтобы исправить это, мне пришлось редактировать build.gradle и под android я изменил на: buildToolsVersion 19.1.0

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

У меня была эта проблема вчера. Можете ли вы использовать локальный путь в проводнике Windows?

Мне пришлось вручную создать каталог «apk» в «\ build», тогда проблема была исправлена

Источник

Synchronise your Gradle files and get some insight about the Android Studio cache

This tip explains how to synchronize your project with Gradle when updating build.gradle files and provides insight on handling the cache when using Android Studio.

There are multiple levels of cache. We will explain the difference between the cache behind the «Invalidate cache and restart» menu, the «Clean project» one and other gradle caches involved in building an Android project.

This article is not specific to Pepper QiSDK and introduces good practices for using the IDE.

Synchronize a project with Gradle Files¶

When you make changes to the build configuration files in your project, Android Studio requires that you synchronize (i.e. sync) your project files so that the IDE can import the new build configuration and run some tests to make sure there are no build errors.

In order to build projects, Android Studio needs the information contained in Gradle files. These files contain instructions on what dependencies to download and package within your application, information about versions, application id, and other information used to build the packages.

When you create a project you generally have two build.gradle files: one to configure project-wide properties and another one at module level. When your project structure view is set to Android the two files look as follow:

build.gradle (Project: YourFooAppName)

build.gradle (Module: app)

Gradle files and your application code need to be synced if any Gradle file changes, for example when updating dependencies or adding new dependencies manually.

This is the case when the project is robotified (see ‘Result’ of section Creating a robot application). The build.gradle of your module will then get two lines added or updated to the API level you have chosen (the exact version number may vary):

implementation ‘com.aldebaran:qisdk:1.7.5’
implementation ‘com.aldebaran:qisdk-design:1.7.5’

Android Studio should automatically sync the project with Gradle when you robotify your app (ie make it compatible with Pepper’s tablet).

If it does not, then choose menu File > Sync project with Gradle Files or use the elephant icon Sync project from the menu bar to sync your project files manually.


Gradle Sync project icon

If Android Studio notices any errors with your configuration, the Messages window appears with more details about the issue.

Once Gradle files are synced, your project will have access to the necessary libraries, such as the QiSQK ones. You can then use code autocompletion to import libraries.

Understanding Android Studio caches¶

Different types of caches¶

Android Studio caches a lot of files to speed up its use and build time. This cache is necessary to improve, for example, the performance of the IDE or some time-consuming tasks repeated at every build. This could lead to the system cache becoming overloaded or inconsistent.

There are different types of caches in Android Studio or used by Android Studio plugins. Let’s check in details:

  • Android Studio System cache
  • Gradle build caching
  • AGP Android Gradle Plugin cache

Android Studio System cache¶

You can clear the Android Studio System cache using «Invalidate cache and restart». It mainly deals with the indexes and improves Android system performance.

Gradle build caching¶

This cache contains the built packages and the intermediate files involved at packaging your application. It can be found in two different locations:

  • In the build/ directory in your project
  • In the .gradle/caches/ directory of your Java SDK home directory

AGP Android Gradle Plugin cache¶

This cache contains other building caches and third party dependencies caches.

Читайте также:  Установка с неизвестных источников андроид как отключить

Now let’s consider each of these caches and explain how to clear them.

How to clear all system caches¶

Clearing the Android Studio System cache¶

The Android Studio cache contains information about the project’s structure, deals with the AS indexes and improves Android system performance.

You may need to clear the cache in several situations. For instance, moving some Java or Kotlin files or directories could lead to errors such as «Cannot resolve symbol». Using a copy of a project from another operating system may also require to clear this cache and clean the project.

If you are using Android Studio 3.6, the cache files are located in the folder $HOME/.AndroidStudio3.6/

To clear this cache, from the main menu in Android Studio , select File | Invalidate Caches / Restart. In the Invalidate Caches dialog, select an action. You can invalidate the cache and restart the IDE, invalidate the cache without restarting the IDE, or just restart the IDE.

When you invalidate the cache, Android Studio rebuilds all projects you had opened in the current version of the IDE.

Clearing the Gradle build cache¶

The Gradle build cache has two distinct parts located in two different directories:

  • In the build/ directory in your project
  • In the .gradle/caches/ directory of your Java SDK home directory

Build directory «cache» aka incremental builds

This cache handles Gradle generated code and files. Not all parts of the code are rebuilt at every build, only the necessary ones. This can speed up the build. It is located in the build/ directory(ies) within your project. If you clean and «assemble» your application, you can explore those directories to see what is generated.

In order to clean this cache, from the main menu in Android Studio, select Build | Clean project

You can also manually clean the cache using the terminal as follow:

And to rebuild your app, run:

If you want to investigate on what is built and cached, you can use the —scan option of gradlew as follows (but this is out of the scope of this article):

Build cache

The previous «cache» applies only to your current project, on your machine. However, there is another lesser known cache, named «build cache». The build cache stores some outputs that the Android plugin for Gradle generates when building your project, e.g. unpackaged AARs and pre-dexed remote dependencies. The build cache is enabled by default in recent plugins (2.3.0+) but can be activated/deactivated using the gradle property org.gradle.caching=true

This cache is located in the directory $JAVA_SDK_HOME/.gradle/caches/ . In most cases $JAVA_SDK_HOME is your $HOME folder.

In order to clear the build cache run:

«Invalidate cache» has no impact on the «Build Cache», and «Clean Project» has no relation to the «Build Cache».

To clear gradle build caches:

  • Build directory cache (in your project)

# delete project-specific cache
$ ./gradlew clean

  • Build cache (in $JAVA_SDK_HOME/.gradle)

# delete build cache
$ rm -rf $GRADLE_HOME/caches/build-cache-*

Clearing the Android build cache¶

To complete the cache «tour», let’s present one more layer of cache: the Android Gradle Plugin (AGP) adds some complementary caching over the Gradle build one. This cache stores outputs that the Android plugin for Gradle generates when building your project (such as unpackaged AARs and pre-dexed remote dependencies).

This cache is located in the $HOME/.android/build-cache/ directory.

In order to clear the AGP cache run:

Cache cleaning cheat sheet¶

From time to time you may need to really clean your project, including all related caching. You could do that to measure how long a clean build takes, or if you have experienced a bug potentially related to one of the caches.

Let’s go through all the necessary steps to build a project, having first cleared all of the caches and then rebuilt again using them all. To do so, run the following commands:

# clear the incremental build cache
$ ./gradlew clean

# clear the Gradle build cache
$ rm -rf $GRADLE_HOME/caches/build-cache-*

# clear the AGP cache
$ ./gradlew cleanBuildCache

# clear the 3rd party dependencies cache
$ rm -rf $GRADLE_HOME/caches/modules-2
$ rm -rf $GRADLE_HOME/caches/transform-2

# stop the gradle daemon
$ ./gradlew —stop

# run a build
$ ./gradlew —scan app:assembleDebug

BUILD SUCCESSFUL in 11m 49s
279 actionable tasks: 192 executed, 82 from cache, 5 up-to-date

# re-run a build without changing anything
$ ./gradlew —scan app:assembleDebug

BUILD SUCCESSFUL in 9s
279 actionable tasks: 279 up-to-date

The time gain can be that important. Cache is certainly useful, isn’t it?

Conclusion¶

This article introduces Gradle sync and caching with Android Studio. In some situations you have to manually sync with Gradle files, run a «Clean project» or «Invalidate cache and restart», which are the main actions you should usually face when developing your apps. If they do not solve all of the issues when building your project, you also have a more complete view on how the system caching works in Android Studio.

You can explore more on the topic using Jason Atwood’s very well documented presentation of the Android Studio cache (link in Related Content section below). It is really detailed and will help you understand more of the Android Studio intricacies.

We hope you learned some new things on how to use cache on Android Studio, and that it will be helpful for your future projects. May you code well, clean well and build well!

Источник

Gradle

Gradle — система автоматической сборки, построенная на принципах Apache Ant и Apache Maven. В Eclipse использовалась система Ant, но большинство разработчиков даже не замечало её работы. В основном возможности системы использовались в конторах для автоматизации различных задач. В Android Studio такой номер не пройдёт. Gradle сопровождает вас во время разработки постоянно. Поначалу, если вы перешли с Eclipse, Gradle сильно раздражает своими действиями. Но позже вы оцените её удобство и может даже полюбите её.

Читайте также:  Как удалить загрузчик андроида

Gradle не является изобретением для Android Studio, система была разработана раньше и использовалась в приложениях для Java, Scala и других языках.

Система сборки Gradle очень мощная и сложная, чтобы о ней рассказать в двух словах. Есть целые книги о ней. Сами команды в Gradle представляют собой обычный текст с использованием синтаксиса Groove для конфигурации. Но нам не нужно знать всё. Познакомимся поближе с системой и научимся пользоваться ей.

Создайте новый проект или откройте любой существующий проект из Android Studio и посмотрите на структуру проекта.

В последних версиях студии файлы Gradle выделили в отдельную папку Gradle Script. Раскройте её. В основном вас должен интересовать файл build.gradle, который относится к модулю. Рядом с этим файлом в скобках будет написано Module: app. Двойным щелчком откройте его, вы увидите, что файл является текстовым.

Также есть файл build.gradle, который относится к проекту. Но с ним работают реже. Так находятся настройки для репозиториев и самого Gradle.

Вернёмся к файлу модуля, вы увидите много интересной информации. Например, вы там можете увидеть настройки, которые раньше вы могли видеть в манифесте — номера версий, номера SDK и так далее. Забегая вперёд, скажу, что здесь можно добавить всего одну волшебную строчку и нужная библиотека сама скачается из интернета и установится в проекте. Красота!

Однако вернёмся в корневую папку. Кроме файлов build.gradle мы можем заметить файлы gradle.properties, settings.gradle и другие. Трогать их не нужно.

В корневой папке также есть файлы gradlew и gradlew.bat для работы с Gradle Wrapper. В принципе вам не нужно знать о них ничего. Но для параноиков есть информация — если вы часто импортируете проекты из неизвестных источников, то они содержат файл gradle/wrapper/gradle-wrapper.properties. Откройте его текстовым редактором и посмотрите на адрес у distributionUrl. Путь должен вести на официальный сай //services.gradle.org или на внутренний корпоративный сервер. Другие адреса должны вызвать тревогу.

Вы могли заметить, что по сравнению с Eclipse изменилась структура файлов. В папке app находится папка src, а ней папка main, в которых папки java, res и файл манифеста. Новая структура лучше отвечает требованиям Gradle для управления файлами.

Вы, например, можете создавать альтернативные папки с ресурсами и с помощью build.gradle подключить их к проекту.

В этом примере мы указали, что существуют новая папка presentations в папке /src/main/ наряду с существующими папками java и res. Внутри созданной папки есть ещё две папки layout и animations, которые содержат файлы ресурсов.

Только помните, что вам нужно избегать конфликта имён при слиянии всех файлов при сборке.

Значение sourceSets указывает Gradle, какие папки следует использовать. Этим приёмом пользуются продвинутые программисты. Мы пока не будем использовать такую технику.

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

Номер версии приложения и требования к версии Android прописаны в секции defaultConfig. Если у вас сохранились старые версии приложений, то в манифесте можете удалить данные записи. По-моему, там даже выводится соответствующая подсказка. Даже если вы эти данные в манифесте не удалите, то значения из gradle.build имеют больший приоритет и перепишут значения в манифесте при не совпадении.

Подключение библиотеки происходит одной строчкой. Например, нужно добавить библиотеку Picasso:

В Android Studio 3.0 используется новая версия Gradle, в которой compile считается устаревшей. Вместо него следует использовать новое слово implementation.

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

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

Можно указать другой репозиторий, например, Maven Central.

Для поиска через Maven-репозиторий используйте The Central Repository Search Engine.

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

Сам файл нужно скопировать в папку /libs.

При любом изменении файла недостаточно его сохранить. Нужно также произвести синхронизацию. Наверху обычно появляется жёлтая полоска с ссылкой Sync Now.

Задаём имя APK при компиляции

Можно задать собственное имя при компиляции проекта. Например, так.

Получим имя MyName-1.0.12-release.apk

Оптимизатор кода R8

Оптимизатор кода R8 имеет следующие возможности: урезание байт-кода, сжатие, обфускация, оптимизация, удаление «синтаксического сахара», преобразование в DEX. Оптимизатор может производить все операции за один шаг, что даёт сильное улучшение производительности. R8 был введён в Android Gradle plugin 3.3.0. Вам нужно только включить его.

R8 разработан для работы с существующими ProGuard-правилами, хотя возможны ситуации, когда нужно переработать правила.

Сжимаем итоговый APK

В Gradle 1.4 появилась возможность сжать итоговый файл, убрав неиспользуемые ресурсы, в том числе из библиотек, например, Google Play Services.

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

Другой способ убрать неиспользуемые ресурсы конфигурации. Например, вам не нужные локализованные ресурсы для всех языков, которые входят в библиотеку Google Play Services или Android Support Library и др. Оставим только нужные языки. Возможно, вы также не хотите поддерживать mdpi или tvdpi-разрешения в своём приложении. Мы можем установить языки и разрешения, которые используются в приложении, остальные будут исключены, что позволит уменьшить вес приложения.

Можно перенести ключи из манифеста.

Чтобы их не светить, например, если выкладывать код на Гитхабе, то сделаем так.

И в манифесте переделаем код.

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

В манифесте пишем.

Класс BuildConfig

В статье LogCat упоминался способ быстрого отключения журналирования.

Суть в следующем. Когда вы создаёте новые переменные в блоках defaultConfig или buildTypes (ветки debug и release), то Gradle создаёт специальный класс BuildConfig, и вы можете получить доступ к этим переменным.

Читайте также:  Комп не видит андроид файлы

Например, добавим переменную в defaultConfig

На языке Java это равносильно String YOUR_TOKEN = «ABRAKADABRA»;

Теперь мы можем обратиться к созданной строке.

С секцией buildType ситуация интереснее. У секции есть два блока debug и release. Можно создать переменные с разными значениями, которые будут использоваться в зависимости от ситуации. Например, у вас есть собственное API для сервера. Для тестирования вы используете один адрес, а для финальной версии — другой адрес. Тогда вы просто указываете разные адреса в разных ветках. Переменные могут быть не только строковыми.

Создаём код для перехода на веб-страницу.

Теперь вам не нужно переписывать каждый раз код. Загружаться будет страница по нужному адресу автоматически.

Разделяем отладочную и финальную версию

По такому же принципу можно организовать запуск новой версии программы, не затрагивая программу, которую вы установили с Google Play. Допустим вы на своём телефоне установили своё собственное приложение через Google Play. Теперь вам нужно написать новую версию и проверить на своём телефоне. Из-за конфликта имён новое тестируемое приложение перепишет финальную версию или вообще не установится. Поможет следующий трюк.

В специальных переменных applicationIdSuffix и versionNameSuffix мы задаём суффиксы, чтобы избежать конфликта. А в переменной resValue указываем название программы для отладочной и финальных версий, чтобы на устройстве можно было их найти. Не забудьте при этом удалить строковый ресурс app_name в res/values/strings.xml, иначе получите ошибку при компиляции. Теперь можете спокойно запускать приложение с новым кодом, не боясь повредить своё любимое приложение.

Прячем секретную информацию

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

Автогенерация версии кода

Нашёл совет, сам не применял. Не обязательно вручную менять версию приложения в атрибутах versionCode и versionName, можно сделать через переменные, а они сами подставятся в нужное место. На любителя.

settings.gradle

Файл settings.gradle обычно состоит из одной строчки.

Это означает, что у вас используется один проект для работы. Если вы будете подключать другие проекты, то здесь появятся новые строки.

gradle.properties (Project Properties)

Несколько советов по настройке файла gradle.properties.

Режим параллельного выполнения

В этом файле можно найти закомментированную строку # org.gradle.parallel=true. Если модули вашего проекта не используют друг друга как зависимости, создавая перекрёстные ссылки, можно включать режим параллельного выполнения, что ускорит скорость сборки до

Gradle-демон

Включение на компьютере демона Gradle даст значительный прирост в скорости сборки.

Режим конфигурации при необходимости

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

Меняем номер версии библиотек в одном месте

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

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

Обратите внимание, что одинарные кавычки заменяются на двойные, а символ $ указывает на строковый тип.

Расширенная версия с разными переменными в другом виде.

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

Настройки в 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.

Дополнительное чтение

В примере работы с PDF-файлами в папке assets использована операция запрета на сжатие файлов, которое происходит по умолчанию.

Задачи Gradle — теория для общего развития.

Источник

Оцените статью