之前使用過dagger1塞俱,今天試用了一下dagger2奕剃,上來就發(fā)現(xiàn)兩個坑蜓席。
坑1
剛寫完一個簡單的demo器一,編譯就會報錯,提示javax.annotation
不存在厨内。
解決方法是在build.gradle
里面添加依賴祈秕。
provided 'org.glassfish:javax.annotation:10.0-b28'
原因分析:dagger2會在編譯的時候生成一些.java
文件,里面會有個@Generated
注解雏胃,這個注解是javax.annotation
包中的请毛。
坑2
這時候編譯通過了,注入的時候你需要引用一個dagger2編譯時生成的Component class瞭亮,然而這class你根本引用不到方仿,經(jīng)過搜索發(fā)現(xiàn),dagger2的compiler不能用provided依賴,需要使用android-apt的插件仙蚜,用apt關(guān)鍵字依賴此洲。
apt 'com.google.dagger:dagger-compiler:2.0.1'
原因分析:用provided的話,dagger2生成的class在build/intermediates
目錄中委粉,這里面的class我們不能直接引用到呜师,但是打包的時候會打包進去,也就是運行時是可以引用到的贾节,但是我們的開發(fā)環(huán)境中引用不到汁汗,這里可以通過反射調(diào)用。然而使用apt插件后氮双,dagger2生成的class在build/generated
目錄中碰酝,在這個目錄中的class我們可以直接引用到,比如R文件也是在這個目錄里面戴差。