将Dagger 2和Android Data Binding同时添加到我的项目时,我得到一些以下构建时错误 . 这似乎是一个已知问题(见[1]或[2]),因为我得到了完全相同的错误 . 不幸的是我无法解决它们(就像其他人一样) . 有人使用当前版本的Dagger 2和Data Binding进行完整的工作设置,并且可以提供帮助吗?
这里的错误:
C:\Users\Kai\AndroidStudioProjects\WearCompass\mobile\src\main\java\com\comparilla\wearcompass\ui\navigation\InfoPanelFragment.java:12: error: package com.comparilla.wearcompass.databinding does not exist
import com.comparilla.wearcompass.databinding.FragmentInfoPanelBinding;
^
C:\Users\Kai\AndroidStudioProjects\WearCompass\mobile\src\main\java\com\comparilla\wearcompass\ui\navigation\InfoPanelViewModel.java:8: error: cannot find symbol
import com.comparilla.wearcompass.BR;
^
symbol: class BR
location: package com.comparilla.wearcompass
C:\Users\Kai\AndroidStudioProjects\WearCompass\mobile\src\main\java\com\comparilla\wearcompass\MobileApplication.java:7: error: cannot find symbol
import com.comparilla.wearcompass.di.components.DaggerMobileApplicationComponent;
^
symbol: class DaggerMobileApplicationComponent
location: package com.comparilla.wearcompass.di.components
C:\Users\Kai\AndroidStudioProjects\WearCompass\mobile\src\main\java\com\comparilla\wearcompass\di\components\MobileActivityComponent.java:15: error: com.comparilla.wearcompass.common.services.HeadingService cannot be provided without an @Inject constructor or from an @Provides-annotated method.
void inject(InfoPanelFragment fragment);
^
com.comparilla.wearcompass.common.services.HeadingService is injected at
com.comparilla.wearcompass.di.modules.ActivityModule.provideInfoPanelViewModel(headingService, …)
com.comparilla.wearcompass.ui.navigation.InfoPanelViewModel is injected at
com.comparilla.wearcompass.ui.navigation.InfoPanelFragment.mViewModel
com.comparilla.wearcompass.ui.navigation.InfoPanelFragment is injected at
com.comparilla.wearcompass.di.components.MobileActivityComponent.inject(fragment)
4 errors
FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':mobile:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
我的项目build.gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
应用程序build.gradle:
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
android {
compileSdkVersion 24
buildToolsVersion "23.0.3"
dataBinding {
enabled = true
}
defaultConfig {
applicationId "com.comparilla.wearcompass"
minSdkVersion 21
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
wearApp project(':wear')
testCompile 'junit:junit:4.12'
// to enable BuildConfig.DEBUG in the common library
// see https://stackoverflow.com/a/29163361/166229
releaseCompile project(path: ':common', configuration: 'release')
debugCompile project(path: ':common', configuration: 'debug')
compile 'com.android.support:appcompat-v7:24.0.0'
compile 'com.google.android.gms:play-services-maps:9.0.2'
compile 'com.android.support:design:24.0.0'
compile 'com.android.support:preference-v14:24.0.0'
compile 'com.google.dagger:dagger:2.5'
apt 'com.google.dagger:dagger-compiler:2.5'
provided 'javax.annotation:jsr250-api:1.0'
}
我也在 apt 'com.google.dagger:dagger-compiler:2.5'
尝试了 provided
而不是 apt
,没有成功 . 同时评论 apply plugin: 'com.neenbedankt.android-apt'
没有帮助(如提供的资源中所建议的那样) .
1 回答
我确实在同一个项目中配置了Dagger 2和DataBinding,它没有任何问题 .
您在Dagger 2配置中确实有错误 . 创建
HeadingService
因为您没有为它提供@Provides
注释,并且该类在构造函数上没有@Inject
注释 .