Aujourd'hui, j'ai mis à jour mon studio Android 3.5.3 à 3.6. Maintenant, je ne peux pas générer de classe de liaison de données. Android studio, il génère automatiquement un fichier iml de liaison de données.
Quelqu'un at-il été confronté à un tel problème?
Gradle wrapper.properties:
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
Fichier de notes de niveau projet:
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
}
Fichier de notes au niveau de l'application:
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
Voici mes fichiers d'activité et XML: Activité:
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>
Réponses:
Cela m'est aussi arrivé. Les classes de liaison sont réellement générées. Le projet se construit bien. Seul Android Studio 3.6.1 (ou le système de construction Gradle sous-jacent, je m'en fiche) est bogué et ne peut pas voir ces classes.
En tant que solution intermédiaire, je viens de pirater les ensembles source (veuillez noter que les variantes de construction dans le fragment ci-dessous sont spécifiques à mon projet, vous devez le réécrire).
Comme l'a souligné Steve ci-dessus: En attendant, nous devons attendre patiemment que Google le corrige ...
ÉDITER
Je viens de réaliser qu'il est BEAUCOUP plus buggé que ce à quoi je m'attendais, les dispositions sont également cassées:
J'espère que Google corrigera bientôt ce gâchis ...
EDIT 2
J'ai réalisé à nouveau qu'Android Studio 3.6 est encore plus bogué que décrit ci-dessus.
L'exécution des tests Espresso existants est également interrompue.
Je décourage fortement tout le monde de passer à Android Studio 3.6.
Entre-temps, nous allons probablement revenir à Android Studio 3.5.
la source
Mettez simplement à jour votre version Gradle vers la dernière. Aller à:
Fichier> Structure du projet> Version Gradle
Et sélectionnez la dernière version stable (actuellement 6.3). Vérifiez également votre version du plug-in Android Gradle si elle pointe également vers la dernière version.
la source
Pour AndroidStudio 3.6.1 , vous pouvez ajouter le code ci-dessous au niveau de l'application build.gradle (: app) . Mon problème est résolu en ajoutant cette ligne, j'espère que la vôtre aussi.
la source
J'utilise studio android 3.6.1 le problème résolu après avoir ajouté
viewBinding.enabled = true
àandroid{
dansbuild.gradle
:la source
Il semble qu'il y ait un bogue dans la dernière bibliothèque de liaison de données Android. Le nettoyage du projet n'a pas fonctionné. La reconstruction du projet n'a pas fonctionné. L'invalidation des caches et le redémarrage n'ont pas fonctionné.
La SEULE solution qui a fonctionné pour moi consistait à restaurer la version de liaison de données de la version 2 (qui est la nouvelle valeur par défaut dans Android Studio 3.6.1 et supérieur) à la version 1. Pour ce faire, vous n'avez pas à restaurer TOUT Android Studio. Au lieu de cela, vous pouvez ajouter la ligne suivante à
gradle.properties
:TLDR; Je me demande si Google a décidé de réorganiser complètement la façon dont nous sommes censés faire la liaison de données avec leur dernier compilateur de liaison de données. Il ne serait pas surprenant que l'équipe travaille à fournir YAS (encore une autre syntaxe). Après tout,
DataBindingUtil.inflate<MyClassBindingImpl>
doit être l'un des modèles d'utilisation les plus bizarres de toute la programmation informatique, obligeant le compilateur à générer automatiquement une implémentation concrète d'une classe de liaison de données générique AVANT de pouvoir référencer la classe générée automatiquement dans votre code. BTW, c'est pourquoi des outils commeMake Project
existent. Je m'attends à moitié à une refonte complète de la syntaxe de liaison de données pour arriver sous peu.la source
Essayez de reconstruire le projet et voyez si le dossier de liaison de données est disponible dans les fichiers générés
la source
Il m'est aussi arrivé. En effet, dans AS 3.6.0, nous ne pouvons pas accéder à la liaison à partir d'un autre module si nous utilisons la balise include avec android: id . Je pense que cette erreur provient de l'IDE car je peux exécuter le projet avec succès. La seule chose à faire est d'attendre le correctif ou simplement d'ignorer l'erreur.
la source
Ça m'est aussi arrivé. Je viens de mettre à niveau la version Graddle vers 3.6.0 sur le fichier build.graddle du projet et maintenant cela fonctionne à nouveau.
la source
j'ai eu ce problème parce que j'avais séparé mes mises en page dans plusieurs répertoires et les définir en gradle comme ci-dessous
J'ai donc mis toutes les mises en page dans le répertoire de mise en page principal et je supprime les autres sous-répertoires de mise en page
la source
Cela semble être corrigé avec Android studio 3.6.3. Bien que
travaillé pour moi aussi au lieu de
la source