将Dagger 2和Android Data Binding都添加到我的项目中时,出现以下以下构建时间错误。似乎这是一个已知问题(请参阅[1]或[2]),因为我得到了完全相同的错误。不幸的是,我无法解决这些问题(就像其他一些问题一样)。是否有人对Dagger 2和数据绑定(bind)的当前版本具有完整的工作设置,并且可以提供帮助?
这里的错误:
C:\ Users \ Kai \ AndroidStudioProjects \ WearCompass \ mobile \ src \ main \ java \ com \ comparilla \ wearcompass \ ui \ navigation \ InfoPanelFragment.java:12:错误:包com.comparilla.wearcompass.databinding不存在
导入com.comparilla.wearcompass.databinding.FragmentInfoPanelBinding;
^
C:\ Users \ Kai \ AndroidStudioProjects \ WearCompass \ mobile \ src \ main \ java \ com \ comparilla \ wearcompass \ ui \ navigation \ InfoPanelViewModel.java:8:错误:找不到符号
导入com.comparilla.wearcompass.BR;
^
符号:BR级
位置:com.comparilla.wearcompass包
C:\ Users \ Kai \ AndroidStudioProjects \ WearCompass \ mobile \ src \ main \ java \ com \ comparilla \ wearcompass \ MobileApplication.java:7:错误:找不到符号
导入com.comparilla.wearcompass.di.components.DaggerMobileApplicationComponent;
^
符号:类DaggerMobileApplicationComponent
位置:包com.comparilla.wearcompass.di.components
C:\ Users \ Kai \ AndroidStudioProjects \ WearCompass \ mobile \ src \ main \ java \ com \ comparilla \ wearcompass \ di \ components \ MobileActivityComponent.java:15:错误:com.comparilla.wearcompass.common.services.HeadingService无法无需@Inject构造函数或@Provides注释方法提供。
无效注入(inject)(InfoPanelFragment片段);
^
com.comparilla.wearcompass.common.services.HeadingService在以下位置注入(inject)
com.comparilla.wearcompass.di.modules.ActivityModule.provideInfoPanelViewModel(headingService,…)
com.comparilla.wearcompass.ui.navigation.InfoPanelViewModel在以下位置注入(inject)
com.comparilla.wearcompass.ui.navigation.InfoPanelFragment.mViewModel
com.comparilla.wearcompass.ui.navigation.InfoPanelFragment在以下位置注入(inject)
com.comparilla.wearcompass.di.components.MobileActivityComponent.inject(片段)
4个错误
失败
失败:生成失败,发生异常。
* 什么地方出了错:
任务':mobile:compileDebugJavaWithJavac'的执行失败。
>编译失败;有关详细信息,请参见编译器错误输出。
*尝试:
使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行,以获取更多日志输出。
建立失败
我的项目build.gradle:
//顶层构建文件,您可以在其中添加所有子项目/模块共有的配置选项。
buildscript {
储存库{
jcenter()
}
依赖项{
类路径'com.android.tools.build:gradle:2.1.2'
classpath'com.neenbedankt.gradle.plugins:android-apt:1.8'
//注意:请勿在此处放置应用程序依赖项;他们属于
//在各个模块的build.gradle文件中
}
}
所有项目{
储存库{
jcenter()
}
}
任务清理(类型:删除){
删除rootProject.buildDir
}
以及应用程序build.gradle:
应用插件:“com.android.application”
应用插件:“com.neenbedankt.android-apt”
android {
编译版本24
buildToolsVersion“23.0.3”
dataBinding {
启用=真
}
defaultConfig {
applicationId“com.comparilla.wearcompass”
minSdkVersion 21
targetSdkVersion 24
版本代码1
versionName“1.0”
}
buildTypes {
释放 {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
}
依赖项{
编译fileTree(包括:['* .jar'],dir:'libs')
wearApp专案(':wear')
testCompile'junit:junit:4.12'
//在公共(public)库中启用BuildConfig.DEBUG
//参见https://stackoverflow.com/a/29163361/166229
releaseCompile项目(路径:“:common”,配置:“release”)
debugCompile项目(路径:“:common”,配置:“debug”)
编译'com.android.support:appcompat-v7:24.0.0'
编译'com.google.android.gms:play-services-maps:9.0.2'
编译'com.android.support:design:24.0.0'
编译'com.android.support:preference-v14:24.0.0'
编译'com.google.dagger:dagger:2.5'
apt'com.google.dagger:dagger-compiler:2.5'
提供了'javax.annotation:jsr250-api:1.0'
}
我也尝试用provided
代替apt
中的apt 'com.google.dagger:dagger-compiler:2.5'
,但没有成功。同样,注释掉apply plugin: 'com.neenbedankt.android-apt'
也无济于事(就像在提供的资源中建议的那样)。
最佳答案
我确实在同一项目中配置了Dagger 2和DataBinding,并且可以正常使用。
您在Dagger 2配置中确实有错误。您尝试注入(inject)的HeadingService
无法创建,因为您没有为其提供@Provides
批注,并且该类在构造函数上也没有@Inject
批注。