नवीनतम स्टूडियो में डेटा बाध्यकारी वर्ग उत्पन्न नहीं 3.6


11

आज मैंने अपने एंड्रॉइड स्टूडियो को 3.5.3 से 3.6 तक अपडेट किया है। अब, मैं कोई डेटा बाइंडिंग क्लास उत्पन्न करने में सक्षम नहीं हूं। एंड्रॉइड स्टूडियो यह स्वयं डेटा-बाइंडिंग-इमएल फ़ाइल जनरेट करता है।

क्या किसी ने इस तरह के मुद्दे का सामना किया?

ग्रेड आवरण:

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

परियोजना स्तर की ग्रेड फ़ाइल:

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 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 के नए पैच के साथ अपडेट करने के बाद, मैं कई स्रोत सेट के साथ डेटाबाइंडिंग क्लास बनाने में सक्षम हूं


मैं आज ही स्टूडियो भी अपडेट करता हूं && भी डेटा बाइंडिंग क्लासेस का उपयोग करता हूं .. यह अच्छी तरह से काम कर रहा है
नाइस उमंग

बस कैश को अमान्य करें और अपने स्टूडियो को फिर से
चालू करें

@ निसुमंग मैंने अवैध कैश और पुनः आरंभ करने की कोशिश की है, साथ ही मैंने बिल्ड फ़ोल्डर को भी हटाने की कोशिश की है .. लेकिन अभी भी वही त्रुटि
मेहता

क्या आप अपना XML और वर्ग दिखाएंगे जहाँ आप बाइंडिंग क्लास बनाते हैं?
अच्छा umang

@Niceumang वर्ग और XML ने सवाल में कहा
मेहता

जवाबों:


6

यह मुझे भी हुआ था। बाध्यकारी कक्षाएं वास्तव में उत्पन्न होती हैं। प्रोजेक्ट ठीक बनाता है। केवल एंड्रॉइड स्टूडियो 3.6.1 (या अंतर्निहित ग्रेडल सिस्टम, मुझे परवाह नहीं है) छोटी गाड़ी है और इन कक्षाओं को नहीं देख सकता है।

एक मध्यवर्ती समाधान के रूप में, मैंने सिर्फ स्रोत सेटों को हैक किया है (कृपया ध्यान दें कि नीचे के टुकड़े में वेरिएंट का निर्माण मेरी परियोजना के लिए विशिष्ट है, आपको इसे फिर से लिखना होगा)।

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 की प्रतीक्षा करनी होगी ...

संपादित करें

मैंने अभी महसूस किया है कि मैं उम्मीद से ज्यादा छोटी है, लेआउट भी टूट गए हैं:

कृपया प्रिय Google को: हमारे लिए अस्थिर मध्यवर्ती संस्करण जारी न करें "

मुझे उम्मीद है कि Google जल्द ही इस गड़बड़ को ठीक कर देगा ...

EDIT 2

मुझे फिर से एहसास हुआ कि एंड्रॉइड स्टूडियो 3.6 ऊपर वर्णित से भी अधिक छोटी गाड़ी है।

मौजूदा एस्प्रेसो परीक्षणों का निष्पादन भी टूट गया है।

मैं एंड्रॉइड स्टूडियो 3.6 में अपग्रेड करने से सभी को दृढ़ता से हतोत्साहित करता हूं।

मेरा मतलब समय है, हम शायद एंड्रॉइड स्टूडियो 3.5 पर वापस डाउनग्रेड करेंगे।


धन्यवाद .. यह हैक ठीक काम कर रहा है .. अब मैं बंधन वर्ग बनाने में सक्षम हूं।
मेहता

हाँ, आशा है कि गूगल जल्द ही इस बग को ठीक कर देगा
मेहता

1
लेकिन अभी भी बाध्यकारी चर xml में ठीक से सुलभ नहीं हैं
मेहता

दुर्भाग्य से, जैसा कि ऊपर मेरे EDIT में उल्लेख किया गया है :(
Jiří Kánivánek

4

मैं एंड्रॉयड स्टूडियो 3.6.1 का उपयोग कर रहा समस्या को जोड़ने के बाद हल viewBinding.enabled = trueकरने android{में build.gradle:

android {

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

यह काम किया, thx भाई
फैनडेज़

यह काम करता हैं!! मुझे डेटाबाइंडिंग याद आ रही थी {सक्षम = सत्य}
बिलजोकर

4

बस अपने ग्रेड संस्करण को नवीनतम में अपडेट करें। के लिए जाओ:

फ़ाइल> प्रोजेक्ट संरचना> ग्रेड संस्करण

और नवीनतम स्थिर संस्करण (वर्तमान में 6.3) का चयन करें। यदि यह नवीनतम की ओर भी इशारा करता है तो अपने एंड्रॉइड ग्रैडल प्लगिन संस्करण को भी देखें।


धन्यवाद, मेरे मामले में यह मदद! +1
टानो

3

के लिए AndroidStudio 3.6.1 , आप एप्लिकेशन स्तर तक में नीचे दिए गए कोड जोड़ सकते हैं (: एप्लिकेशन) build.gradle । इस लाइन को जोड़कर मेरी समस्या हल हो गई है, आशा है कि आपकी भी।

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

जैसा कि Ji ,í Křivánek और आप ने सुझाव दिया है, मैंने उल्लेखित समाधान जोड़ा है, लेकिन अब, हर चर लाल रेखांकन के साथ प्रदर्शित हो रहा है .. तक पहुँचने में सक्षम नहीं है
मेहता

2

ऐसा प्रतीत होता है कि नवीनतम एंड्रॉइड डेटा बाइंडिंग लाइब्रेरी में एक बग है। प्रोजेक्ट की सफाई से काम नहीं चला। परियोजना के पुनर्निर्माण से काम नहीं चला। अमान्य कैश और पुनरारंभ करने से काम नहीं चला।

मेरे लिए काम करने वाला एकमात्र समाधान संस्करण 2 से डेटा बाइंडिंग संस्करण को वापस ला रहा था (जो कि एंड्रॉइड स्टूडियो में नया डिफ़ॉल्ट 3.6.1 और उच्चतर) संस्करण 1 में है। ऐसा करने के लिए, आपको सभी वापस रोल करने की आवश्यकता नहीं है Android स्टूडियो। इसके बजाय आप निम्न पंक्ति जोड़ सकते हैं gradle.properties:

android.databinding.enableV2=false

TLDR; मुझे आश्चर्य है कि क्या Google ने अपने नवीनतम डेटा बाइंडिंग कंपाइलर के साथ डेटा बाइंडिंग करने के तरीके को पूरी तरह से सुधारने का निर्णय लिया है। यह आश्चर्य की बात नहीं होगी अगर टीम YAS (अभी तक एक और वाक्यविन्यास) प्रदान करने के लिए काम कर रही थी। आखिरकार, DataBindingUtil.inflate<MyClassBindingImpl>कंप्यूटर प्रोग्रामिंग के सभी में सबसे विचित्र उपयोग पैटर्न में से एक हो गया है, जो कंपाइलर को एक जेनेरिक डेटा बाइंडिंग क्लास के ठोस कार्यान्वयन के लिए आवश्यक है, इससे पहले कि आप अपने कोड में ऑटो-जनरेटेड क्लास का संदर्भ दे सकें। BTW, यही कारण है कि जैसे उपकरण Make Projectमौजूद हैं। मैं जल्द ही आने वाले डेटा बाइंडिंग सिंटैक्स के लिए एक पूर्ण ओवरहाल की उम्मीद करता हूं।


1

मेरे पास इस समस्या का कारण था कि मैंने अपने लेआउट को कई निर्देशिका में अलग कर दिया था और उन्हें बोले की तरह ढाल में परिभाषित किया था

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

मेरे साथ भी हुआ। ऐसा इसलिए है क्योंकि 3.6.0 के रूप में, हम किसी अन्य मॉड्यूल से बाध्यकारी का उपयोग नहीं कर सकते हैं यदि हम एंड्रॉइड के साथ टैग को शामिल करते हैं : आईडी । मुझे लगता है कि यह त्रुटि आईडीई से है क्योंकि मैं परियोजना को सफलतापूर्वक चला सकता हूं। केवल एक चीज को ठीक करने के लिए इंतजार करना या त्रुटि को अनदेखा करना है।


0

वह मेरे साथ भी हुआ। मैंने प्रोजेक्ट बिल्ड.ग्रेडल फ़ाइल पर ग्रैडल संस्करण को केवल 3.6.0 में अपग्रेड किया और अब यह फिर से काम कर रहा है।


0

यह एंड्रॉइड स्टूडियो 3.6.3 के साथ तय किया गया लगता है। हालांकि

viewBinding.enabled = true

मेरे बदले भी काम किया

viewBinding {
    enabled = true
}

एंड्रॉइड में काम नहीं करने की पुष्टि कर सकते हैं3.6.3
कार्तिक गरासिया

कृपया इसे कुछ संदर्भ दें। यह कोड क्या है यह कहाँ जाता है?
चुपके रब्बी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.