Lớp ràng buộc dữ liệu không được tạo trong studio mới nhất 3.6


9

Hôm nay tôi đã cập nhật studio android 3.5.3 lên 3.6. Bây giờ, tôi không thể tạo bất kỳ lớp ràng buộc dữ liệu nào. Android studio nó tự tạo tập tin liên kết dữ liệu-iml.

Có ai phải đối mặt với vấn đề như vậy?

Lớp bọc. Sản phẩm:

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

Tập tin cấp độ dự án:

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

Tập tin cấp độ ứng dụng:

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.properations:

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

Dưới đây là các tệp Hoạt động và XML của tôi: Hoạt động:

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>

Giải pháp chính thức:

Google đã giải quyết vấn đề này. Sau khi cập nhật với bản vá mới của android studio 3.6.2, tôi có thể tạo lớp dữ liệu với nhiều bộ nguồn


Hôm nay tôi cũng tự cập nhật studio && cũng sử dụng các lớp liên kết dữ liệu .. nó hoạt động rất tốt bro
Nice umang

chỉ cần vô hiệu hóa bộ nhớ cache và khởi động lại studio của bạn;)
Nice umang

@Niceumang Tôi đã thử vô hiệu hóa bộ nhớ cache và khởi động lại, cùng với đó tôi cũng đã cố gắng xóa thư mục bản dựng .. Nhưng vẫn cùng một lỗi
Mehta

bạn sẽ hiển thị XML và lớp nơi bạn tạo lớp liên kết chứ?
Đẹp umang

Lớp @Niceumang và XML được thêm vào trong câu hỏi
Mehta

Câu trả lời:


6

Điều này cũng xảy ra với tôi. Các lớp ràng buộc thực sự được tạo ra. Dự án xây dựng tốt. Chỉ Android Studio 3.6.1 (hoặc hệ thống xây dựng Gradle bên dưới, tôi không quan tâm) là lỗi và không thể thấy các lớp này.

Là một giải pháp trung gian, tôi vừa hack các bộ nguồn (xin lưu ý rằng các biến thể xây dựng trong đoạn dưới đây là dành riêng cho dự án của tôi, bạn cần viết lại nó).

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

Như Steve đã chỉ ra ở trên: Trong lúc này, chúng ta phải kiên nhẫn chờ đợi Google sửa nó ...

BIÊN TẬP

Tôi mới nhận ra rằng nó RẤT NHIỀU lỗi hơn tôi mong đợi, các bố cục cũng bị hỏng:

Xin vui lòng Google thân yêu: Không phát hành phiên bản trung gian không ổn định cho chúng tôi "

Tôi hy vọng Google sẽ sớm khắc phục tình trạng lộn xộn này ...

CHỈNH SỬA 2

Tôi đã nhận ra một lần nữa rằng Android Studio 3.6 thậm chí còn nhiều lỗi hơn so với mô tả ở trên.

Việc thực hiện các bài kiểm tra Espresso hiện tại cũng bị phá vỡ.

Tôi đặc biệt không khuyến khích mọi người nâng cấp lên Android Studio 3.6.

Ý tôi là thời gian, có lẽ chúng tôi sẽ hạ cấp trở lại Android Studio 3.5.


cảm ơn .. Bản hack này đang hoạt động tốt .. Bây giờ tôi có thể tạo lớp Binding.
Mehta

Có, hy vọng google sẽ sớm sửa lỗi này
Mehta

1
nhưng biến liên kết vẫn không thể truy cập đúng trong xml
Mehta

Thật không may, như đã đề cập trong EDIT của tôi ở trên :(
Jiří Křivánek

4

Chỉ cần cập nhật phiên bản Gradle của bạn lên bản mới nhất. Đi đến:

Tệp> Cấu trúc dự án> Phiên bản lớp

Và chọn phiên bản ổn định mới nhất (hiện là 6.3). Kiểm tra phiên bản Plugin Android Gradle của bạn nếu nó cũng trỏ đến phiên bản mới nhất.


Cảm ơn, sự giúp đỡ này trong trường hợp của tôi! +1
Tano

3

Đối với AndroidStudio 3.6.1 , Bạn có thể thêm mã bên dưới vào cấp độ ứng dụng build.gradle (: ứng dụng) . Vấn đề của tôi được giải quyết bằng cách thêm dòng này, hy vọng bạn cũng vậy.

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

như được đề xuất bởi Jiří Křivánek và bạn, tôi đã thêm giải pháp được đề cập nhưng bây giờ, mọi biến đều hiển thị với gạch chân màu đỏ .. không thể truy cập
Mehta

3

Tôi đang sử dụng Android Studio 3.6.1 vấn đề được giải quyết sau khi thêm viewBinding.enabled = truevào android{trong build.gradle:

android {

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

nó hoạt động, thx bro
Fanadez

Nó hoạt động !! tôi đã thiếu dataBinding {enable = true}
Billyjoker

2

Dường như có một lỗi trong thư viện liên kết dữ liệu Android mới nhất. Làm sạch dự án không hoạt động. Xây dựng lại dự án đã không làm việc. Bộ nhớ cache vô hiệu hóa và khởi động lại không hoạt động.

Giải pháp DUY NHẤT làm việc cho tôi là khôi phục phiên bản ràng buộc dữ liệu từ phiên bản 2 (là mặc định mới trong Android Studio 3.6.1 trở lên) sang phiên bản 1. Để thực hiện việc này, bạn không phải quay ngược TẤT CẢ Studio Android. Thay vào đó, bạn có thể thêm dòng sau vào gradle.properties:

android.databinding.enableV2=false

TLDR; Tôi tự hỏi liệu Google có quyết định cải tiến hoàn toàn cách chúng ta phải thực hiện ràng buộc dữ liệu với trình biên dịch liên kết dữ liệu mới nhất của họ hay không. Sẽ không ngạc nhiên nếu nhóm đang làm việc để cung cấp YAS (một cú pháp khác). Rốt cuộc, DataBindingUtil.inflate<MyClassBindingImpl>đã trở thành một trong những kiểu sử dụng kỳ lạ nhất trong tất cả các chương trình máy tính, yêu cầu trình biên dịch tự động tạo ra một triển khai cụ thể của lớp liên kết dữ liệu chung TRƯỚC KHI bạn có thể tham chiếu lớp được tạo tự động trong mã của mình. BTW, đây là lý do tại sao các công cụ như Make Projecttồn tại. Tôi mong đợi một cuộc đại tu hoàn chỉnh cho cú pháp ràng buộc dữ liệu sẽ đến sớm.


0

Hãy thử xây dựng lại dự án và xem liệu thư mục ràng buộc dữ liệu có sẵn trong các tệp được tạo không


0

Cũng xảy ra với tôi. Điều này là do trong AS 3.6.0, chúng tôi không thể truy cập liên kết từ một mô-đun khác nếu chúng tôi sử dụng thẻ bao gồm với android: id . Tôi nghĩ lỗi này là từ IDE vì tôi có thể chạy dự án thành công. Điều duy nhất cần làm là chờ sửa chữa hoặc chỉ cần bỏ qua lỗi.


0

Nó cũng xảy ra với tôi Tôi vừa nâng cấp phiên bản Graddle lên 3.6.0 trên tệp dự án build.graddle và bây giờ nó hoạt động trở lại.


0

tôi gặp vấn đề này vì tôi đã tách các bố cục của mình vào một số thư mục và định nghĩa chúng theo từng lớp như dưới đây

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

}

Vì vậy, tôi đặt tất cả các bố cục trong thư mục bố trí chính và xóa các thư mục bố trí phụ khác


0

Điều này dường như được khắc phục với Android studio 3.6.3. Mặc du

viewBinding.enabled = true

làm việc cho tôi là tốt thay vì

viewBinding {
    enabled = true
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.