在我的Android项目中,我使用的是Android Studio 3.0-beta6,用于休息调用的retrofit2,用于持久性的Room,用于使用RxJava / RxAndroid进行反应式编程的LiveData。有几个annotationProcessors在使用:
每次我添加一个新的Retrofit2服务,带有Room annotations的模型类,Room Dao类我发现我遇到了数据绑定生成错误:
Error:(3, 27) error: cannot find symbol class DataBindingComponent
一个巨大的"列表找不到符号"错误被释放但我的问题的根本原因通常不会被发出。调试根本原因需要花费大量时间,因为错误报告似乎非常弱。
在这里被烧了好几次后,我会用一些策略来解决这种情况下的问题:
然而,有时候我仍然遇到数据库生成错误,根本原因未知。
我想知道是否有任何好的技术来隔离这种acsenario的根本原因。有没有办法在注释处理器(特别是Room)中打开调试日志记录。
TIA对此有任何指导。我怀疑很多人都面临这种情况。
答案 0 :(得分:4)
以下技术在Android Studio的“消息”面板中提供了有关我在Dao类中的问题的有意义错误。它告诉我,我在Room @Query
注释中的表名中输入了一个拼写错误。更明确的信息是我通过build.gradle更改了java编译器发出的最大错误数。
我在build.gradle的末尾添加了以下代码:
allprojects {
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xmaxerrs" << "5000"
}
}
}
希望这有助于其他人。
答案 1 :(得分:1)
是的,问题在于Dagger,Databinding和Room使用注释处理器。这意味着一个代码生成器在处理另一个代码生成时会出现问题。
Ive added an issue long time ago。 Google团队希望改进这一点,但通常您可以直接在顶部查看gradle日志中的错误。
在对这些库进行一些开发之后,您会发现问题很简单。
答案 2 :(得分:-1)
在build.gradle模块级别使用...
apply from: 'buildsystem/dependencies.gradle'
buildscript {
ext.kotlin_version = '1.1.51'
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
//classpath "com.google.dagger:dagger-compiler:2.8"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
在您的项目build.gradle
中browser = webdriver.Firefox()