代码之家  ›  专栏  ›  技术社区  ›  juliano.net

在Android Studio 3.2 Canary 16 Kotlin项目中找不到符号数据绑定组件

  •  78
  • juliano.net  · 技术社区  · 6 年前

    我刚刚在android studio 3.2canary 16上创建了一个启用kotlin的新项目。然后我也启用了数据绑定,但是我得到一个错误,说它找不到databindingcomponent类。

    这是我的项目毕业生:

    // 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
    }
    

    我的模块渐变文件:

    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"
    }
    

    我的活动的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>
    

    下面是构建输出:

    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
    

    我的项目出了什么问题?

    PS:这个问题也发生在Android Studio 3.1.2上。

    27 回复  |  直到 6 年前
        1
  •  52
  •   Samuel Robert    6 年前

    作为androidx重构的一部分,正在重构数据绑定库。

    我从Google的Maven存储库中找到了数据绑定注释处理器依赖链接。 here

    我已经从那里构建了实际的渐变依赖关系。

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

    更新 从android studio 3.2.0-beta01开始,数据绑定不再需要在渐变文件中声明其注释处理器依赖项,因为数据绑定能够解决其依赖项。

        2
  •  50
  •   Hamady C.    6 年前

    使用以下设置

    android studio 3.2.1 build ai-181.5540.7.32.5056338,创建于10月 2018年8月8日JRE:1.8.0吔152-release-1136-b06 x86吔64 JVM:OpenJDK 64位 JetBrains S.R.O MacOS服务器虚拟机10.13.3

    数据绑定只需在我的app build.gradle中启用它即可。

    apply plugin: 'kotlin-kapt'
    

    然后

        dataBinding {
            enabled = true
        }
    

    还有我的gradle.wrapper属性

    android.databinding.enableV2=true
    

    我也有同样的错误:

    could not find the DataBindingComponent class.
    

    我有100多个。结果表明,这些错误并不重要,并且IDE没有显示真正的底层错误。因此,我通过在build.gradle中添加以下内容增加了Kotlin编译器可以显示的错误数:

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

    突然间,在所有这些虚假错误的正下方,我看到了由失败的合并冲突解决导致的真正错误。

        3
  •  30
  •   Deividas Strioga    6 年前

    只需删除编译器依赖项(kapt“com.android.databinding:compiler:$gradleversion),这对我很有用。显然,它提供了3.2.0中的绑定插件。

        4
  •  21
  •   Narek Hayrapetyan    6 年前

    如果你已经在使用 Android Studio 3.2版 稳定版本,只需移除依赖项,它已经包含在内。

        5
  •  14
  •   Ginie    6 年前

    同样的错误在Android Studio3.3.1上,没有KOTLIN,纯Java,使用安卓

    build.gradle包含

        dataBinding {
            enabled true
        }
    

    gradle.properties包含

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

    我已经和这个问题斗争了几个小时,然后解决了如下问题:

    临时声明项目中databindingcomponent的空接口(在 src/main/java/androidx.databinding/DataBindingComponent.java )

    package androidx.databinding;
    
    public interface DataBindingComponent {
    }
    
    

    让它编译,错误就会消失。但是现在实际的根错误将被显示出来。实际上引起了所有麻烦但不知怎么被吞下的那个。在我的例子中,它来自AutoValue,表明我使用它不正确。

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

    修复这个问题,然后移除虚拟接口,让编译器再次感到高兴。

        6
  •  13
  •   Bink    6 年前

    就其价值而言,我也遇到了类似的问题,这是与数据绑定相关的错误room查询的结果。

        7
  •  13
  •   CommonsWare    6 年前

    在我的例子中,这是一个糟糕的匕首注释。我将自定义范围放在模块上,而不是放在提供方法上。

    ¯\_(ツ)_/¯

        8
  •  8
  •   Saeed.re    6 年前

    我也有同样的问题。

    改变 Kapt annotationProcessor 只为数据绑定修复了我的问题。

        9
  •  7
  •   B.mansouri    6 年前

    当我更新到android studio 3.2时,我面临这个问题,我将Gradle插件从3.2.0改为3.1.4,它工作得很好。 -->我认为这是一个渐变问题,很快肯定会更新

        10
  •  5
  •   Dewey Reed    6 年前

    匕首也可能是原因。 将Dagger版本从2.17改回2.16可以暂时解决此问题。

    讨论: https://github.com/google/dagger/issues/1245

    更新

    匕首2.18已经失效了,但不幸的是,在我测试之后它仍然无法工作(我错过了什么吗?).

    更新2

    匕首2.19也不起作用,讨论被锁定。

    但是 in the google issuetracke 有解决方案/解决办法。我做了测试,他们成功了。如果你想使用最新的匕首,请检查它。

    更新3

    在Android Studio 3.3中修复了匕首问题。

        11
  •  3
  •   Sandra    6 年前

    我终于解决了我的问题,因为我正在使用 Android注释 他们发布了一个新的 版本4.5.1 1小时前,他们支持等级插件3.2.0。

    我找了一个星期的虫子,现在很高兴。希望这对你也有帮助!

        12
  •  2
  •   Stanislaw Baranski    6 年前

    我试过了 classpath 'com.android.tools.build:gradle:3.2.0-beta05' 有无显式依赖 kapt "androidx.databinding:databinding-compiler:3.3.0-alpha06"

    但仍然有同样的例外。

    我也试过3.3.0-alpha06,但没有改变。

    更新: 两天后,我解决了这个问题。 我所做的是,手动修复所有有问题的文件,因为 迁移到Androidx (导入和XML等中的包错误)。另外,我需要将glide从4.7更新到4.8。当我修复所有红色文件时,问题就消失了。

        13
  •  2
  •   Kannan_SJD    6 年前

    这是我最愚蠢的错误! 我实际上已经为数据绑定创建了一个私有变量,这导致了这个问题。

    就用一个 lateinit var binding 而且成功了。

    这可以帮助别人!

        14
  •  2
  •   Naimish Vinchhi    6 年前

    只需删除kapt“com.android.databinding…”依赖项。如果您使用的是Android Studio 3.2或更高版本。

        15
  •  1
  •   Eduardo Dornel    6 年前

    我修正它更新 Android Studio to Canary 16 这是gradle.wrapper.properties中的 distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip

        16
  •  1
  •   Edijae Crusar    6 年前

    我通过添加

    android.useAndroidX=true
    android.enableJetifier=true
    

    在我项目的gradle.properties文件中

        17
  •  1
  •   Aleksander Aleksic    6 年前

    我的问题是我试图为我的 Login 模块而不是 App 模块。添加后:

    dataBinding {
        enabled = true
    }
    

    应用程序 模块并将其从 登录 模块,成功了。

        18
  •  1
  •   kosiara - Bartosz Kosarzycki    6 年前

    在我的情况下,这个问题 已解决 通过更改:

    androidExtensions.experimental = true
    

    (即,Gradle DSL作为一条线路)

    androidExtensions {
        experimental = true
    }
    

    除了 could not find the DataBindingComponent class 我也有过 error: incompatible types: NonExistentClass cannot be converted to Annotation 与关联 kotlinx.android.parcel.Parcelize 注释(@parcelize)

    Android Studio 3.3;Gradle-4.10.1-all;工具。构建:Gradle 3.3.0

        19
  •  0
  •   Daniel Wilson    6 年前

    我还想尝试其他方法:我想把GitHubbrowserSample放到AndroidStudio3.2(RC3)中。尽管在main build.gradle中没有指定数据绑定版本,但在数据绑定方面我还是遇到了很多奇怪的错误。解决办法是 删除这两行 从gradle.properties:

    org.gradle.jvmargs=-Xmx4536m
    android.databinding.enableV2=true
    
        20
  •  0
  •   Taskmaster    6 年前

    我的情况:

    Android Studio 3.2.1版

    com.android.tools.build:gradle:3.2.1版本

    https://services.gradle.org/distributions/gradle-4.10.2-all.zip

    我发现,通过从我的布局中删除数据绑定,重新编译应用程序,然后将数据绑定添加回它,解决了这个问题。

    我改变了 DataBindingUtil.setContentView(...) 为了公正 setContentView(...) 将我的活动布局减少到最低限度:

    <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>
    

    然后逐段添加数据绑定。

        21
  •  0
  •   azizbekian    6 年前

    在我的案例中 导入错误 在其中一个档案里。只需打开该文件就可以自动进行导入,然后项目就构建了。

    如果发布的答案没有任何帮助-只需浏览项目中的所有文件,并查找包含不正确的导入语句的文件。

        22
  •  0
  •   Ernest Zamelczyk    6 年前

    这是喷射炉里的一个虫子。在下一次更新之前,这里有一个解决方法。把这个放在你的毕业设计里:

    buildscript {
        dependencies {
            classpath 'com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta02'
        }
    }
    
        23
  •  0
  •   bdpqchen    6 年前

    如果您正在使用数据室库,请检查DAO类中的@DAO注释。 在我的例子中,我忘记了在我的RoomDatabase'DAO接口中添加@DAO。

        24
  •  0
  •   owjsub    6 年前

    为生成的接口生成错误,如 DataBindingComponent 通常是误导。尝试查找任何其他生成错误,并首先修复这些错误,然后重新编译。

        25
  •  0
  •   Jan Moravec    6 年前

    在数据绑定中导入类时也遇到了同样的问题,这是不存在的。同时使用

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

    用于接收所有错误消息以查找问题。我的项目限制在50英镑以内。

        26
  •  0
  •   Zumry Mohamed    6 年前

    我必须从格雷德尔那里删除以下导入内容,

    androidx.room:room-compiler:2.1.0-alpha06
    

    尽管这是个奇怪的问题,但只要试着去掉不必要的进口,就应该行得通。

        27
  •  0
  •   abitcode    6 年前

    如果与Room数据库一起使用,请检查所有DAO类,如果有任何导入问题或未指定所需的类型转换器,请使用 @TypeConverters ,此错误具有误导性,如果将项目级Gradle生成工具版本更新为最新版本,则应予以修复。 我用过 classpath 'com.android.tools.build:gradle:3.4.0' 并且得到了正确的错误。

        28
  •  0
  •   zeromod    5 年前

    就我而言, 如果使用动态功能模块:

    build.gradle(应用程序)

    dataBinding {
        enabled true
    }
    

    这需要在根和子gradle文件上启用(别忘了添加kapt插件)。

        29
  •  0
  •   Himanshu Mori    5 年前

    对于我的情况,在房间数据库项类中有一些错误… 错误是关于私有修饰符,对于room db item类的成员变量,该修饰符应该是公共的。

    使用和浏览命令行 /GRADLEW汇编调试 去看stacktrace。

    #房间数据库表类DAO