項目組件化之遇到的坑
需要做的事情很簡單,就是將業務解耦模塊化,讓這個模塊在debug下作為application單獨運行,而在release下就作為library。
這篇其實只是寫一下我碰到的問題,記錄一下。
組件化套殼思路
和 main 同級下有一個 debug 和 release 目錄,在用命令行 gradle assembleDebug 就會把main中的manifest和debug中的manifest合并。
當debug的時候就會使用debug的manifest中的activity作為入口啟動,這樣在開發的時候只需要在當前模塊編譯開發即可。
release的時候module就是library了,而入口就是app。
組件化遇到的坑
因為我們項目重度依賴apt以及一些編譯中生成的庫,像 databinding 、 dagger 、 retrolambda 。
我們把dagger一些公用的component以及module都隨著業務module一起抽離了出來。
填坑之databinding
之后抽離databinding的時候遇到了蛋疼的問題,我們使用databinding直接get之前set進去的variable,結果這樣會導致在databidning在library中編譯出錯,其中緣由可以另外移駕至 → http://blog.zhaiyifan.cn/2016/10/11/data-binding-in-library-module/
查錯
databinding生成出錯后,會連帶dagger報錯,這個時候報錯又毫無頭緒。
需要使用命令行,將編譯的log輸出到文件中,因為console輸出log有行數限制的。
gradle assembleDebug --debug --info > log.txt 2>&1
xml
在抽離module的時候用的AndroidStudio(大坑)的refactor,但是不支持對xml的修改,所以databinding涉及的xml中的依賴都要手動修改過來。
生成的BR
有多個module都是使用了databinding,那么這個時候會有對于BR依賴的問題,你要自己區分你使用的是依賴module的BR還是當前module的BR
databinding組件化總結:只要一處沒修改好,所有編譯都是紅的,反正都是淚~
retrolambda
db填完后,發現retrolambda提示生成class出錯,但是它又不是apt的,根據錯誤提示找了許久,提示升級版本,之前是3.2.5,升級到3.3.0之后編譯OK,然后在阿翟那邊編譯失敗,又降了回來,現在又可以編譯了,沒有復現問題,推測是dagger依賴出現編譯失敗,導致了retrolambda生成失敗。
升級到3.3.0后提示的錯反而是 NoSuchMethodError ,真是扯犢子。
dagger
這位大哥,只要有一個地方錯,滿屏幕都是它報錯,所有該生成的都沒生成。而且錯誤提示還不友好,看錯誤日志的最上面,有沒有提示什么。如果沒有,那么就恭喜了,是不是什么地方寫漏了回去慢慢看吧。
AndroidStudio
升級到2.2后,在module中開發,經常會智能提示失敗,然后莫名其妙標紅,命令行編譯又是通過的,反正我就是關閉再重啟,其他東西點了都沒什么用,都是大爺MD!。
來自:http://mp.weixin.qq.com/s?__biz=MzIwOTQ1MjAwMg==&mid=2247483776&idx=1&sn=df3160bf0e88c3cbb2a651ef38a1de8d&chksm=9772ef0da005661b7e01c63decdb413662990d3b2e385cef9f1ed86eac4843d000681522d3fd&scene=0#rd