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 note 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
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 du processeur d'annotation de liaison de données à partir du référentiel Maven de Google ici .
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 sa dépendance du processeur d'annotation soit déclarée dans le fichier gradle, car elle est capable de résoudre sa dépendance.
Avec la configuration suivante
Android Studio 3.2.1 Version n ° AI-181.5540.7.32.5056338, créée en octobre 8, 2018 JRE: 1.8.0_152-release-1136-b06 x86_64 JVM: OpenJDK 64 bits Serveur VM de JetBrains sur 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 une résolution de conflit de fusion ratée ????
Supprimez simplement la dépendance du compilateur (kapt "com.Android.databinding: compiler: $ gradleVersion), cela a fonctionné pour moi. Apparemment, elle est fournie avec le plugin de liaison à partir de 3.2.0.
Si vous utilisez déjà Android Studio 3.2 version stable, supprimez simplement la dépendance, elle est déjà incluse.
je fais face à ce problème lors de la mise à jour vers Android studio 3.2, je change de plugin Gradle de 3.2.0 à 3.1.4 et cela fonctionne très bien -> Je pense que c'est un problème de niveau, il sera sûrement mis à jour très bientôt
J'ai eu le même problème.
Remplacer Kapt
par annotationProcessor
uniquement pour DataBinding a résolu le problème.
Pour ma part, j’avais un problème similaire et résultait d’une mauvaise requête Room liée à une liaison de données.
Dague peut également être la cause. Changer la version de poignard 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 les tests (ai-je oublié quelque chose?).
Update2
Dague 2.19 également ne fonctionnera pas et la discussion est verrouillée.
Mais dans le google issuetracke , il existe des solutions/solutions de contournement. J'ai testé et ils ont travaillé. Cochez-la si vous voulez utiliser la dernière dague.
Update3
Le problème de la dague a été corrigé dans Android Studio 3.3.
j'ai finalement résolu mon problème parce que j'utilisais Annotations Android et ils ont publié un nouveau Version 4.5.1 1 heure auparavant, 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!
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éclarer temporairement une interface vide pour DataBindingComponent dans votre projet (en 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.
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 avoir la même exception.
J'ai aussi essayé 3.3.0-alpha06 mais rien n'a changé.
UPDATE: Après 2 jours, j’ai résolu le problème . Ce que j’ai fait est de corriger manuellement tous les fichiers posant problème, en raison de Migration vers AndroidX (mauvais paquetages dans les importations et 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.
Il suffit de supprimer la dépendance "com.Android.databinding ..." de kapt. Si vous utilisez Android Studio 3.2 ou une version ultérieure.
Je résous le problème de la mise à jour Android Studio vers Canary 16 AND dans gradle.wrapper.properties distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.Zip
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 cela ne spécifiait pas de versions de liaison de données dans le build.gradle principal. La solution consistait à supprimer ces deux lignes du fichier gradle.properties:
org.gradle.jvmargs=-Xmx4536m
Android.databinding.enableV2=true
J'ai résolu l'erreur en ajoutant
Android.useAndroidX=true
Android.enableJetifier=true
dans le fichier gradle.properties de mon projet
Dans mon cas, le problème a été résolu en modifiant:
androidExtensions.experimental = true
(c.-à-d. classer DSL en une ligne)
à
androidExtensions {
experimental = true
}
en plus de could not find the DataBindingComponent class
, j'ai aussi eu error: incompatible types: NonExistentClass cannot be converted to Annotation
associé à l'annotation kotlinx.Android.parcel.Parcelize
(@Parcelize)
Android Studio 3.3; grade-4.10.1-all; tools.build:gradle 3.3.0
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'
}
}
Ceci est mon erreur la plus stupide!.
Il suffit d'utiliser un lateinit var binding
et cela a fonctionné.
Cela pourrait aider quelqu'un!
Ma situation:
Android Studio v3.2.1
com.Android.tools.build:gradle:3.2.1
https://services.gradle.org/distributions/gradle-4.10.2-all.Zip
J'ai constaté qu'en supprimant la liaison de données de ma mise en page, en recompilant l'application puis en y ajoutant la liaison de données, le problème a été résolu.
J'ai changé la DataBindingUtil.setContentView(...)
en juste setContentView(...)
et ai réduit la présentation de mes activités au strict minimum:
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="hello"/>
</FrameLayout>
Ajoutez ensuite la liaison de données pièce par pièce.
Dans mon cas, si vous utilisez Dynamic Feature Module:
build.gradle (app)
dataBinding {
enabled true
}
Ceci doit être activé à la fois sur les fichiers racine et enfants (n'oubliez pas d'ajouter le plugin kapt).
Dans mon cas, une erreur est survenue dans la base de données Room de la classe d'élément ... L'erreur concernait un modificateur privé qui devrait être public pour les variables membres de la classe d'élément de base de données Room.
Utilisez et explorez la ligne de commande ./ gradlew assembleDebug pour voir stacktrace.
# Room #Database #Table class #DAO
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.
Les erreurs de construction des interfaces générées telles que DataBindingComponent
sont généralement trompeuses. Essayez de rechercher d’autres erreurs de compilation et corrigez-les d’abord, puis recompilez.
Si vous utilisez avec Room Database, vérifiez toutes vos classes Dao si vous rencontrez un problème d'importation ou si aucun TypeConverter n'est requis à l'aide de @TypeConverters
. Cette erreur est trompeuse et doit être corrigée si vous mettez à jour la version la plus récente des outils de génération de niveaux au niveau du projet. J'ai utilisé classpath 'com.Android.tools.build:gradle:3.4.0'
et j'ai eu une erreur correctement.
Mon problème était que j'ai essayé d'activer la liaison de données pour mon module Login
mais pas pour le module App
. Après avoir ajouté:
dataBinding {
enabled = true
}
dans le module App
et supprimé du module Login
, cela a fonctionné.
Si vous utilisez une bibliothèque de salles de données, vérifiez l'annotation @Dao dans vos classes DAO. Dans mon cas, j'ai oublié d'ajouter @Dao à mon interface de Room Database Dao.
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.
Dans mon cas, il y avait une erreur import 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.