項目組件化之遇到的坑

gnlt9447 8年前發布 | 13K 次閱讀 XML Gradle Android開發 移動開發

需要做的事情很簡單,就是將業務解耦模塊化,讓這個模塊在debug下作為application單獨運行,而在release下就作為library。

這篇其實只是寫一下我碰到的問題,記錄一下。

組件化套殼思路

main 同級下有一個 debugrelease 目錄,在用命令行 gradle assembleDebug 就會把main中的manifest和debug中的manifest合并。

當debug的時候就會使用debug的manifest中的activity作為入口啟動,這樣在開發的時候只需要在當前模塊編譯開發即可。

release的時候module就是library了,而入口就是app。

組件化遇到的坑

因為我們項目重度依賴apt以及一些編譯中生成的庫,像 databindingdaggerretrolambda

我們把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

 

 本文由用戶 gnlt9447 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!