Dagger2入坑指南

3,565 阅读1分钟
原文链接: www.jianshu.com

之前使用过dagger1,今天试用了一下dagger2,上来就发现两个坑。

坑1

刚写完一个简单的demo,编译就会报错,提示javax.annotation不存在。
解决方法是在build.gradle里面添加依赖。

provided 'org.glassfish:javax.annotation:10.0-b28'

原因分析:dagger2会在编译的时候生成一些.java文件,里面会有个@Generated注解,这个注解是javax.annotation包中的。

坑2

这时候编译通过了,注入的时候你需要引用一个dagger2编译时生成的Component class,然而这class你根本引用不到,经过搜索发现,dagger2的compiler不能用provided依赖,需要使用android-apt的插件,用apt关键字依赖。

apt 'com.google.dagger:dagger-compiler:2.0.1'

原因分析:用provided的话,dagger2生成的class在build/intermediates目录中,这里面的class我们不能直接引用到,但是打包的时候会打包进去,也就是运行时是可以引用到的,但是我们的开发环境中引用不到,这里可以通过反射调用。然而使用apt插件后,dagger2生成的class在build/generated目录中,在这个目录中的class我们可以直接引用到,比如R文件也是在这个目录里面。