Как выяснить, почему сборка Gradle использует кэшированные идентификаторы ресурсов - PullRequest
0 голосов
/ 17 июня 2019

Если у вас есть проект gradle (5.4.1) (плагин 3.4.1) с двумя вариантами (main и other), использующими один и тот же sourceSets. Я столкнулся с проблемой при переименовании идентификатора ресурса (в макете XML). Вот наблюдения:

  1. Android Studio 3.4.1 не показывает никаких ошибок и работает как положено, то есть я могу перейти от кода kotlin к идентификатору в макете xml.

  2. Восстановление аромата main также работает как ожидалось (без ошибок компиляции).

  3. Перестройка варианта other дает ошибку компиляции "неразрешенная ссылка" для нового идентификатора. Gradle clean не помогает. Однако настройка org.gradle.caching=false на уровне проекта gradle.properties работает (после синхронизации Gradle, Очистить, Перестроить). Это объясняет, почему clean не помогало, когда было включено кэширование.

При более внимательном рассмотрении файла R.java он, похоже, использует идентификаторы из некоторого довольно старого состояния проекта (предположительно, из кэша gradle, хранящегося в домашнем каталоге пользователя). Теперь я мог бы просто удалить кеш-память, но лучше выяснить, почему изменения идентификатора ресурса не обрабатываются должным образом. Какой бы способ Android Studio не выполнял сборку в фоновом режиме, она работает нормально, но не во время сборки / запуска и т. Д.

Все это расследование потребовало много проб и ошибок: переключая различные настройки gradle.properties одну за другой, чтобы увидеть, какая из них привела к проблеме, и я все еще не приблизился к поиску основной причины проблемы.

Каков наилучший подход к решению проблемы такого типа или метод проб и ошибок является единственным способом?

...