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 j'obtiens une erreur indiquant qu'il n'a pas pu trouver la classe DataBindingComponent.
Voici mon projet gradle:
// 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 gradle 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"
}
Le xml de mon activité:
<?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
android
kotlin
android-databinding
Juliano Nunes Silva Oliveira
la source
la source
android.databinding.enableV2=false android.enableExperimentalFeatureDatabinding = false
. l'ajout de ceci pourgrade.properties
résoudre mon problèmeRéponses:
Les bibliothèques de liaison de données sont en cours de refactorisation dans le cadre de la refactorisation d'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 réelle de gradle à partir de là.
Mise à jour Depuis le studio Android 3.2.0-beta01, la liaison de données n'a plus besoin que sa dépendance de 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.
la source
Avec la configuration suivante
Et DataBinding permet simplement de l'avoir dans mon application build.gradle
puis
et aussi ceci dans mes propriétés gradle.wrapper
J'ai eu les mêmes erreurs:
J'en avais plus de 100. 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 build.gradle:
Un tout à coup, juste en dessous de toutes ces fausses erreurs, j'ai vu la vraie causée par une résolution de conflit de fusion ratée 😔
la source
Supprimez simplement la dépendance du compilateur (kapt "com.android.databinding: compiler: $ gradleVersion), qui a fonctionné pour moi. Apparemment, il est fourni avec le plugin de liaison de 3.2.0.
la source
Si vous utilisez déjà la version stable d' Android Studio 3.2 , supprimez simplement la dépendance, elle est déjà incluse.
la source
Caused by: 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) ...
Même erreur ici sur Android Studio 3.3.1, pas de Kotlin, pur Java, en utilisant androidx
build.gradle contient
gradle.properties contient
Je lutte contre 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 (in
src/main/java/androidx.databinding/DataBindingComponent.java
)Laissez-le compiler et l'erreur disparaîtra. Mais maintenant, l'erreur racine réelle sera révélée. Celui qui causait tous les problèmes mais qui a été avalé d'une manière ou d'une autre. Dans mon cas, il provenait d'AutoValue indiquant que je ne l'utilisais pas correctement
réparer cela et ensuite supprimer l'interface factice rend le compilateur heureux à nouveau.
la source
Pour ce que ça vaut, j'ai eu un problème similaire et c'était le résultat d'une mauvaise requête de salle qui était liée à une liaison de données.
la source
ArrayList
comme retour à une requête où il doit s'agir d'un fichierList
.Dans mon cas, c'était une mauvaise annotation de poignard. J'ai mis une portée personnalisée sur un module au lieu de le mettre sur une méthode fournit.
¯\_(ツ)_/¯
la source
J'ai eu le même problème.
Le passage
Kapt
àannotationProcessor
uniquement pour DataBinding a résolu le problème pour moi.la source
Je suis confronté à ce problème lors de la mise à jour vers android studio 3.2, je change le plugin gradle de 3.2.0 à 3.1.4 et cela fonctionne bien -> je pense que c'est un problème gradle, il sera mis à jour à coup sûr très bientôt
la source
Dagger peut également en être la cause.
Changer la version de la dague de 2.17 à 2.16 peut résoudre ce problème pour le moment.Discussion: https://github.com/google/dagger/issues/1245
Mettre à jourDagger 2.18 est sorti mais malheureusement il ne fonctionnera toujours pas après avoir testé (ai-je manqué quelque chose?).Mise à jour2Dagger 2.19 ne fonctionnera pas non plus et la discussion est verrouillée.Mais dans Google issuetracke , il existe des solutions / contournements. J'ai testé et ils ont fonctionné. Cochez-le si vous souhaitez utiliser la dernière Dagger.Mise à jour3
Le problème de la dague a été corrigé dans Android Studio 3.3.
la source
J'ai finalement résolu mon problème car j'utilisais les annotations Android 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 bug depuis une semaine et je suis heureux maintenant. J'espère que ça va t'aider aussi!
la source
Mon problème était que j'ai essayé d'activer la liaison de données pour mon
Login
module mais pas leApp
module. Après avoir ajouté:au
App
module et l'a retiré duLogin
module, cela a fonctionné.la source
J'ai essayé
classpath 'com.android.tools.build:gradle:3.2.0-beta05'
avec et sans dépendance explicitekapt "androidx.databinding:databinding-compiler:3.3.0-alpha06"
Et toujours la même exception.
J'ai également 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 qui avaient des problèmes, à cause de la migration vers AndroidX (mauvais packages dans les importations et XML, etc.). De plus, j'avais besoin de mettre à jour Glide de 4.7 à 4.8. Lorsque j'ai corrigé tous les fichiers rouges, le problème a disparu.
la source
C'est ma plus stupide erreur! J'ai en fait créé une variable privée pour la liaison de données et cela causait ce problème.
Utilisez simplement un
lateinit var binding
et cela a fonctionné.Cela pourrait aider quelqu'un!
la source
Supprimez simplement la dépendance kapt "com.android.databinding ...". Si vous utilisez Android Studio 3.2 ou une version supérieure.
la source
Dans mon cas, si vous utilisez le module de fonctionnalités dynamiques:
Cela doit être activé à la fois sur les fichiers de graduation racine et enfants (n'oubliez pas d'ajouter le plugin kapt).
la source
Je le répare en mettant à jour Android Studio vers Canary 16 ET ceci dans gradle.wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip
la source
J'ai résolu l'erreur en ajoutant
dans le fichier gradle.properties de mon projet
la source
android.useAndroidX:
Lorsqu'il est défini surtrue
, cet indicateur indique que vous souhaitez commencer à utiliser AndroidX à partir de maintenant. Si l'indicateur est absent, Android Studio se comporte comme si l'indicateur était défini surfalse
.android.enableJetifier:
Lorsqu'il est défini surtrue
, cet indicateur indique que vous souhaitez bénéficier d'une prise en charge d'outils (à partir du plug-in Android Gradle) pour convertir automatiquement les bibliothèques tierces existantes comme si elles étaient écrites pour AndroidX. Si l'indicateur est absent, Android Studio se comporte comme si l'indicateur était défini surfalse
.Dans mon cas, le problème a été résolu en modifiant:
(c.-à-d. gradle DSL comme une seule ligne)
à
à part
could not find the DataBindingComponent class
j'avais aussierror: incompatible types: NonExistentClass cannot be converted to Annotation
associé à l'kotlinx.android.parcel.Parcelize
annotation (@Parcelize)Android Studio 3.3; gradle-4.10.1-tout; tools.build:gradle 3.3.0
la source
J'ai eu le même problème lorsque j'importais une classe dans la liaison de données, cela n'existait pas. Utiliser aussi
pour recevoir tous les messages d'erreur pour trouver le problème. Pour mon projet, il était limité à 50.
la source
Pour moi, il y avait une erreur dans mon fichier de mise en page. J'ai fait référence à une fonction qui était inexistante.
android:text="@{() -> sleepTrackerViewModel.nightStrings}"
Voici la solution:
android:text="@{sleepTrackerViewModel.nightStrings}"
la source
Quelque chose d'autre à essayer :) J'essayais d'obtenir le GithubBrowserSample dans Android Studio 3.2 (RC3). J'ai continué à recevoir beaucoup d'erreurs étranges sur la liaison de données même si cela ne spécifie pas les versions de liaison de données dans le build.gradle principal. La solution était de supprimer ces deux lignes du gradle.properties:
la source
Ma situation:
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, ce problème était résolu.
J'ai changé la disposition de mon activité
DataBindingUtil.setContentView(...)
justesetContentView(...)
et réduit au strict minimum:Puis rajoutez la liaison de données pièce par pièce.
la source
Dans mon cas, il y a eu une erreur d'importation dans l'un des fichiers. Le simple fait d'ouvrir ce fichier faisait que les importations se produisaient automatiquement et le projet était ensuite construit.
C'est dommage qu'AS n'ait donné aucune indication à cela, ni l'erreur stacktrace.
Dans le cas où rien de la réponse publiée ne vous aide, surfez simplement sur tous les fichiers du projet et recherchez un fichier contenant une déclaration d'importation incorrecte.
la source
C'est un bug dans le jetifier. Voici une solution de contournement pour l'instant jusqu'à la prochaine mise à jour. Mettez ceci dans votre gradle de projet:
la source
Si vous utilisez la bibliothèque de dataroom, vérifiez l'annotation @Dao dans vos classes DAO. Dans mon cas, j'ai oublié d'ajouter @Dao à mon interface de RoomDatabase'Dao.
la source
Les erreurs de construction pour les interfaces générées comme
DataBindingComponent
sont généralement trompeuses. Essayez de rechercher toutes les autres erreurs de construction et corrigez-les d'abord, puis recompilez.la source
J'ai dû supprimer l'importation suivante de Gradle,
Même si son problème étrange, essayez simplement de supprimer les importations inutiles, cela devrait fonctionner.
la source
Si vous utilisez avec la base de données de salle, vérifiez toutes vos classes Dao si vous avez un problème d'importation ou si TypeConverter n'est pas spécifié requis à l'aide
@TypeConverters
, cette erreur est trompeuse et doit être corrigée si vous mettez à jour la version des outils de construction gradle au niveau du projet vers la dernière. J'ai utiliséclasspath 'com.android.tools.build:gradle:3.4.0'
et obtenu une erreur correctement.la source
Dans mon cas, il y avait une erreur dans la classe d'éléments de la base de données de la salle ... L'erreur concernait le modificateur privé qui devrait être public pour les variables membres de la classe d'éléments de la base de données de la salle.
Utilisez et explorez la ligne de commande ./gradlew assembleDebug pour voir stacktrace.
#Room #Database #Table class #DAO
la source