Kelas pengikatan data tidak dihasilkan di studio terbaru 3.6

9

Hari ini saya telah memperbarui studio android saya 3.5.3 ke 3.6. Sekarang, saya tidak dapat menghasilkan kelas pengikatan data apa pun. Android studio sendiri menghasilkan file data-binding-iml.

Apakah ada yang menghadapi masalah seperti itu?

Gradle wrapper.properties:

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

File tingkat proyek level:

dependencies {
        classpath 'com.android.tools.build:gradle:3.5.3'
}

File tingkat tingkat aplikasi:

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

properti gradle:

kotlin.code.style=official
android.databinding.enableV2=true
kotlin.incremental=true
kapt.incremental.apt=true

Di bawah ini adalah Activity saya dan file XML: Activity:

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>

Solusi resmi:

Google telah mengatasi masalah ini. Setelah memperbarui dengan tambalan baru android studio 3.6.2, saya dapat membuat kelas penyatuan data dengan beberapa sumber

Mehta
sumber
Saya juga memperbarui studio hari ini sendiri && juga menggunakan kelas pengikatan data .. ini berfungsi dengan baik bro
Nice umang
cukup batalkan cache dan mulai ulang studio Anda;)
Nice umang
@Niceumang Saya telah mencoba cache yang tidak valid dan restart, bersama dengan saya mencoba untuk menghapus build folder juga .. Tapi masih kesalahan yang sama
Mehta
Anda akan menunjukkan XML dan kelas Anda di mana Anda membuat kelas yang mengikat?
Umang bagus
@Niceumang kelas dan XML ditambahkan dalam pertanyaan
Mehta

Jawaban:

6

Ini juga terjadi pada saya. Kelas-kelas yang mengikat sebenarnya dihasilkan. Proyek ini dibangun dengan baik. Hanya Android Studio 3.6.1 (atau sistem pembangunan Gradle yang mendasarinya, saya tidak peduli) buggy dan tidak dapat melihat kelas-kelas ini.

Sebagai solusi perantara, saya baru saja meretas set sumber (harap dicatat bahwa varian build di fragmen di bawah ini khusus untuk proyek saya, Anda perlu menulis ulang).

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

Seperti yang ditunjukkan oleh Steve di atas: Sementara itu, kita harus sabar menunggu Google untuk memperbaikinya ...

EDIT

Saya baru saja menyadari itu BANYAK lebih buggy dari yang saya harapkan, tata letak juga rusak:

Harap harap Google tersayang: Jangan merilis versi perantara yang tidak stabil kepada kami "

Saya harap Google akan segera memperbaiki kekacauan ini ...

EDIT 2

Saya menyadari lagi bahwa Android Studio 3.6 bahkan lebih buggy daripada yang dijelaskan di atas.

Eksekusi tes Espresso yang ada juga rusak.

Saya sangat menganjurkan semua orang untuk meningkatkan ke Android Studio 3.6.

Saya waktu yang berarti, kita mungkin akan turun ke Android Studio 3.5.

Jiří Křivánek
sumber
terima kasih .. Peretasan ini berfungsi dengan baik .. Sekarang saya dapat membuat kelas Binding.
Mehta
Ya, semoga google akan segera memperbaiki bug ini
Mehta
1
tetapi variabel yang masih mengikat tidak dapat diakses dengan benar di xml
Mehta
Sayangnya, seperti yang disebutkan dalam EDIT saya di atas :(
Jiří Křivánek
4

Cukup perbarui versi Gradle Anda ke yang terbaru. Pergi ke:

File> Struktur Proyek> Versi Gradle

Dan pilih versi stabil terbaru (saat ini 6.3). Periksa juga Versi Plugin Android Gradle Anda jika itu juga menunjuk ke yang terbaru.

Rui
sumber
Terima kasih, bantuan ini dalam kasus saya! +1
Tano
3

Untuk AndroidStudio 3.6.1 , Anda dapat menambahkan kode di bawah ini ke build.gradle tingkat aplikasi (: aplikasi) . Masalah saya terpecahkan dengan menambahkan baris ini, harap Anda juga.

sourceSets {
     main {
          java.srcDirs += 'build/generated/data_binding_base_class_source_out/debug/out'
        }
    }
Jack Franchi
sumber
seperti yang disarankan oleh Jiří Křivánek & Anda, saya telah menambahkan solusi yang disebutkan tetapi sekarang, setiap variabel ditampilkan dengan garis bawah merah .. tidak dapat mengakses
Mehta
3

Saya menggunakan android studio 3.6.1 masalah diselesaikan setelah menambahkan viewBinding.enabled = trueke android{dalam build.gradle:

android {

...
    dataBinding {
        enabled = true
    }
    viewBinding.enabled = true
mhKarami
sumber
itu berhasil, thx bro
Fanadez
Berhasil!! saya kehilangan dataBinding {enabled = true}
Billyjoker
2

Tampaknya ada bug di pustaka data mengikat Android terbaru. Membersihkan proyek tidak berhasil. Membangun kembali proyek tidak berhasil. Memvalidasi cache dan memulai ulang tidak berhasil.

Solusi HANYA yang bekerja untuk saya adalah memutar kembali versi pengikatan data dari versi 2 (yang merupakan default baru di Android Studio 3.6.1 dan lebih tinggi) ke versi 1. Untuk melakukan ini, Anda tidak perlu memutar kembali SEMUA Android Studio. Alih-alih, Anda dapat menambahkan baris berikut ke gradle.properties:

android.databinding.enableV2=false

TLDR; Saya bertanya-tanya apakah Google telah memutuskan untuk benar-benar mengubah cara kita seharusnya melakukan pengikatan data dengan kompilasi pengikat data terbaru mereka. Tidak mengherankan jika tim bekerja untuk menyediakan YAS (lagi sintaks). Lagi pula, DataBindingUtil.inflate<MyClassBindingImpl>harus menjadi salah satu pola penggunaan paling aneh di semua pemrograman komputer, yang mengharuskan kompiler untuk secara otomatis menghasilkan implementasi konkret dari kelas pengikatan data generik SEBELUM Anda dapat merujuk kelas yang dibuat secara otomatis dalam kode Anda. BTW, ini sebabnya alat seperti Make Projectada. Saya setengah berharap perbaikan lengkap untuk sintaks data mengikat akan segera tiba.

bajingan
sumber
0

Cobalah membangun kembali proyek dan melihat apakah folder pengikatan data tersedia dalam file yang dihasilkan

Prakash Reddy
sumber
0

Juga terjadi pada saya. Ini karena di AS 3.6.0, kami tidak dapat mengakses pengikatan dari modul lain jika kami menggunakan tag include dengan android: id . Saya pikir kesalahan ini dari IDE karena saya dapat menjalankan proyek dengan sukses. Satu-satunya hal yang harus dilakukan adalah menunggu perbaikan atau abaikan saja kesalahannya.

Steve
sumber
0

Ini terjadi pada saya juga. Saya baru saja memutakhirkan versi Graddle ke 3.6.0 pada file build.graddle proyek dan sekarang ini berfungsi lagi.

oitantksi
sumber
0

Saya punya masalah ini karena saya telah memisahkan layout saya ke beberapa direktori dan mendefinisikannya secara gradual seperti di bawah ini

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',
                ]
    }

}

Jadi saya meletakkan semua tata letak di direktori tata letak utama dan menghapus direktori tata letak sub lainnya

Marjan Davodinejad
sumber
0

Ini tampaknya diperbaiki dengan Android studio 3.6.3. Meskipun

viewBinding.enabled = true

bekerja untuk saya juga, bukan

viewBinding {
    enabled = true
}
S.Javed
sumber