Dagger 2 和 Android 数据绑定冲突
Dagger 2 and Android Data Binding conflict
当同时添加 Dagger 2 and Android Data Binding to my project I get some the below build time errors. It seems that this is a known problem (see [1] or ) 时,我得到了完全相同的错误。不幸的是我无法解决它们(像其他人一样)。是否有人拥有当前版本的 Dagger 2 和数据绑定的完整工作设置,并且可以提供帮助?
这里是错误:
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
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'
}
我也尝试过 provided
而不是 apt 'com.google.dagger:dagger-compiler:2.5'
中的 apt
,但没有成功。同样注释掉 apply plugin: 'com.neenbedankt.android-apt'
也无济于事(如所提供资源中的建议)。
我确实在同一个项目中配置了 Dagger 2 和 DataBinding,它运行没有任何问题。
您在 Dagger 2 配置中确实有错误。无法创建您尝试注入的 HeadingService
,因为您没有为它提供 @Provides
注释,而且 class 上没有 @Inject
注释构造函数。
当同时添加 Dagger 2 and Android Data Binding to my project I get some the below build time errors. It seems that this is a known problem (see [1] or
这里是错误:
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 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' }
我也尝试过 provided
而不是 apt 'com.google.dagger:dagger-compiler:2.5'
中的 apt
,但没有成功。同样注释掉 apply plugin: 'com.neenbedankt.android-apt'
也无济于事(如所提供资源中的建议)。
我确实在同一个项目中配置了 Dagger 2 和 DataBinding,它运行没有任何问题。
您在 Dagger 2 配置中确实有错误。无法创建您尝试注入的 HeadingService
,因为您没有为它提供 @Provides
注释,而且 class 上没有 @Inject
注释构造函数。