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>
Respuestas:
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).
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:
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.
fuente
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.
fuente
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.
fuente
Estoy usando Android Studio 3.6.1 el problema resuelto después de añadir
viewBinding.enabled = true
aandroid{
enbuild.gradle
:fuente
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 a
gradle.properties
: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 queMake Project
existen herramientas como . Casi espero que una revisión completa de la sintaxis de enlace de datos llegue en breve.fuente
Intente reconstruir el proyecto y vea si la carpeta de enlace de datos está disponible en los archivos generados
fuente
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.
fuente
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.
fuente
tuve este problema porque separé mis diseños en varios directorios y los definí en gradle como abajo
Así que pongo todos los diseños en el directorio de diseño principal y elimino otros directorios de diseño secundario
fuente
Esto parece solucionarse con Android Studio 3.6.3. A pesar de que
funcionó para mí también en lugar de
fuente