Клас зв’язування даних не генерується в останній студії 3.6


11

Сьогодні я оновив свою андроїд-студію 3.5.3 до 3.6. Тепер я не в змозі створити жоден клас прив'язки даних. Android studio це самостійно генеруючи дані-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'
}

Файл градації рівня програми:

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>

Офіційне рішення:

Google вирішив цю проблему. Після оновлення з новим патчем для андроїд-студії 3.6.2 я можу створити клас прив'язки даних з множинним набором джерел


Я також сам оновлюю студію сьогодні && також використовую класи прив'язки даних .. це добре працює
брато

просто скасуйте кеші та перезапустіть свою студію;)
Nice umang

@Niceumang Я спробував визнати недійсними кеші та перезапустити, а також спробував видалити збірку папок .. Але все-таки така ж помилка
Мехта

покажете ваш XML та клас, де ви створюєте клас прив'язки?
Ніцца умань

Клас @Niceumang та XML додали питання
Мехта,

Відповіді:


6

Це сталося і зі мною. Класи зв'язування фактично генеруються. Проект будує чудово. Тільки Android Studio 3.6.1 (або основна система збірки Gradle, мені це не байдуже) є помилкою і не може бачити ці класи.

Як проміжне рішення, я просто зламав джерельні набори (будь ласка, зауважте, що варіанти збірки у фрагменті нижче специфічні для мого проекту, вам потрібно його переписати).

android {
    ...
    sourceSets {
        demoDebug {
            java.srcDirs += 'build/generated/data_binding_base_class_source_out/demoDebug/out'
        }
        fullDebug {
            java.srcDirs += 'build/generated/data_binding_base_class_source_out/fullDebug/out'
        }
        espressoDebug {
            java.srcDirs += 'build/generated/data_binding_base_class_source_out/espressoDebug/out'
        }
        demoRelease {
            java.srcDirs += 'build/generated/data_binding_base_class_source_out/demoRelease/out'
        }
        fullRelease {
            java.srcDirs += 'build/generated/data_binding_base_class_source_out/fullRelease/out'
        }
        espressoRelease {
            java.srcDirs += 'build/generated/data_binding_base_class_source_out/espressoRelease/out'
        }
    }
    ...
}

Як вказував Стів вище: Ми тим часом мусимо терпляче чекати, коли Google це виправить ...

EDIT

Я щойно зрозумів, що це набагато глючніше, ніж я очікував, макети теж порушені:

Будь ласка, шановний Google: не випускайте нам нестабільні проміжні версії "

Я сподіваюся, що Google незабаром виправить цей безлад ...

EDIT 2

Я знову зрозумів, що Android Studio 3.6 є ще більш глючним, ніж описано вище.

Виконання існуючих тестів Еспресо теж порушено.

Я настійно перешкоджаю всім перейти на Android Studio 3.6.

Я маю на увазі час, ми, ймовірно, повернемося до Android Studio 3.5.


дякую .. Цей хак працює чудово .. Тепер я можу створити клас прив’язки.
Мехта

Так, сподіваємось, Google швидко виправить цю помилку
Мехта

1
але змінна прив'язка не доступна належним чином у xml
Мехта

На жаль, як згадувалося в моїй редакції вище :(
Jiří Křivánek

4

Я використовую Android Studio 3.6.1 проблема вирішена після додавання viewBinding.enabled = trueдо android{в build.gradle:

android {

...
    dataBinding {
        enabled = true
    }
    viewBinding.enabled = true

це спрацювало, thx bro
Fanadez

Це працює!! у мене пропустили прив'язку даних {увімкнено = true}
Billyjoker

4

Просто оновіть версію Gradle до останньої. Йти до:

Файл> Структура проекту> Версія Gradle

І виберіть останню стабільну версію (наразі 6.3). Перевірте також свою версію плагіна Android Gradle, якщо вона також вказує на останню версію.


Дякую, ця допомога в моєму випадку! +1
Тано

3

Для AndroidStudio 3.6.1 ви можете додати код нижче до рівня app build.gradle (: app) . Мою проблему вирішуємо, додавши цей рядок, сподіваємось і на ваш.

sourceSets {
     main {
          java.srcDirs += 'build/generated/data_binding_base_class_source_out/debug/out'
        }
    }

як запропонував Jiří Křivánek & you, я додав згадане рішення, але тепер усі змінні відображаються червоним підкресленням .. не в змозі отримати доступ
Mehta

2

Здається, є помилка в останній бібліотеці прив’язки даних Android. Прибирання проекту не спрацювало. Перебудувати проект не вдалося. Недійсні кеші та перезапуск не спрацювали.

ТІЛЬКО рішення, яке працювало для мене, було відкат версії для прив'язки даних від версії 2 (що є новим за замовчуванням в Android Studio 3.6.1 і новішої версії) до версії 1. Для цього вам не доведеться скасовувати ВСЕ з Android Studio. Натомість ви можете додати такий рядок до gradle.properties:

android.databinding.enableV2=false

TLDR; Мені цікаво, чи вирішила Google повністю переробити спосіб, яким ми повинні робити зв'язування даних з їх останнім компілятором прив'язки даних. Не дивно, якби команда працювала над створенням YAS (ще один синтаксис). Зрештою, DataBindingUtil.inflate<MyClassBindingImpl>він повинен бути однією з найбільш химерних моделей використання у всіх комп’ютерних програмуваннях, вимагаючи від компілятора автоматично генерувати конкретну реалізацію загального класу зв’язування даних ДО ПЕРЕД, ви можете посилатись на автоматично створений клас у своєму коді. До речі, ось такі інструменти Make Projectіснують. Я наполовину очікую, що незабаром відбудеться повний перегляд синтаксису зв’язування даних.


1

У мене була ця проблема, тому що я розділив свої макети на кілька директорій і визначив їх у gradle, як показано нижче

sourceSets {
    main {
        res.srcDirs =
                [
                        'src/main/res', 'src/main/drawable/button_icons', 'src/main/res/drawable/button_icons',

                        'src/main/res', 'src/main/layouts/user', 'src/main/res/layouts/user',
                        'src/main/res/layouts', 'src/main/layouts/user', 'src/main/res/layouts/user/register',
                        'src/main/res/layouts', 'src/main/layouts/user', 'src/main/res/layouts/user/login',
                        'src/main/res/layouts', 'src/main/layouts/user', 'src/main/res/layouts/user/profile',
                        'src/main/res/layouts', 'src/main/layouts/user', 'src/main/res/layouts/user/wallet',

                        'src/main/res/layouts/splash_layouts', 'src/main/res/layouts', 'src/main/res',

                        'src/main/res/layouts/main_layouts', 'src/main/res/layouts', 'src/main/res',
                        'src/main/res/layouts/main_layouts/sellers', 'src/main/res/layouts/main_layouts', 'src/main/res/layouts',

                        'src/main/res/layouts/dashboard_layouts', 'src/main/res/layouts', 'src/main/res',

                        'src/main/res/layouts/basket_layouts', 'src/main/res/layouts', 'src/main/res',
                        'src/main/res/layouts/factor_layouts', 'src/main/res/layouts', 'src/main/res',

                        'src/main/res/layouts/setting_layouts', 'src/main/res/layouts', 'src/main/res',
                ]
    }

}

Тому я поміщаю всі макети в основний каталог макетів і видаляю інші каталоги підкладки


0

Спробуйте відновити проект і побачити, чи доступна папка зв’язування даних у створених файлах


0

Зі мною теж трапилось. Це тому, що в AS 3.6.0 ми не можемо отримати доступ до прив’язки з іншого модуля, якщо ми використовуємо include tag з android: id . Я думаю, що ця помилка пов'язана з IDE, оскільки я можу успішно запустити проект. Єдине, що потрібно зробити - це почекати виправлення або просто ігнорувати помилку.


0

Це сталося і зі мною. Щойно я оновив версію Graddle до 3.6.0 на файл build.graddle проекту, і тепер він знову працює.


0

Здається, це виправлено за допомогою студії Android 3.6.3. Хоча

viewBinding.enabled = true

працював і на мене, а не на

viewBinding {
    enabled = true
}

Можу підтвердити, що не працює в android3.6.3
Kartik Garasia

Будь ласка, дайте цьому контекст. Що це за код. Куди воно йде?
Стелс-рабин
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.