記一次 Data Binding 在 library module 中遇到的大坑
使用 Data Binding 也有半年多了,從最初的 setVariable,替換 findViewById,到比較高級的雙向綁定,自定義 Adapter、Component,查看源碼了解編譯、運行流程,也算是小有成果,且沒有碰到 Data Binding 本身實現上的問題。
然而,最近在一次重構組件化(見 MDCC 上馮森林的《回歸初心,從容器化到組件化》)的過程中,碰到了一個比較嚴重的 BUG。已經提交 issue(#224048)到了 AOSP,雖然改起來是不麻煩,但是因為是 gradle plugin,所以 - -,還是讓 Google 自己來吧。希望能早日修復。
Library module 生成 class
在 library module 下啟用 Data Binding 很簡單,跟 application module 一樣,加上:
android { dataBinding { enabled = true }}對應生成的 binding 類會在 manifest 里面指定的 package name 下的 databinding 包下。
坑
于是坑的地方就在這里了,編譯不過了…
為啥呢?報錯說 symbol 找不到…于是在 module 的 build 下查看生成的 Binding 類…臥槽?!怎么是 abstract 的?怎么都找不到那些 get 方法了?雖然我也不知道為什么我們會從 binding 類里面去拿之前 set 進去的 ViewModel。
WTF?!
What happened
Fuck 歸 fuck,究竟怎么回事還是要研究一下的。
是我們姿勢錯了?Dagger2 生成哪里出問題了?還是 Data Binding 的 bug 呢?
因為之前也研究過 data binding 生成部分的代碼,所以找到問題所在沒有花太多時間,這里不多 主站蜘蛛池模板: 资阳市| 勐海县| 罗江县| 丰城市| 仁怀市| 铜川市| 比如县| 沅陵县| 扎鲁特旗| 张家界市| 大荔县| 黔江区| 京山县| 公安县| 东丰县| 菏泽市| 武城县| 垣曲县| 长沙市| 阿鲁科尔沁旗| 拉萨市| 双桥区| 宁安市| 宿松县| 习水县| 昭平县| 马边| 朝阳区| 锡林浩特市| 迭部县| 玉门市| 探索| 交口县| 托克托县| 贵定县| 赤水市| 凤山县| 会理县| 论坛| 皮山县| 陆川县|