在 Android Studio 3.2 Canary 16 Kotlin 项目上找不到符号 DataBindingComponent
Cannot find symbol DataBindingComponent on Android Studio 3.2 Canary 16 Kotlin project
我刚刚在启用了 Kotlin 的 Android Studio 3.2 Canary 16 上创建了一个新项目。然后我还启用了数据绑定,但我收到一条错误消息,提示找不到 DataBindingComponent class.
这是我的项目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
}
我的模块gradle文件:
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"
}
我的 activity 的 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[=14=]0(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.access00(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.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.invoke(KotlinToJVMBytecodeCompiler.kt:374)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze.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.invoke(CompileServiceImpl.kt:405)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile.invoke(CompileServiceImpl.kt:98)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda.invoke(CompileServiceImpl.kt:920)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda.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.run(Transport.java:200)
at sun.rmi.transport.Transport.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[=14=](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
我修复它更新 Android Studio to Canary 16 并且在 gradle.wrapper.properties distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip
我遇到了同样的问题。
仅针对 DataBinding 将 Kapt
更改为 annotationProcessor
解决了我的问题。
数据绑定库正在重构,作为 androidx 重构的一部分。
我从 google 的 Maven 存储库 here 中找到了数据绑定注释处理器依赖项 link。
我从那里构建了实际的 gradle 依赖关系。
kapt "androidx.databinding:databinding-compiler:3.2.0-alpha16"
更新
从 Android studio 3.2.0-beta01 开始,数据绑定不再需要在 gradle 文件中声明其注释处理器依赖性,因为数据绑定能够解析其依赖性。
只需删除对我有用的编译器依赖项 (kapt "com.android.databinding:compiler:$gradleVersion)。显然,它提供了 3.2.0 的绑定插件。
我试过了classpath 'com.android.tools.build:gradle:3.2.0-beta05'
有和没有显式依赖 kapt "androidx.databinding:databinding-compiler:3.3.0-alpha06"
仍然遇到同样的异常。
我也试过 3.3.0-alpha06 但没有任何改变。
更新:
2天后,我解决了这个问题。
我所做的是,手动修复所有有问题的文件,因为 Migration to AndroidX(导入和 XML 等中的错误包)。此外,我需要将 Glide 从 4.7 更新到 4.8。当我修复所有红色文件后,问题就消失了。
我通过添加解决了错误
android.useAndroidX=true
android.enableJetifier=true
在我项目的 gradle.properties 文件中
在我的例子中,这是一个糟糕的匕首注释。我将自定义范围放在模块上,而不是放在提供方法上。
¯\_(ツ)_/¯
尝试其他方法 :) 我试图将 GithubBrowserSample 导入 Android Studio 3.2 (RC3)。尽管它没有在主 build.gradle 中指定数据绑定版本,但我一直在数据绑定方面遇到很多奇怪的错误。解决方案是 从 gradle.properties:
中删除这两行
org.gradle.jvmargs=-Xmx4536m
android.databinding.enableV2=true
如果您已经在使用 Android Studio 3.2 稳定版,只需删除依赖项,它已经包含。
我在更新到 android studio 3.2 时遇到这个问题,我将 gradle 插件从 3.2.0 更改为 3.1.4,它工作正常
--> 我认为这是一个 gradle 问题,肯定会很快更新
匕首也可能是原因。 将 dagger 版本从 2.17 改回 2.16 可以暂时解决这个问题。
讨论:https://github.com/google/dagger/issues/1245
更新
Dagger 2.18 已经出来了,但不幸的是,我测试后它仍然无法工作(我错过了什么吗?)。
更新2
Dagger 2.19 也不行,讨论被锁了。
但是in the google issuetracke,还有solutions/workarounds。我测试了,他们工作了。如果你想使用最新的Dagger,勾选它。
更新3
Dagger 问题已在 Android Studio 3.3 中修复。
值得一提的是,我遇到了类似的问题,这是与数据绑定相关的错误 Room 查询的结果。
我终于解决了我的问题,因为我使用的是 Android Annotations,他们发布了新的 Version 4.5.1 1一个小时前,他们支持 Grade Plugin 3.2.0。
我一直在寻找这个错误一个星期,现在我很高兴。希望这对你也有帮助!
我的情况:
Android Studio v3.2.1
com.android.tools.build:gradle:3.2.1
https://services.gradle.org/distributions/gradle-4.10.2-all.zip
我发现通过从我的布局中删除数据绑定、重新编译应用程序然后重新添加数据绑定可以解决此问题。
我将 DataBindingUtil.setContentView(...)
更改为 setContentView(...)
并将 activity 布局减少到最低限度:
<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>
然后逐个添加数据绑定。
就我而言,其中一个文件中存在 导入错误。只需打开该文件即可自动进行导入,然后构建项目。
很遗憾,AS对此给出了零指示,错误堆栈跟踪也没有。
如果发布的答案没有任何帮助 - 只需浏览项目中的所有文件并查找导入语句不正确的文件。
使用以下设置
Android Studio 3.2.1 Build #AI-181.5540.7.32.5056338, built on October
8, 2018 JRE: 1.8.0_152-release-1136-b06 x86_64 JVM: OpenJDK 64-Bit
Server VM by JetBrains s.r.o macOS 10.13.3
DataBinding 只需在我的应用程序中添加即可启用 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)
}
}
突然间,就在所有这些虚假错误的下方,我看到了由合并冲突解决失败引起的真实错误
这是 jetifier 中的错误。在下一次更新之前,这是目前的解决方法。将其放入您的项目 gradle:
buildscript {
dependencies {
classpath 'com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta02'
}
}
这是我最愚蠢的错误!
我实际上已经为数据绑定创建了一个私有变量,这导致了这个问题。
只需使用 lateinit var binding
即可。
这可能对某人有所帮助!
我的问题是我尝试为我的 Login
模块启用数据绑定,但没有为 App
模块启用数据绑定。添加后:
dataBinding {
enabled = true
}
到 App
模块并将其从 Login
模块中删除,它起作用了。
在我的案例中,问题已通过更改得到解决:
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-全部; tools.build:gradle 3.3.0
在 Android Studio 3.3.1 上出现同样的错误,没有 Kotlin,纯 Java,使用 androidx
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
修复它然后删除虚拟接口让编译器再次开心。
只需删除 kapt "com.android.databinding..." 依赖项。如果您使用的是 Android Studio 3.2 或更高版本。
如果您正在使用数据室库,请检查您的 DAO 中的 @Dao 注释 类。
就我而言,我忘记将@Dao 添加到我的 Room Database Dao 接口中。
生成接口的构建错误,如 DataBindingComponent
通常具有误导性。尝试查找任何其他构建错误并先修复这些错误,然后重新编译。
我在数据绑定中导入 class 时遇到了同样的问题,但该问题不存在。也使用
allprojects {
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xmaxerrs" << "1000"
}
}
}
收到所有错误消息以查找问题。对于我的项目,它被限制为 50。
我不得不从 Gradle、
中删除以下导入
androidx.room:room-compiler:2.1.0-alpha06
尽管这是一个奇怪的问题,只要尝试删除不必要的导入,它应该可以工作。
如果与 Room 数据库一起使用,请检查您的所有 Dao 类 如果您有任何导入问题或未使用 @TypeConverters
指定必需的 TypeConverter,此错误具有误导性,如果您更新则应修复项目级别 gradle 构建工具版本为最新。
我使用 classpath 'com.android.tools.build:gradle:3.4.0'
并得到正确的错误。
就我而言,
如果您使用动态功能模块:
build.gradle(app)
dataBinding {
enabled true
}
这需要在根和子 gradle 文件上启用(不要忘记添加 kapt 插件)。
就我而言,房间数据库项目 class 中存在一些错误...
错误是关于 private 修饰符的,对于 Room db 项目 class 的成员变量,它应该是 public。
使用并探索命令行 ./gradlew assembleDebug 查看堆栈跟踪。
#Room #Database #Table class #DAO
在我的例子中,我只在动态功能模块中启用了数据绑定。我在根模块中启用数据绑定后,错误消失了。
Note: You must configure data binding for app modules that depend on libraries that use data binding, even if the app module doesn't directly use data binding.
此外,您可能需要使缓存失效并重新启动。
对我来说,我的布局文件有错误。我引用了一个不存在的函数。
android:text="@{() -> sleepTrackerViewModel.nightStrings}"
解决方法如下:
android:text="@{sleepTrackerViewModel.nightStrings}"
这是我的解决方案
实施“android.arch.lifecycle:扩展:$lifeCycleExtensionVersion”
改变
实现“androidx.lifecycle:lifecycle-runtime-ktx:$lifeCycleExtensionVersion
请在gradle.properties
中添加这一行
android.enableJetifier=true
我刚刚在启用了 Kotlin 的 Android Studio 3.2 Canary 16 上创建了一个新项目。然后我还启用了数据绑定,但我收到一条错误消息,提示找不到 DataBindingComponent class.
这是我的项目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
}
我的模块gradle文件:
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"
}
我的 activity 的 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[=14=]0(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.access00(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.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.invoke(KotlinToJVMBytecodeCompiler.kt:374)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze.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.invoke(CompileServiceImpl.kt:405)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile.invoke(CompileServiceImpl.kt:98)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda.invoke(CompileServiceImpl.kt:920)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda.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.run(Transport.java:200)
at sun.rmi.transport.Transport.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[=14=](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
我修复它更新 Android Studio to Canary 16 并且在 gradle.wrapper.properties distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip
我遇到了同样的问题。
仅针对 DataBinding 将 Kapt
更改为 annotationProcessor
解决了我的问题。
数据绑定库正在重构,作为 androidx 重构的一部分。
我从 google 的 Maven 存储库 here 中找到了数据绑定注释处理器依赖项 link。
我从那里构建了实际的 gradle 依赖关系。
kapt "androidx.databinding:databinding-compiler:3.2.0-alpha16"
更新 从 Android studio 3.2.0-beta01 开始,数据绑定不再需要在 gradle 文件中声明其注释处理器依赖性,因为数据绑定能够解析其依赖性。
只需删除对我有用的编译器依赖项 (kapt "com.android.databinding:compiler:$gradleVersion)。显然,它提供了 3.2.0 的绑定插件。
我试过了classpath 'com.android.tools.build:gradle:3.2.0-beta05'
有和没有显式依赖 kapt "androidx.databinding:databinding-compiler:3.3.0-alpha06"
仍然遇到同样的异常。
我也试过 3.3.0-alpha06 但没有任何改变。
更新: 2天后,我解决了这个问题。 我所做的是,手动修复所有有问题的文件,因为 Migration to AndroidX(导入和 XML 等中的错误包)。此外,我需要将 Glide 从 4.7 更新到 4.8。当我修复所有红色文件后,问题就消失了。
我通过添加解决了错误
android.useAndroidX=true
android.enableJetifier=true
在我项目的 gradle.properties 文件中
在我的例子中,这是一个糟糕的匕首注释。我将自定义范围放在模块上,而不是放在提供方法上。
¯\_(ツ)_/¯
尝试其他方法 :) 我试图将 GithubBrowserSample 导入 Android Studio 3.2 (RC3)。尽管它没有在主 build.gradle 中指定数据绑定版本,但我一直在数据绑定方面遇到很多奇怪的错误。解决方案是 从 gradle.properties:
中删除这两行org.gradle.jvmargs=-Xmx4536m
android.databinding.enableV2=true
如果您已经在使用 Android Studio 3.2 稳定版,只需删除依赖项,它已经包含。
我在更新到 android studio 3.2 时遇到这个问题,我将 gradle 插件从 3.2.0 更改为 3.1.4,它工作正常 --> 我认为这是一个 gradle 问题,肯定会很快更新
匕首也可能是原因。 将 dagger 版本从 2.17 改回 2.16 可以暂时解决这个问题。
讨论:https://github.com/google/dagger/issues/1245
更新
Dagger 2.18 已经出来了,但不幸的是,我测试后它仍然无法工作(我错过了什么吗?)。
更新2
Dagger 2.19 也不行,讨论被锁了。
但是in the google issuetracke,还有solutions/workarounds。我测试了,他们工作了。如果你想使用最新的Dagger,勾选它。
更新3
Dagger 问题已在 Android Studio 3.3 中修复。
值得一提的是,我遇到了类似的问题,这是与数据绑定相关的错误 Room 查询的结果。
我终于解决了我的问题,因为我使用的是 Android Annotations,他们发布了新的 Version 4.5.1 1一个小时前,他们支持 Grade Plugin 3.2.0。
我一直在寻找这个错误一个星期,现在我很高兴。希望这对你也有帮助!
我的情况:
Android Studio v3.2.1
com.android.tools.build:gradle:3.2.1
https://services.gradle.org/distributions/gradle-4.10.2-all.zip
我发现通过从我的布局中删除数据绑定、重新编译应用程序然后重新添加数据绑定可以解决此问题。
我将 DataBindingUtil.setContentView(...)
更改为 setContentView(...)
并将 activity 布局减少到最低限度:
<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>
然后逐个添加数据绑定。
就我而言,其中一个文件中存在 导入错误。只需打开该文件即可自动进行导入,然后构建项目。
很遗憾,AS对此给出了零指示,错误堆栈跟踪也没有。
如果发布的答案没有任何帮助 - 只需浏览项目中的所有文件并查找导入语句不正确的文件。
使用以下设置
Android Studio 3.2.1 Build #AI-181.5540.7.32.5056338, built on October 8, 2018 JRE: 1.8.0_152-release-1136-b06 x86_64 JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o macOS 10.13.3
DataBinding 只需在我的应用程序中添加即可启用 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)
}
}
突然间,就在所有这些虚假错误的下方,我看到了由合并冲突解决失败引起的真实错误
这是 jetifier 中的错误。在下一次更新之前,这是目前的解决方法。将其放入您的项目 gradle:
buildscript {
dependencies {
classpath 'com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta02'
}
}
这是我最愚蠢的错误! 我实际上已经为数据绑定创建了一个私有变量,这导致了这个问题。
只需使用 lateinit var binding
即可。
这可能对某人有所帮助!
我的问题是我尝试为我的 Login
模块启用数据绑定,但没有为 App
模块启用数据绑定。添加后:
dataBinding {
enabled = true
}
到 App
模块并将其从 Login
模块中删除,它起作用了。
在我的案例中,问题已通过更改得到解决:
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-全部; tools.build:gradle 3.3.0
在 Android Studio 3.3.1 上出现同样的错误,没有 Kotlin,纯 Java,使用 androidx
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
修复它然后删除虚拟接口让编译器再次开心。
只需删除 kapt "com.android.databinding..." 依赖项。如果您使用的是 Android Studio 3.2 或更高版本。
如果您正在使用数据室库,请检查您的 DAO 中的 @Dao 注释 类。 就我而言,我忘记将@Dao 添加到我的 Room Database Dao 接口中。
生成接口的构建错误,如 DataBindingComponent
通常具有误导性。尝试查找任何其他构建错误并先修复这些错误,然后重新编译。
我在数据绑定中导入 class 时遇到了同样的问题,但该问题不存在。也使用
allprojects {
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xmaxerrs" << "1000"
}
}
}
收到所有错误消息以查找问题。对于我的项目,它被限制为 50。
我不得不从 Gradle、
中删除以下导入androidx.room:room-compiler:2.1.0-alpha06
尽管这是一个奇怪的问题,只要尝试删除不必要的导入,它应该可以工作。
如果与 Room 数据库一起使用,请检查您的所有 Dao 类 如果您有任何导入问题或未使用 @TypeConverters
指定必需的 TypeConverter,此错误具有误导性,如果您更新则应修复项目级别 gradle 构建工具版本为最新。
我使用 classpath 'com.android.tools.build:gradle:3.4.0'
并得到正确的错误。
就我而言, 如果您使用动态功能模块:
build.gradle(app)
dataBinding {
enabled true
}
这需要在根和子 gradle 文件上启用(不要忘记添加 kapt 插件)。
就我而言,房间数据库项目 class 中存在一些错误... 错误是关于 private 修饰符的,对于 Room db 项目 class 的成员变量,它应该是 public。
使用并探索命令行 ./gradlew assembleDebug 查看堆栈跟踪。
#Room #Database #Table class #DAO
在我的例子中,我只在动态功能模块中启用了数据绑定。我在根模块中启用数据绑定后,错误消失了。
Note: You must configure data binding for app modules that depend on libraries that use data binding, even if the app module doesn't directly use data binding.
此外,您可能需要使缓存失效并重新启动。
对我来说,我的布局文件有错误。我引用了一个不存在的函数。
android:text="@{() -> sleepTrackerViewModel.nightStrings}"
解决方法如下:
android:text="@{sleepTrackerViewModel.nightStrings}"
这是我的解决方案
实施“android.arch.lifecycle:扩展:$lifeCycleExtensionVersion”
改变
实现“androidx.lifecycle:lifecycle-runtime-ktx:$lifeCycleExtensionVersion
请在gradle.properties
中添加这一行android.enableJetifier=true