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

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

My 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: забыл сказать, я пробовал очистить/перестроить/аннулировать кеш и перезапустить/удалить папку сборки.


person Marian Pavel    schedule 27.03.2018    source источник
comment
Вы делали чистку/восстановление?   -  person EpicPandaForce    schedule 27.03.2018
comment
Пробовал очистить/перестроить/аннулировать кеш и перезапустить/удалить папку сборки.   -  person Marian Pavel    schedule 27.03.2018


Ответы (20)


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

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

Причина:

Привязка данных V2

Привязка данных V2 теперь включена по умолчанию и совместима с V1. Это означает, что если у вас есть зависимости библиотеки, скомпилированные с помощью версии 1, вы можете использовать их в проектах, использующих привязку данных версии 2. Однако обратите внимание, что проекты, использующие версию 1, не могут использовать зависимости, скомпилированные с помощью версии 2.

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

person Xavier    schedule 28.09.2018
comment
Это помогло мне. Вероятно, я начал свой проект с привязки данных, а позже добавил базу данных Room. Но поскольку зависимости были скомпилированы с V1, есть ли способ их перекомпилировать? - person Александр Бабич; 28.10.2018
comment
Я получил эту ошибку, когда удалил androidExtensions {experimental = true} - person iamsujan; 20.01.2019
comment
Это сработало для меня в следующей ситуации: я работаю над AAR, который зависит от AAR другой группы, и на который я не имею права голоса или влияния. Мой AAR использовал V2, а их — V1. Я не понимал этого, пока не увидел твой ответ. С этим переключателем все заработало. - person David S Alderson; 22.03.2019
comment
android.databinding.enableV2=false устарело и больше не требуется. - person Bink; 17.02.2020

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

#android.enableExperimentalFeatureDatabinding = true
#android.databinding.enableV2=true
person stevebaros    schedule 30.07.2019

если вы используете kotlin на Android Studio 3.2, замените дистрибутив этой строкой

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

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

kapt 'com.android.databinding:compiler:3.0.1

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

person slenderm4n    schedule 25.09.2018
comment
У меня возникла та же проблема при обновлении до Android Studio 3.2, и это работает для меня, большое спасибо - person geekShaw; 28.09.2018
comment
Зачем нам kapt 'com.android.databinding:compiler? кажется бесполезным - person IgorGanapolsky; 17.12.2019

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

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

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

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

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

person Squimon    schedule 27.09.2018
comment
Я сталкиваюсь с той же проблемой: всякий раз, когда я вношу недопустимые изменения в компоненты, связанные с комнатой, возникает ошибка привязки данных, поэтому я подумал сообщить об этом. Вы уже сообщали об этой проблеме в issuetracker.google.com/issues ? - person Parag Pawar; 26.12.2018
comment
это мой худший опыт работы с Room. Я потратил 2 дня только на то, чтобы выяснить, почему отображается так много ошибок привязки. невезение - person Ajit Kumar Dubey; 01.04.2019

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

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

введите описание изображения здесь Кому введите здесь описание изображения

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

введите здесь описание изображения

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

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

введите здесь описание изображения

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

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

person Sagar Kacha    schedule 27.03.2018
comment
Вы нашли решение? Также попробовал этот подход и не сработал. В моем случае ошибка не может найти символ: DataBinderMapper - person mitsest; 28.03.2018
comment
Все еще ищу решение, извините. Если я что-то получу, я опубликую ответ здесь - person Marian Pavel; 29.03.2018
comment
Да, у меня есть это решение, и это работает для меня. Я также ищу другие решения для вас, если я их получу, поделюсь ими с вами. - person Sagar Kacha; 29.03.2018
comment
Вы имеете в виду, что теперь он отлично работает с kotlin, верно? Поздравляю. Удачного кодирования на kotlin. - person Sagar Kacha; 29.03.2018
comment
У меня точно такая же конфигурация, но она все еще не работает. Кто-нибудь понял, что вызывает эту проблему? - person Anvesh Arrabochu; 03.04.2018
comment
@ianveshi Не могли бы вы поделиться, с какой проблемой (ошибкой) вы столкнулись? - person Sagar Kacha; 03.04.2018
comment
@SaguKacha Я использовал базу данных области, и у меня были некоторые ошибки в конфигурации моей модели. Но я не знаю, почему это вызвало эту проблему. Примечание. Почти все мои фрагменты/действия находятся в java, а некоторые классы в kotlin. Если где-то есть какая-либо ошибка, она использовала компилятор kotlin для компиляции классов привязки данных в java. Хотя не уверен, почему это происходит. - person Anvesh Arrabochu; 04.04.2018
comment
Определенно помог исправить проблемы с привязкой данных для меня, переключив проект java/kotlin на gradle 3.1.0. Спасибо! - person Paul Ruiz; 20.04.2018

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

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

person Marian Pavel    schedule 03.04.2018
comment
Это не имеет никакого смысла - person Ezio; 17.04.2018
comment
Не сказал, что это имеет смысл... Вероятно, это просто ошибка. - person Marian Pavel; 17.04.2018
comment
На самом деле это сработало и для моих классов в разных модулях. У меня была другая проблема вместе. - person Ezio; 17.04.2018
comment
@MarianPavel Означает ли это, что вы просто перестали использовать привязку данных? - person user650881; 12.06.2018
comment
@user650881 user650881 Нет, все еще использую его в некоторых проектах - person Marian Pavel; 13.06.2018
comment
У меня та же проблема, и я только что переместил свой класс, который используется для привязки данных, к корневому пакету java, как вы сказали, тогда ошибки нет. Не знаю, в чем проблема, но это просто сработало. - person Adarsh Vijayan P; 02.10.2018

Ни одно из этих решений не сработало для меня, поэтому я обнаружил его ошибку в версии 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
}}

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

person Kebab Krabby    schedule 26.07.2018
comment
Какая у вас версия студии Android и версия Gradle? - person Kebab Krabby; 26.09.2018
comment
Я использую Android-студию 3.3 Canary 11 с gradle версии 4.10, но я понял, что проблема связана с неправильным именем пакета в AndroidManifest, из-за которого классы привязки были сгенерированы в неправильном месте, и на них нельзя было ссылаться там, где я хотел. быть - person Sanjeev; 27.09.2018
comment
Не совсем тот же случай, но это решение помогает мне направить мыслительный процесс в сторону правильного решения. После обновления плагина Gradle до 3.6.1 с 3.2.0. А также обновлен и соответствующий дистрибутивUrl. Это помогает мне избавиться от ошибки DataBindingComponent not found. И фактическая ошибка была выявлена. - person Dhaval Shah; 15.12.2020

У меня была та же проблема, что и у @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
person ddy214    schedule 05.12.2018
comment
У меня было неправильное поле в классе db моей комнаты. Что вызывает ошибки привязки данных во время компиляции. После того, как я добавил строку `android.databinding.enableV2=false` в gradle.properties, а затем смог найти ошибку класса модели комнаты. Я удалил эту строку после устранения проблемы. Я использую версию Android Studio, как указано в ответе выше. - person Pradip Tilala; 11.08.2019
comment
Какова цель androidx.databinding:databinding-compiler? - person IgorGanapolsky; 17.12.2019

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

Ждем исправления от Google

person Alex_297    schedule 29.03.2018
comment
Пожалуйста, дайте ссылку на трекер проблем. - person Eugen Pechanec; 02.04.2018

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

android.enableExperimentalFeatureDatabinding = true
android.databinding.enableV2=true
person Moses Gitau    schedule 04.04.2018

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

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

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

person sami qaiser    schedule 08.04.2018

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

Поэтому мне пришлось отключить все настройки привязки данных в файле 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 отлично умеют создавать ошибки!

person Sergio    schedule 23.06.2018

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

person Nestor Lara    schedule 20.08.2018

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

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

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

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

person Ifta    schedule 19.10.2018
comment
Я тоже сделал эту ошибку, но добавление @Dao не помогло мне. - person Ali Kazi; 13.12.2018

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

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

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

to

@Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(student: Student)
person Mohsen Hameed    schedule 22.03.2019

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

  1. Build -> Make Project (для создания класса генерации после добавления «макета»)
  2. //привязка private lateinit var binding:ActivityLoginBinding
  3. в представлении oncreate //setContentView(R.layout.activity_login) binding = DataBindingUtil.setContentView(this@LoginActivity,R.layout.activity_login)
person Yudi karma    schedule 28.03.2019

  • В gradle.properties добавьте:
    android.databinding.enableV2=true

  • В файле build.gradle(module:app) добавьте:
    dataBinding {enabled = true}

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

Он начнет работать...

person Gaurav1991    schedule 04.06.2019

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

Внимание! Android Studio еще не поддерживает импорт, поэтому автозаполнение для импортированных переменных может не работать в вашей среде IDE. Ваше приложение по-прежнему компилируется, и вы можете обойти проблему IDE, используя полные имена в определениях переменных.

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

person Gurjinder Singh    schedule 26.07.2019

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

person AshutoshAJ7303    schedule 29.05.2020

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

person AbuBakar Sohail    schedule 01.04.2018
comment
Я хочу использовать привязку данных. Уверен, что отключение привязки данных не поможет мне в этом. - person Eugen Pechanec; 02.04.2018