我尝试在我的Android项目中使用Dagger2;当我使用apt时,每件事情都是正确的。但AndroidStudio 3.0不支持apt,所以我使用注释处理器。但是在点击“Make Project”后没有创建Dagger2代码;而且我确信在AndroidStudio中启用了annotetion处理,因为Butterknife注释处理器是可以的。以下是build.gradle:
dependencies {
annotationProcessor 'com.google.dagger:dagger-android-processor:2.13'
compile 'com.google.dagger:dagger-android:2.13'
compile 'com.google.dagger:dagger-android-support:2.13'
compile 'com.jakewharton:butterknife:8.6.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
}
在android studio 3.0版本中使用它
implementation 'com.google.dagger:dagger:2.9'
annotationProcessor 'com.google.dagger:dagger-compiler:2.9'
这些是android studio 3.0中dagger 2和butter的依赖项
//ButterKniffe
compile "com.jakewharton:butterknife:8.8.1"
kapt "com.jakewharton:butterknife-compiler:8.8.1"
//dagger
compile "com.google.dagger:dagger:$dagger_version"
kapt "com.google.dagger:dagger-compiler:$dagger_version"
这是与gradle一起发生的突破性变化之一:3.0,Google announced at IO17 gradle:3.0
编译配置是now deprecated,应该被实现或api替换来自gradle docs:
出现在api配置中的依赖关系将传递给库的消费者,因此将出现在消费者的编译类路径中。
另一方面,在实现配置中找到的依赖关系不会暴露给消费者,因此不会泄漏到消费者的编译类路径中。这有几个好处:
- 列表项依赖项不再泄漏到消费者的编译类路径中,因此您永远不会意外地依赖于传递依赖项
- 由于减少了类路径大小,编译速度更快
- 当实现依赖性发生变化时,重新编译的次数减少:消费者不需要重新编译
- 清理发布:当与新的maven-publish插件结合使用时,Java库会生成POM文件,这些文件准确区分编译库所需的内容以及在运行时使用库所需的内容(换句话说,不要混合编译库本身所需的内容以及编译库所需的内容。
编译配置仍然存在但不应使用,因为它不会提供api和实现配置提供的保证。