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>
Jawaban:
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).
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:
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.
sumber
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.
sumber
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.
sumber
Saya menggunakan android studio 3.6.1 masalah diselesaikan setelah menambahkan
viewBinding.enabled = true
keandroid{
dalambuild.gradle
:sumber
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
: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 sepertiMake Project
ada. Saya setengah berharap perbaikan lengkap untuk sintaks data mengikat akan segera tiba.sumber
Cobalah membangun kembali proyek dan melihat apakah folder pengikatan data tersedia dalam file yang dihasilkan
sumber
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.
sumber
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.
sumber
Saya punya masalah ini karena saya telah memisahkan layout saya ke beberapa direktori dan mendefinisikannya secara gradual seperti di bawah ini
Jadi saya meletakkan semua tata letak di direktori tata letak utama dan menghapus direktori tata letak sub lainnya
sumber
Ini tampaknya diperbaiki dengan Android studio 3.6.3. Meskipun
bekerja untuk saya juga, bukan
sumber