Gradle插件更新后,Android Databinding构建失败并迁移到annotationProcessor

oli*_*i.G 10 android android-build android-studio android-gradle-plugin android-databinding

  • 要在我的Android Studio版本中支持Instant Run,我需要将Gradle插件从版本升级2.2.32.3.3
  • 我知道我应该迁移到annoationProcessor,我相信我已经正确地遵循了该指南
  • 执行此操作后,Android DataBinding代码生成失败

与之前相关的迁移指南指出,我所需要的只是

  • 确保您使用的是Android Gradle 2.2插件或更新版本
  • 从构建脚本中删除android-apt插件
  • 将所有apt,androidTestApt和testApt依赖项更改为新格式

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

构建输出

Gradle构建完成了101个错误和23个警告(12秒481ms)

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

  • C:\用户\ FooAdapter.java
    • 错误:包com.example.app.databinding不存在
    • 错误:找不到符号类 ItemFooBinding

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

警告:任何处理器都无法识别以下选项:'[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]'

我想指出......

  • 我认为我在某些XML文件,绑定表达式或命名问题中没有错误.当我使用旧的gradle插件版本(以及所有其他源文件是最新的)切换回Git分支时,同一组源和XML构建
  • 我也随着讨论的输出生成错误的极限在这里,虽然这似乎并不相关,现在,因为你可以看到,我现在有"只有" 101个错误.:)

附加信息

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

  1. build.gradle DiffChecker链接
  2. app/build.gradle DiffChecker链接

另外,作为一个快速概述,这里是项目使用的一些"更有趣"的插件和库的列表:

  • 科特林
  • Android数据绑定
  • 领域
  • 改造
  • 匕首
  • ButterKnife(我知道......)
  • Multidex支持库

有没有人知道可能是什么问题?任何帮助或想法将非常值得赞赏!

kri*_*yna 13

我有完全相同的警告.gradle中的这一行解决了这个问题:

kapt "com.android.databinding:compiler:3.0.1"
Run Code Online (Sandbox Code Playgroud)

希望它会帮助某人

更新:
3.0.1Android插件版本.


oli*_*i.G 0

看来这一切都取决于我使用 Kotlin 的项目。实际上,我们将它们混合在一起:一些类使用普通的旧式 Java,而另一些类则用 Kotlin 编写。不完整的迁移。:)

我认为如果没有 Kotlin,替换aptannotationProcessor就足够了,我根本不会遇到这个问题。

解决方案

注解需要由annotationProcessorkapt两者处理,这似乎是 Kotlin 自己的注解处理器。

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

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

  • 这是错误的答案。您不应该将 kapt 与annotationProcessor 一起使用。Kapt 可以处理 Java 和 Kotlin 文件,甚至警告您不应该使用annotationProcessor,因此如果您同时拥有这两种文件,则有机会在 AP 方面遇到一些其他问题。如果您需要 Kotlin 文件的 AP,请仅使用 Kapt (11认同)