Сегодня я обновил свою андроид студию 3.5.3 до 3.6. Теперь я не могу создать какой-либо класс привязки данных. Студия Android это сам генерирующий файл data-binding-iml.
Кто-нибудь сталкивался с такой проблемой?
Gradle wrapper.properties:
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
Файл Gradle уровня проекта:
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
}
Файл Gradle уровня приложения:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'androidx.navigation.safeargs'
android {
dataBinding {
enabled = true
}
// Using Lambda Expressions
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
gradle.properties:
kotlin.code.style=official
android.databinding.enableV2=true
kotlin.incremental=true
kapt.incremental.apt=true
Ниже моя активность и файлы XML: Активность:
class ActivityMain : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
var binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
}
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<!-- <variable
name="loading"
type="Boolean" />-->
<variable
name="bottomMenu"
type="Boolean" />
<variable
name="clickListener"
type="com.ecom.side_menu.SideMenuClickHandler" />
</data>
<androidx.drawerlayout.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:fitsSystemWindows="false"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/layToolbar"
layout="@layout/layout_toolbar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/splash_host"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/white"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/layToolbar"
app:navGraph="@navigation/splash_graph" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigationView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:background="@color/colorPrimary"
android:visibility="@{safeUnbox(bottomMenu) ? View.VISIBLE : View.GONE}"
app:itemBackground="@color/colorPrimary"
app:itemIconTint="@android:color/white"
app:itemTextColor="@android:color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:menu="@menu/menu_navigation_dashboard" />
<!-- <include
android:id="@+id/progressLayoutId"
layout="@layout/layout_progress"
android:visibility="@{safeUnbox(loading) ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />-->
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/navigationView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white"
android:fitsSystemWindows="true"
android:visibility="visible">
<include
android:id="@+id/customDrawerList"
app:clickListener="@{clickListener}"
layout="@layout/drawer_list" />
</com.google.android.material.navigation.NavigationView>
</androidx.drawerlayout.widget.DrawerLayout>
</layout>
Ответы:
Это случилось и со мной. Связующие классы фактически генерируются. Проект строит нормально. Только Android Studio 3.6.1 (или базовая система сборки Gradle, мне все равно) глючит и не может видеть эти классы.
В качестве промежуточного решения я просто взломал исходные наборы (обратите внимание, что варианты сборки в приведенном ниже фрагменте относятся к моему проекту, вам нужно переписать его).
Как указал Стив выше: в то же время мы должны терпеливо ждать, пока Google исправит это ...
РЕДАКТИРОВАТЬ
Я только что понял, что это НАМНОГО больше глючит, чем я ожидал, макеты тоже сломаны:
Я надеюсь, что Google скоро исправит этот беспорядок ...
РЕДАКТИРОВАТЬ 2
Я снова понял, что Android Studio 3.6 еще более глючит, чем описано выше.
Выполнение существующих тестов эспрессо тоже нарушено.
Я настоятельно не рекомендую всем переходить на Android Studio 3.6.
В то же время мы, вероятно, вернемся к Android Studio 3.5.
источник
Просто обновите свою версию Gradle до последней версии. Перейти к:
Файл> Структура проекта> Версия Gradle
И выберите последнюю стабильную версию (в настоящее время 6.3). Проверьте также версию Android Gradle Plugin, если она также указывает на последнюю версию.
источник
Для AndroidStudio 3.6.1 вы можете добавить приведенный ниже код на уровень приложения build.gradle (: app) . Моя проблема решена добавлением этой строки, надеюсь, что вы тоже.
источник
Я использую Android Studio 3.6.1 проблема решена после добавления
viewBinding.enabled = true
вandroid{
вbuild.gradle
:источник
Похоже, что в последней библиотеке привязки данных Android есть ошибка. Очистка проекта не сработала. Восстановление проекта не сработало. Аннулирование кэшей и перезапуск не сработали.
ЕДИНСТВЕННОЕ решение, которое работало для меня, - откат версии привязки данных от версии 2 (которая является новой версией по умолчанию в Android Studio 3.6.1 и выше) до версии 1. Чтобы сделать это, вам не нужно откатывать ВСЕ Студия Android. Вместо этого вы можете добавить следующую строку
gradle.properties
:TLDR; Мне интересно, решил ли Google полностью обновить способ связывания данных с их последним компилятором привязки данных. Не было бы удивительно, если бы команда работала над предоставлением YAS (еще один синтаксис). В конце концов,
DataBindingUtil.inflate<MyClassBindingImpl>
это должен быть один из самых причудливых шаблонов использования во всем компьютерном программировании, требующий, чтобы компилятор автоматически генерировал конкретную реализацию универсального класса привязки данных ДО того, как вы сможете ссылаться на автоматически сгенерированный класс в своем коде. Кстати, именно поэтому такие инструментыMake Project
существуют. Я ожидаю, что в скором времени будет полностью пересмотрен синтаксис привязки данных.источник
Попробуйте пересобрать проект и посмотреть, доступна ли папка привязки данных в сгенерированных файлах
источник
Также случилось со мной. Это связано с тем, что в AS 3.6.0 мы не можем получить доступ к привязке из другого модуля, если используем тег включения с android: id . Я думаю, что эта ошибка из IDE, потому что я могу успешно запустить проект. Единственное, что нужно сделать, это дождаться исправления или просто проигнорировать ошибку.
источник
Это случилось со мной тоже. Я только что обновил версию Graddle до версии 3.6.0 в файле build.graddle проекта, и теперь он снова работает.
источник
у меня была эта проблема, потому что у меня были отдельные макеты в несколько каталогов и определить их в Gradle, как показано ниже
Поэтому я поместил все макеты в основной каталог макетов и удалил другие каталоги суб макетов.
источник
Это, кажется, исправлено в Android studio 3.6.3. Хотя
работал на меня, а не
источник