android-studio - error - androidx databinding



Impossible de trouver le symbole DataBindingComponent sur Android Studio 3.2 Projet Canary 16 Kotlin (18)

Autre chose à essayer :) J'essayais d'obtenir GithubBrowserSample dans Android Studio 3.2 (RC3). J'ai continué à avoir beaucoup d'erreurs bizarres sur la liaison de données même si elle ne spécifiait pas de versions de liaison de données dans le fichier principal build.gradle. La solution consistait à supprimer ces deux lignes du fichier gradle.properties:

org.gradle.jvmargs=-Xmx4536m
android.databinding.enableV2=true

https://ffff65535.com

Je viens de créer un nouveau projet sur Android Studio 3.2 Canary 16 avec Kotlin activé. Ensuite, j'ai également activé la liaison de données, mais un message d'erreur s'affiche indiquant que la classe DataBindingComponent n'a pas été trouvée.

Voici mon diplôme de projet:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext.kotlin_version = '1.2.41'
    ext.android_plugin_version = '3.2.0-alpha10'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0-alpha16'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Mon fichier de module:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-kapt'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "net.julianonunes.myapp"
        minSdkVersion 22
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dataBinding {
        enabled = true
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
    implementation 'com.android.support:design:27.1.1'
    kapt "com.android.databinding:compiler:3.1.2"
}

Mon activité est 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"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="data"
            type="net.julianonunes.myapp.RegisterData" />
    </data>

    ....
</layout>

Et voici le résultat de la construction:

Executing tasks: [clean, :app:assembleDebug]

Configuration on demand is an incubating feature.

> Configure project :app
app: 'annotationProcessor' dependencies won't be recognized as kapt annotation processors. Please change the configuration name to 'kapt' for these artifacts: 'androidx.databinding:databinding-compiler:3.2.0-alpha16'.

> Task :clean
> Task :app:clean
> Task :app:preBuild UP-TO-DATE
> Task :app:preDebugBuild
> Task :app:compileDebugAidl NO-SOURCE
> Task :app:compileDebugRenderscript
> Task :app:checkDebugManifest
> Task :app:generateDebugBuildConfig
> Task :app:prepareLintJar UP-TO-DATE
> Task :app:mainApkListPersistenceDebug
> Task :app:generateDebugResValues
> Task :app:generateDebugResources
> Task :app:mergeDebugResources
> Task :app:createDebugCompatibleScreenManifests
> Task :app:processDebugManifest
> Task :app:splitsDiscoveryTaskDebug
> Task :app:processDebugResources
> Task :app:generateDebugSources
> Task :app:dataBindingExportBuildInfoDebug
> Task :app:transformDataBindingBaseClassLogWithDataBindingMergeGenClassesForDebug
> Task :app:transformDataBindingWithDataBindingMergeArtifactsForDebug
> Task :app:dataBindingGenBaseClassesDebug
Download https://dl.google.com/dl/android/maven2/com/android/databinding/compiler/3.1.2/compiler-3.1.2.pom
Download https://dl.google.com/dl/android/maven2/com/android/databinding/compiler/3.1.2/compiler-3.1.2.jar
> Task :app:kaptGenerateStubsDebugKotlin
e: /home/juliano/Documents/Projetos/myapp/app/build/generated/data_binding_base_class_source_out/debug/dataBindingGenBaseClassesDebug/out/net/julianonunes/myapp/databinding/ActivityMainBinding.java:28: error: cannot find symbol
  protected ActivityMainBinding(DataBindingComponent _bindingComponent, View _root,
                                ^
  symbol:   class DataBindingComponent
  location: class ActivityMainBinding
e: /home/juliano/Documents/Projetos/myapp/app/build/generated/data_binding_base_class_source_out/debug/dataBindingGenBaseClassesDebug/out/net/julianonunes/myapp/databinding/ActivityMainBinding.java:46: error: cannot find symbol
      @Nullable ViewGroup root, boolean attachToRoot, @Nullable DataBindingComponent component) {
                                                                ^
  symbol:   class DataBindingComponent
  location: class ActivityMainBinding
e: /home/juliano/Documents/Projetos/myapp/app/build/generated/data_binding_base_class_source_out/debug/dataBindingGenBaseClassesDebug/out/net/julianonunes/myapp/databinding/ActivityMainBinding.java:57: error: cannot find symbol
      @Nullable DataBindingComponent component) {
                ^
  symbol:   class DataBindingComponent
  location: class ActivityMainBinding
e: /home/juliano/Documents/Projetos/myapp/app/build/generated/data_binding_base_class_source_out/debug/dataBindingGenBaseClassesDebug/out/net/julianonunes/myapp/databinding/ActivityMainBinding.java:68: error: cannot find symbol
      @Nullable DataBindingComponent component) {
                ^
  symbol:   class DataBindingComponent
  location: class ActivityMainBinding
e: [kapt] An exception occurred: java.lang.NullPointerException
    at java.io.File.<init>(File.java:277)
    at android.databinding.annotationprocessor.ProcessExpressions.onHandleStep(ProcessExpressions.java:77)
    at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.runStep(ProcessDataBinding.java:203)
    at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.access$000(ProcessDataBinding.java:188)
    at android.databinding.annotationprocessor.ProcessDataBinding.doProcess(ProcessDataBinding.java:90)
    at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:65)
    at org.jetbrains.kotlin.kapt3.ProcessorWrapper.process(annotationProcessing.kt:131)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1068)
    at org.jetbrains.kotlin.kapt3.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:87)
    at org.jetbrains.kotlin.kapt3.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:45)
    at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.runAnnotationProcessing(Kapt3Extension.kt:257)
    at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.analysisCompleted(Kapt3Extension.kt:212)
    at org.jetbrains.kotlin.kapt3.ClasspathBasedKapt3Extension.analysisCompleted(Kapt3Extension.kt:95)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM$analyzeFilesWithJavaIntegration$2.invoke(TopDownAnalyzerFacadeForJVM.kt:97)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:107)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:84)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:374)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:64)
    at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:101)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:365)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:130)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:161)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:63)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:107)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:51)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:96)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$1$2.invoke(CompileServiceImpl.kt:405)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$1$2.invoke(CompileServiceImpl.kt:98)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:920)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:98)
    at org.jetbrains.kotlin.daemon.common.DummyProfiler.withMeasure(PerfUtils.kt:137)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.checkedCompile(CompileServiceImpl.kt:950)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.doCompile(CompileServiceImpl.kt:919)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:404)
    at sun.reflect.GeneratedMethodAccessor91.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

> Task :app:kaptDebugKotlin FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> Compilation error. See log for more details

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
See https://docs.gradle.org/4.7/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 8s
20 actionable tasks: 19 executed, 1 up-to-date

Quel est le problème avec mon projet?

PS: le problème se produit également sur Android Studio 3.1.2


Avec la configuration suivante

Android Studio 3.2.1 Version n ° AI-181.5540.7.32.5056338, créée le 8 octobre 2018 JRE: 1.8.0_152-release-1136-b06 x86_64 JVM: machine virtuelle de serveur 64 bits OpenJDK de JetBrains sro macOS 10.13.3

Et DataBinding permet simplement d’avoir cela dans mon application build.gradle

apply plugin: 'kotlin-kapt'

et alors

    dataBinding {
        enabled = true
    }

et aussi ceci dans mes propriétés de gradle.wrapper

android.databinding.enableV2=true

J'ai eu les mêmes erreurs:

could not find the DataBindingComponent class.

J'ai eu plus de 100 d'entre eux. Il s'est avéré que ces erreurs n'étaient pas importantes et que la véritable erreur sous-jacente n'était pas montrée par l'EDI. Par conséquent, j'ai augmenté le nombre d'erreurs que le compilateur Kotlin peut afficher en ajoutant ceci dans le fichier build.gradle:

dataBinding {
    enabled = true
}
kapt {
        javacOptions {
            // Increase the max count of errors from annotation processors.
            // Default is 100.
            option("-Xmaxerrs", 500)
        }
    }

Soudainement, juste en dessous de ces fausses erreurs, j'ai vu le vrai causé par un échec de la résolution des conflits de fusion


C'est un bug dans le jetifier. Voici une solution de contournement pour l'instant jusqu'à la prochaine mise à jour. Mettez ceci dans votre projet:

buildscript {
    dependencies {
        classpath 'com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta02'
    }
}

Dague peut aussi être la cause. Changer la version de dague de 2.17 à 2.16 peut résoudre ce problème pour le moment.

Discussion: https://github.com/google/dagger/issues/1245

Mettre à jour

Dagger 2.18 est sorti mais, malheureusement, il ne fonctionnera toujours pas après mes tests (ai-je oublié quelque chose?).

Mise à jour2

Dague 2.19 ne fonctionnera pas non plus et la discussion est verrouillée.

Mais dans le google issuetracke , il y a des solutions / solutions de contournement. J'ai testé et ils ont travaillé. Cochez-la si vous voulez utiliser le dernier poignard.

Mise à jour3

Le problème de la dague a été corrigé dans Android Studio 3.3.


Dans mon cas, il y avait une erreur d'importation dans l'un des fichiers. En ouvrant simplement ce fichier, les importations ont lieu automatiquement, puis le projet a été construit.

Dommage, AS n’a donné aucune indication, pas plus que stacktrace.

Dans le cas où rien de la réponse publiée ne vous aiderait, parcourez simplement tous les fichiers du projet et recherchez un fichier dont la déclaration d'importation est incorrecte.


Dans mon cas, le problème a été résolu en modifiant:

androidExtensions.experimental = true

(c.-à-d. graduer DSL comme une doublure)

à

androidExtensions {
    experimental = true
}

En dehors de could not find the DataBindingComponent class j'ai également eu l' error: incompatible types: NonExistentClass cannot be converted to Annotation associée à l'annotation kotlinx.android.parcel.Parcelize (@Parcelize)

Android Studio 3.3; grade-4.10.1-all; tools.build:gradle 3.3.0


J'ai dû supprimer les importations suivantes de Gradle,

androidx.room:room-compiler:2.1.0-alpha06

Même si son problème est étrange, essayez simplement de supprimer les importations non nécessaires, cela devrait fonctionner.


J'ai essayé classpath 'com.android.tools.build:gradle:3.2.0-beta05' avec et sans dépendance explicite kapt "androidx.databinding:databinding-compiler:3.3.0-alpha06"

Et toujours obtenir la même exception.

J'ai aussi essayé 3.3.0-alpha06 mais rien n'a changé.

MISE À JOUR: Après 2 jours, j'ai résolu le problème. Ce que j’ai fait, c’est de réparer manuellement tous les fichiers posant problème, à cause de la migration vers AndroidX (mauvais paquetages dans les imports et les XML, etc.). De plus, je devais mettre à jour Glide de 4.7 à 4.8. Lorsque j'ai corrigé tous les fichiers rouges, le problème a disparu.


J'ai finalement résolu mon problème parce que j'utilisais Android Annotations et ils ont publié une nouvelle version 4.5.1 il y a 1 heure, où ils prennent en charge Grade Plugin 3.2.0.

Je cherchais ce bogue pendant une semaine et je suis heureux maintenant. J'espère que ça va t'aider aussi!


J'ai résolu l'erreur en ajoutant

android.useAndroidX=true
android.enableJetifier=true

dans le fichier gradle.properties de mon projet


Je répare le problème en mettant à jour Android Studio avec Canary 16 ET ceci dans gradle.wrapper.properties distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip


Les bibliothèques de liaison de données sont en cours de refactorisation dans le cadre du refactoring androidx.

J'ai trouvé le lien de dépendance de processeur d'annotation de liaison de données du référentiel Maven de Google here .

J'ai construit la dépendance de grade réelle à partir de là.

kapt "androidx.databinding:databinding-compiler:3.2.0-alpha16"

Mise à jour Depuis Android studio 3.2.0-beta01, la liaison de données n'a plus besoin que la dépendance du processeur d'annotation soit déclarée dans le fichier gradle, car la liaison de données est capable de résoudre sa dépendance.


Même erreur ici sur Android Studio 3.3.1, pas de Kotlin, Java pur, en utilisant androidx

build.gradle contient

    dataBinding {
        enabled true
    }

gradle.properties contient

android.useAndroidX=true
android.enableJetifier=true
android.databinding.enableV2=true

Je me bats le problème depuis des heures, puis je l'ai résolu comme suit:

Déclarez temporairement une interface vide pour DataBindingComponent dans votre projet (dans src/main/java/androidx.databinding/DataBindingComponent.java )

package androidx.databinding;

public interface DataBindingComponent {
}

Laissez-le compiler et l'erreur disparaîtra. Mais maintenant, l'erreur de racine réelle sera révélée. Celui qui causait tout le problème mais qui avait été avalé. Dans mon cas, il venait d'AutoValue indiquant que je ne l'utilisais pas correctement

error: Parameter type java.lang.Boolean of setter method should be boolean to match getter

corriger cela puis supprimer l'interface fictive rend le compilateur heureux à nouveau.


Même problème lors de l’importation d’une classe dans la liaison de données, cela n’existait pas. Utiliser aussi

allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xmaxerrs" << "1000"
        }
    }
}

pour recevoir tous les messages d'erreur pour trouver le problème. Pour mon projet, il était limité à 50.


Mon problème était que j'ai essayé d'activer la liaison de données pour mon module de Login mais pas le module App . Après avoir ajouté:

dataBinding {
    enabled = true
}

dans le module App et supprimé du module de Login , cela a fonctionné.


Pour ce que ça vaut, j'ai eu un problème similaire et c'était le résultat d'une mauvaise requête Room liée à une liaison de données.


Si vous utilisez déjà la version stable d' Android Studio 3.2 , supprimez simplement la dépendance, elle est déjà incluse.


Si vous utilisez la bibliothèque dataroom, vérifiez l'annotation @Dao dans vos classes DAO. Dans mon cas, j'ai oublié d'ajouter @Dao à mon interface de RoomDatabase'Dao.





android-databinding