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
К
2) Необходимо обновить зависимость привязки данных в файле gradle файла уровня от kapt 'com.android.databinding: compiler: 3.0.1' to kapt 'com.android.databinding: compiler: 3.1.0'
И если вы разрабатываете, используя 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 " в зависимости от уровня градиента уровня проекта. Также вы можете обновить версию градиента сборки, как показано на рисунке ниже.
ведь все вышеописанный шаг просто строит сборку и перестраивает проект. Надеюсь, он будет работать, чтобы решить вашу проблему.
Спасибо!! Счастливое кодирование!
Ответ 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. добавить "макет" в корневой макет
- Build → Make Project (для создания создать класс после добавления "макета")
- // привязка приватного lateinit var binding: ActivityLoginBinding
- в представлении 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
Ответ 19
У меня была такая же проблема. Я отключил привязку данных в свойствах градиента, и это сработало. dataBinding.enabled = false