Android 在 Gradle 插件更新并迁移到 annotationProcessor 后数据绑定构建失败

Android Databinding build fail after Gradle plugin update with migration to annotationProcessor

之前链接的迁移指南指出我需要的只是

  • Make sure you are on the Android Gradle 2.2 plugin or newer
  • Remove the android-apt plugin from your build scripts
  • Change all apt, androidTestApt and testApt dependencies to their new format

这应该是成功构建项目所需的全部内容。然而它没有建立。

构建输出

Gradle build finished with 101 error(s) and 23 warning(s) in 12s 481ms

所有错误都遵循相同的模式:

  • C:\Users...\FooAdapter.java
    • error: package com.example.app.databinding does not exist
    • error: cannot find symbol class ItemFooBinding

可以在构建控制台中找到一条有趣的消息:

Warning:The following options were not recognized by any processor: '[android.databinding.minApi, android.databinding.enableDebugLogs, android.databinding.sdkDir, android.databinding.bindingBuildFolder, android.databinding.enableForTests, android.databinding.modulePackage, android.databinding.generationalFileOutDir, android.databinding.xmlOutDir, android.databinding.artifactType, android.databinding.printEncodedErrors, android.databinding.isTestVariant]'

我想指出...

附加信息

以下差异显示了我如何修改 gradle 文件:

  1. build.gradle DiffChecker link
  2. app/build.gradle DiffChecker link

此外,作为快速概览,这里列出了项目使用的一些 "more interesting" 插件和库:

有人知道问题出在哪里吗?任何帮助或想法将不胜感激!

当您看到像本例中提到数据绑定的无数构建错误时,问题通常出在其他地方。数据绑定只是由于不相关的构建问题而停止在其轨道上并且非常大声地抱怨。处理它的唯一方法是定位与数据绑定无关的构建错误。一旦它们被修复,数据绑定就可以再次做它的事情并且保持沉默。不幸的是,您经常不得不多次重复这种方法,直到找到所有非数据绑定问题。这当然是一项艰巨的任务,但不幸的是,在 Google 设法提供更健全的构建环境之前,您无能为力。

这就是为什么建议您将构建错误限制增加到 100 以上的原因 - 您不会看到导致问题的实际错误,因为它们通常不会出现在列表的前面。

我猜一下 - Dagger 2 是触发此问题的常见来源,这可能与您的 annotationProcessor 更改有关;所以请注意 Dagger 错误。但是您的问题可能是由其他原因引起的,例如您提到的其他注释处理器 - 在您努力挖掘构建错误之前,您无法确定。

似乎这一切都归结为我使用 Kotlin 的项目。实际上我们混合了它:一些 类 使用普通的旧 Java 而另一些则用 Kotlin 编写。不完整的迁移。 :)

我认为如果没有 Kotlin,用 annotationProcessor 替换 apt 就足够了,我根本不会 运行 进入这个问题。

解决方案

注解需要annotationProcessorkapt都处理,好像是Kotlin自带的注解处理器

对于每个使用注解的 Gradle 依赖项,您的应用级别 build.gradle 中应该有以下 两者

  • annotationProcessor 'com.example.my.library:x.y.z
  • kapt 'com.example.my.library:x.y.z

我收到了完全相同的警告。 gradle 中的这一行解决了问题:

kapt "com.android.databinding:compiler:3.0.1"

希望对某人有所帮助

更新:
3.0.1Android Plugin Version.