Android Studio не может создать привязку данных после обновления 3.1.0

Сегодня утром я обновил android studio с 3.0.1 до 3.1.0. После обновления gradle до последней версии я все еще получаю ошибку сборки, касающуюся привязки данных.

Мой gradle-wrapper.properties:

distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

Все мои ошибки похожи на одну ниже:

/Users/mp/Documents/GitHub/projectx/app/build/generated/source/dataBinding/baseClasses/Staging/debug/me/projectx/asdasd/databinding/GridItemActivityTypeBinding.java:57: error: cannot find symbol
      @Nullable DataBindingComponent component) {
                ^
  symbol:   class DataBindingComponent
  location: class GridItemActivityTypeBinding

Кто-нибудь знает, почему моя привязка данных не создается после обновления Android Studio 3.1? заранее спасибо

Изменить 1: Забыл сказать, я попытался очистить / восстановить / сделать недействительным кеш и перезапустить / удалить папку сборки.

Вы сделали чистку / пересборку?

EpicPandaForce 27.03.2018 15:42

Пытался очистить / восстановить / сделать недействительным кеш и перезапустить / удалить папку сборки.

Marian Pavel 27.03.2018 15:48
40
2
37 310
20
Перейти к ответу Данный вопрос помечен как решенный

Ответы 20

При обновлении Android Studio 3.0.1 до 3.1.0 вам нужно изменить три вещи. Это как указано ниже

1) Вам нужно изменить gradle.wrapper-свойства в distributionUrl. Ваш URL должен быть distributionUrl = https: //services.gradle.org/distributions/gradle-4.4-all.zip

К

2) Необходимо обновить зависимость привязки данных в файле gradle уровня приложения с kapt 'com.android.databinding: compiler: 3.0.1' на kapt 'com.android.databinding: compiler: 3.1.0'

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

3) Третье и последнее - необходимо обновить плагин kotlin gradle в classpath "org.jetbrains.kotlin: kotlin-gradle-plugin: 1.2.30" до classpath "org.jetbrains.kotlin: kotlin-gradle-plugin: 1.2.31" в зависимости от уровня проекта. Также вы можете обновить версию сборки gradle, как показано на изображении ниже.

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

Спасибо!! Удачного кодирования !!

Вы нашли решение? Также пробовал этот подход и не работал. В моем случае ошибка не может найти символ: DataBinderMapper

mitsest 28.03.2018 12:07

Все еще ищем решение, извините. Если я что-то получу, я отправлю ответ здесь

Marian Pavel 29.03.2018 12:16

Да, у меня есть это решение, и эта работа для меня. Я также ищу другие решения для вас, если я получу, то поделюсь с вами.

Sagar Kacha 29.03.2018 12:25

Вы имеете в виду, что теперь он отлично работает с котлином, верно ?? Поздравляю. Удачного кодирования с котлином.

Sagar Kacha 29.03.2018 16:11

У меня точно такая же конфигурация, но она по-прежнему не работает. Кто-нибудь понял, что вызывает эту проблему?

Anvesh Arrabochu 03.04.2018 05:53

@ianveshi Не могли бы вы рассказать, с какой проблемой (ошибкой) вы столкнулись?

Sagar Kacha 03.04.2018 07:19

@SaguKacha Я использовал базу данных областей и имел некоторые ошибки в конфигурации моей модели. Но я не знаю, почему это вызвало эту проблему. Примечание: почти все мои фрагменты / действия находятся на java, а некоторые классы - на kotlin. Если где-то есть ошибка, он использовал компилятор kotlin для компиляции классов привязки данных в java. Не уверен, почему это происходит.

Anvesh Arrabochu 04.04.2018 14:45

Определенно помог исправить проблемы с привязкой данных для меня, переключив проект java / kotlin на gradle 3.1.0. Спасибо!

Paul Ruiz 20.04.2018 19:04

Чтобы исправить эту ошибку в Java-проекте, вам необходимо откатиться на поддержку версии библиотеки - 27.0.2 с 27.1.0. Прекрасно работает с AndroidStudio 3.1 и com.android.tools.build:gradle:3.1.0

Жду исправления от гугла

Пожалуйста, дайте ссылку на систему отслеживания проблем.

Eugen Pechanec 02.04.2018 00:33

У меня была такая же проблема. Я отключил привязку данных в свойствах Gradle, и это сработало. dataBinding.enabled = false

Я хочу использовать привязку данных. Совершенно уверен, что отключение привязки данных мне не поможет.

Eugen Pechanec 02.04.2018 00:34
Ответ принят как подходящий

Итак, те, кому интересно, как я это исправил. Решение довольно простое, но, вероятно, оно вам не понравится.

Мне пришлось переместить все мои классы, которые использовались для привязки данных в корневом пакете проекта, и после этого он снова заработал.

Это не имеет никакого смысла

Ezio 17.04.2018 09:13

Не сказал, что это имеет смысл ... Наверное, это просто ошибка.

Marian Pavel 17.04.2018 15:02

На самом деле у меня это сработало и с моими классами в разных модулях. У меня все вместе была другая проблема.

Ezio 17.04.2018 15:33

@MarianPavel Означает ли это, что вы просто перестали использовать привязку данных?

user650881 12.06.2018 01:42

@ user650881 Нет, все еще использую его в некоторых проектах

Marian Pavel 13.06.2018 15:33

У меня такая же проблема, и я просто переместил свой класс, который используется для привязки данных, к корневому пакету java, как вы сказали, тогда ошибки нет. Идк, в чем проблема, но это просто сработало.

Adarsh Vijayan P 02.10.2018 11:52

Добавление этих строк в grade.properties помогло мне сохранить проблему.

android.enableExperimentalFeatureDatabinding = true
android.databinding.enableV2=true

У меня была такая же проблема. Исправлено добавлением google () в Project build.gradle.

allprojects {
    repositories {
        jcenter()
        **google()**
    }
}

убедитесь, что вы добавили все проекты

Это очень сложная ошибка со студией Android и привязкой данных! Мне пришлось тестировать все эти предложенные решения и еще несколько в течение целого дня, чтобы наконец скомпилировать привязку данных.

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

android.databinding.enableV2 = true
android.enableExperimentalFeatureDatabinding = true

удалите buildToolsVersion из build.gradle и установите следующие версии sdk:

compileSdkVersion 27
defaultConfig {
    minSdkVersion 21
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

Плюс еще пара чистых / перестроенных, недействительных кешей и перезапуска, и он НАКОНЕЦ скомпилирован. Инженеры AS отлично умеют создавать ошибки!

Ни одно из этих решений у меня не сработало, поэтому я обнаружил его ошибку в версии 3.2 beta 4 студии Android:

buildscript {

repositories {
...
}
dependencies {
    //classpath "com.android.tools.build:gradle:3.2.0-beta04"  // buggy databinding
    classpath "com.android.tools.build:gradle:3.1.3" // working
}}

после этого я синхронизирую, перестраиваю и запускаю все правильно

Какая у вас версия студии Android и версия Gradle?

Kebab Krabby 26.09.2018 13:13

Я использую Android studio 3.3 Canary 11 с версией gradle 4.10, но я понял, что проблема связана с неправильным именем пакета в AndroidManifest, из-за которого классы привязки были сгенерированы в неправильном месте и на них нельзя было ссылаться там, где я хотел быть

Sanjeev 27.09.2018 05:06

Это не совсем тот же случай, но это решение помогло мне направить мой мыслительный процесс на правильное решение. После обновления плагина gradle до 3.6.1 с 3.2.0. А также обновил и соответствующий distributionUrl. Мне нужно избавиться от ошибки «DataBindingComponent not found». И была обнаружена настоящая ошибка.

Dhaval Shah 15.12.2020 14:59

Проверьте свои XML-файлы, если вы используете привязку данных. Сегодня я потратил один час, потому что переименовал один класс, и Android Studio решила внести изменения в мои файлы xml. Например, у меня был класс с именем LiveGameModel, я переименовал его в LiveGameView, и AS решил внести изменения в файлы xml, не связанные с этим представлением. Я знаю, что в этой ошибке нет смысла.

если вы используете kotlin на android studio 3.2, замените distributionurl этой строкой

distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

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

kapt 'com.android.databinding:compiler:3.0.1

и построить проект. у меня это сработало.

У меня такая же проблема при обновлении до Android Studio 3.2, и это работает для меня, большое спасибо

geekShaw 28.09.2018 02:10

Зачем нам kapt 'com.android.databinding:compiler? Кажется бесполезным

IgorGanapolsky 17.12.2019 18:49

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

Я получал 51 ошибку error: cannot find symbol: DataBindingComponent (в каждом отдельном сгенерированном классе Data Binding), и я потратил много времени на удаление изменений в моем коде XML и ViewModel, пытаясь найти причину ее возникновения.

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

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

Редактировать: См. Этот SO сообщение об этих ошибках привязки данных, запутывающих другие проблемы kapt (например, Room / Dagger)

Я сталкиваюсь с той же проблемой, когда я делаю недопустимые изменения в компонентах, связанных с комнатой, у меня возникает ошибка привязки данных, поэтому я думал сообщить об этом. Вы уже сообщали об этой проблеме issueetracker.google.com/issues?

Parag Pawar 26.12.2018 06:30

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

Ajit Kumar Dubey 01.04.2019 12:49

После обновления до Android Studio 3.2 эта строка у меня работает. В моем проекте запущен код Java и Kotlin (компилятор).

Добавьте в свой gradle.properties следующее: android.databinding.enableV2 = ложь

Причина:

Data Binding V2

Data Binding V2 is now enabled by default and is compatible with V1. This means that, if you have library dependencies that you compiled with V1, you can use them with projects using Data Binding V2. However, note that projects using V1 cannot consume dependencies that were compiled with V2.

источник (примечание к выпуску): https://developer.android.com/studio/releases/

Это мне помогло. Вероятно, я начал свой проект с привязки данных, а затем добавил базу данных Room. Но поскольку зависимости были скомпилированы с помощью V1, есть ли способ их перекомпилировать?

Александр Бабич 28.10.2018 13:23

Я получил эту ошибку, когда удалил androidExtensions {экспериментальный = true}

iamsujan 20.01.2019 21:08

Это сработало для меня в следующей ситуации: я работаю над AAR, который зависит от AAR из другой группы и на который я не имею права голоса или влияния. Мой AAR использовал V2, а их - V1. Я не осознавал этого, пока не увидел твой ответ. Он работал с этим переключателем.

David S Alderson 22.03.2019 17:31
android.databinding.enableV2=false обесценился и больше не требуется.
Bink 17.02.2020 20:12

Это может показаться странным, но я потратил несколько часов, столкнувшись с ошибкой, и после проверки моих последних изменений обнаружил, что это было связано с ошибкой в ​​базе данных Room.

Я объявил один из интерфейсов Dao, но забыл аннотировать его с помощью @Dao.

После исправления ошибка привязки данных была исправлена.

Я предполагаю, что это ошибка студии Android.

Я тоже совершил эту ошибку, но добавление @Dao не помогло мне.

Ali Kazi 13.12.2018 05:54

У меня была та же проблема, что и у @Marian Pavel, когда мой проект не мог скомпилировать компоненты привязки данных, если у меня не было класса, который используется в привязке данных в корневой папке.

Я исправил проблему, выполнив следующие действия:

Android Studio: стабильная версия 3.2.1

**project build.gradle**
classpath 'com.android.tools.build:gradle:3.2.1'

**module build.gradle**
apply plugin: 'kotlin-kapt'
kapt "androidx.databinding:databinding-compiler:3.2.1"

**gradle.properties**
android.databinding.enableV2=false

У меня было неправильное поле в классе db моей комнаты. Что вызывает ошибки привязки данных во время компиляции. После того, как я добавил строку android.databinding.enableV2 = false в gradle.properties, а затем смог определить ошибку класса модели комнаты. Я удалил эту строку после устранения проблемы. Я использую версию Android Studio, как указано в ответе выше.

Pradip Tilala 11.08.2019 12:27

Для чего нужен androidx.databinding: привязка данных-компилятор?

IgorGanapolsky 17.12.2019 18:56

Я получил эту ошибку после внесения некоторых изменений в классы сущности комнаты. Итак, я чувствую, что эта ошибка как-то связана с библиотекой Room. Попробуйте отменить изменения в классах комнат и объектах или прокомментируйте их, чтобы увидеть, исправлена ​​ли ошибка.

В моем случае ошибка возникла из-за того, что я возвращал int из методов вставки и обновления. Эти методы ничего не должны возвращать. Таким образом, удаление return устранило ошибку.

@Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(student: Student):Int

к

@Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(student: Student)

ПРЕЖДЕ ВСЕГО
1. добавьте «макет» в корневой макет

  1. Сборка -> Создать проект (для создания сгенерированного класса после добавления «макета»)
  2. // привязка приватное связывание с переменной lateinit: ActivityLoginBinding
  3. в oncreate view //setContentView(R.layout.activity_login) привязка = DataBindingUtil.setContentView (это @ LoginActivity, R.layout.activity_login)
  • В gradle.properties добавить:
    android.databinding.enableV2=true

  • В файле build.gradle (модуль: приложение) добавьте:
    dataBinding {enabled = true}

  • Очистите проект и пересоберите его.

Начнёт работать ...

Я получил это при обновлении Gradle до 3.4.2. Все, что вам нужно сделать, это удалить оператор импорта java.lang.

Caution: Android Studio doesn't yet handle imports so the autocomplete for imported variables may not work in your IDE. Your app still compiles and you can work around the IDE issue by using fully qualified names in your variable definitions.

Источник: https://developer.android.com/topic/libraries/data-binding/expressions#import-classes

Просто комментирование этих строк в файле graddle-wrapper.properties помогло мне решить мою проблему.

#android.enableExperimentalFeatureDatabinding = true
#android.databinding.enableV2=true

Просто подключитесь к Интернету и синхронизируйте проект с файлами Gradle. Так сойдет.

Другие вопросы по теме