在我的 Android 项目中,我使用 Android Studio 3.0-beta6,retrofit2 用于休息调用,Room 用于持久性,LiveData 用于使用 RxJava / RxAndroid 进行反应式编程。有几个 annotationProcessors 正在使用:
- android.arch.lifecycle:编译器
- android.arch.persistence.room:编译器
- com.google.dagger:dagger 编译器
- com.google.dagger:dagger-android-processor
- org.projectlombok:lombok
每次我添加一个新的 Retrofit2 服务、带有 Room 注释的模型类、Room Dao 类时,我发现我遇到了数据绑定生成错误:
Error:(3, 27) error: cannot find symbol class DataBindingComponent
发出了大量“找不到符号”错误,但我的问题的根本原因通常没有发出。调试根本原因需要大量时间,因为错误报告似乎很弱。
在被烧了几次之后,我用一些策略来隔离这种情况下的问题:
- 搁置我的更改并以小增量引入更改,并在吹走我的应用程序的构建和架构输出文件夹后进行干净的重建。通常这意味着首先引入模型类更改。接下来介绍 Room 所需的 Jackson 转换器,以便在我的 Room Entity 模型类中保留非原始类型。最后介绍 Dao 类和 Room Database 子类。
- 检查实体类以确保它们具有@PrimaryKey、@Entity、@TypeConverters Room 注释。确保 TypeConverter 类指定转换器类 FooConverter 而不是正在转换的类 Foo
- 检查 Dao 类以确保 @Query 注释中的表名中没有复制粘贴错误
然而,有时我仍然遇到数据组合生成错误并且根本原因未知。
我想知道是否有任何好的技术可以在这种情况下隔离根本原因。有没有办法在注释处理器(特别是 Room)中打开调试日志记录。
TIA 对此提供任何指导。我怀疑很多人都面临这种情况。