Clase de enlace de datos no generada en el último estudio 3.6

9

Hoy he actualizado mi estudio de Android 3.5.3 a 3.6. Ahora, no puedo generar ninguna clase de enlace de datos. Android Studio es un archivo auto-vinculante-iml de generación de datos.

¿Alguien se enfrentó a tal problema?

Gradle wrapper.properties:

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

Archivo gradle de nivel de proyecto:

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

Archivo gradle de nivel de aplicación:

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

A continuación se muestra mi actividad y archivos XML: Actividad:

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>

Solución oficial:

Google ha resuelto este problema. Después de actualizar con el nuevo parche de Android Studio 3.6.2, puedo crear una clase de enlace de datos con un conjunto de fuentes múltiples

Mehta
fuente
También actualizo el estudio hoy mismo y también uso clases de enlace de datos ... está funcionando muy bien hermano
Buen día
simplemente invalidar cachés y reiniciar su estudio;)
Buen trabajo
@Niceumang He intentado invalidar cachés y reiniciar, junto con he intentado eliminar la carpeta de compilación también ... Pero aún el mismo error
Mehta
¿Mostrará su XML y clase donde crea la clase de enlace?
Agradable
Clase @Niceumang y XML agregado en cuestión
Mehta

Respuestas:

6

Esto me pasó a mí también. Las clases de enlace se generan realmente. El proyecto se construye bien. Solo Android Studio 3.6.1 (o el sistema de compilación Gradle subyacente, no me importa) tiene errores y no puede ver estas clases.

Como solución intermedia, acabo de piratear los conjuntos de origen (tenga en cuenta que las variantes de compilación en el fragmento a continuación son específicas de mi proyecto, debe reescribirlo).

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

Como señaló Steve anteriormente: Mientras tanto, tenemos que esperar pacientemente a que Google lo arregle ...

EDITAR

Me acabo de dar cuenta de que es MUCHO más defectuoso de lo que esperaba, los diseños también están rotos:

Por favor, querido Google: no nos envíes versiones intermedias inestables "

Espero que Google arregle este desastre pronto ...

EDITAR 2

Me he dado cuenta nuevamente de que Android Studio 3.6 es aún más defectuoso que lo descrito anteriormente.

La ejecución de las pruebas existentes de Espresso también se interrumpe.

Desaliento encarecidamente a todos que actualicen a Android Studio 3.6.

Mientras tanto, probablemente volveremos a Android Studio 3.5.

Jiří Křivánek
fuente
gracias. Este truco funciona bien. Ahora puedo crear la clase Binding.
Mehta
Sí, espero que Google solucione este error pronto
Mehta
1
pero aún vinculante variable no se puede acceder correctamente en XML
Mehta
Desafortunadamente, como se menciona en mi EDIT arriba :(
Jiří Křivánek
4

Simplemente actualice su versión de Gradle a la última. Ir:

Archivo> Estructura del proyecto> Versión Gradle

Y seleccione la última versión estable (actualmente 6.3). Verifique también su versión de Android Gradle Plugin si también apunta a la última.

Rui
fuente
Gracias, esta ayuda en mi caso! +1
Tano
3

Para AndroidStudio 3.6.1 , puede agregar el siguiente código en el nivel de aplicación build.gradle (: aplicación) . Mi problema se resuelve agregando esta línea, espero que la tuya también.

sourceSets {
     main {
          java.srcDirs += 'build/generated/data_binding_base_class_source_out/debug/out'
        }
    }
Jack Franchi
fuente
según lo sugerido por Jiří Křivánek y usted, he agregado la solución mencionada, pero ahora, todas las variables se muestran con un subrayado rojo ... no se puede acceder
Mehta
3

Estoy usando Android Studio 3.6.1 el problema resuelto después de añadir viewBinding.enabled = truea android{en build.gradle:

android {

...
    dataBinding {
        enabled = true
    }
    viewBinding.enabled = true
mhKarami
fuente
funcionó, gracias hermano
Fanadez
¡¡Funciona!! me faltaba el enlace de datos {enabled = true}
Billyjoker
2

Parece que hay un error en la última biblioteca de enlace de datos de Android. La limpieza del proyecto no funcionó. La reconstrucción del proyecto no funcionó. La invalidación de cachés y el reinicio no funcionaron.

La ÚNICA solución que funcionó para mí fue revertir la versión de enlace de datos de la versión 2 (que es el nuevo valor predeterminado en Android Studio 3.6.1 y superior) a la versión 1. Para hacer esto, no tiene que revertir TODOS Android Studio. En su lugar, puede agregar la siguiente línea agradle.properties :

android.databinding.enableV2=false

TLDR; Me pregunto si Google ha decidido renovar por completo la forma en que se supone que debemos hacer el enlace de datos con su último compilador de enlace de datos. No sería sorprendente si el equipo estuviera trabajando para proporcionar YAS (otra sintaxis más). Después de todo, DataBindingUtil.inflate<MyClassBindingImpl>tiene que ser uno de los patrones de uso más extraños en toda la programación de computadoras, que requiere que el compilador genere automáticamente una implementación concreta de una clase genérica de enlace de datos ANTES de que pueda hacer referencia a la clase autogenerada en su código. Por cierto, es por eso que Make Projectexisten herramientas como . Casi espero que una revisión completa de la sintaxis de enlace de datos llegue en breve.

rmirabelle
fuente
0

Intente reconstruir el proyecto y vea si la carpeta de enlace de datos está disponible en los archivos generados

Prakash Reddy
fuente
0

También me pasó a mí. Esto se debe a que en AS 3.6.0, no podemos acceder al enlace desde otro módulo si usamos la etiqueta de inclusión con android: id . Creo que este error es del IDE porque puedo ejecutar el proyecto con éxito. Lo único que debe hacer es esperar la solución o simplemente ignorar el error.

Steve
fuente
0

También me pasó a mí. Acabo de actualizar la versión de Graddle a 3.6.0 en el archivo build.graddle del proyecto y ahora está funcionando nuevamente.

oitantksi
fuente
0

tuve este problema porque separé mis diseños en varios directorios y los definí en gradle como abajo

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

}

Así que pongo todos los diseños en el directorio de diseño principal y elimino otros directorios de diseño secundario

Marjan Davodinejad
fuente
0

Esto parece solucionarse con Android Studio 3.6.3. A pesar de que

viewBinding.enabled = true

funcionó para mí también en lugar de

viewBinding {
    enabled = true
}
S. Javed
fuente