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-студии 3.1? заранее спасибо

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

Ответ 1

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

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

Ответ 2

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

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

Причина:

Связывание данных V2

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

source (Release Note): https://developer.android.com/studio/releases/

Ответ 3

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

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

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

kapt 'com.android.databinding:compiler:3.0.1

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

Ответ 4

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

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

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

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

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

Ответ 5

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

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

enter image description here К enter image description here

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

enter image description here

И если вы разрабатываете, используя kotlin, тогда,

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

enter image description here

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

Спасибо!! Счастливое кодирование!

Ответ 6

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

Ожидание исправления в Google

Ответ 7

Non из этих решений работал для меня, так что я узнал его ошибку в версии 3.2 beta 4 android studio:

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
}}

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

Ответ 8

У меня была такая же проблема, как и @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

Ответ 9

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

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

Ответ 10

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

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

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

в

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

Ответ 11

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

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

Ответ 12

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

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

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

Ответ 13

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

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

Ответ 14

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

Ответ 15

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

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

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

Я думаю, это ошибка студии Android.

Ответ 16

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

  1. Build → Make Project (для создания создать класс после добавления "макета")
  2. // привязка приватного lateinit var binding: ActivityLoginBinding
  3. в представлении oncreate//setContentView(R.layout.activity_login) binding = DataBindingUtil.setContentView(this @LoginActivity, R.layout.activity_login)

Ответ 17

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

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

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

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

Ответ 18

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

enter image description here

Ответ 19

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