前言
Android 任何一個組件化方案都要對項目進行一定程度的整改,下面會對所有需要整改的地方進行說明,以及會說到如何整改
資源文件
資源文件在準備組件化的過程中就得做,不會影響正常的開發,一旦後續需要徹底剝離的時候,就直接把對應的文件拖到指定的模塊就可以了
公用的資源
一個項目中肯定有一些是每一個地方都可能用到的資源,所以會有一個模塊去存放這些東西,我可能新建一個 “ModuleResource” 去放這些資源,然後使用一個固定的前綴去命名,比如顏色白色: resource_white
確定字符串:resource_confirm
Layout
Layout 文件的名稱需要對應的模塊前綴,比如用戶模塊的登錄界面,用戶模塊爲 “User”,所以這裏的登錄界面的佈局文件名稱爲 user_login_act
比如用戶模塊的登錄界面一個提示框, “user_login_tip_dialog”
drawable
同 Layout 的方式
string
這個資源不同於 Layout 和 drawable,我建議是把所有字符串都放到 ModuleResource 公共資源包中,以後做國際化也方便,而且字符串沒必要按照模塊劃分
style & theme
一般來說,顏色的使用都是根據場景和組件來的,Google也是這樣子做的,所以這東西頁也沒法模塊劃分,所以直接放到 ModuleResource 公共資源包中,做好場景和組件的顏色聲明就好了,但是如果後期項目實在是做大了,也可以在自己的模塊中去聲明自己模塊的顏色
功能的拆分
當只有一個 app module 的時候,我們所有的代碼都能引用到,導致各種功能之間互相引用,所以在準備組件化的時候,我們應該把一個一個的功能提取出來,寫成 接口-實現類 的方式,然後配合一個組件化方案,暴露接口隱藏實現類,讓之後分模塊了之後也能跨模塊調用,這點很重要,實現組件化過程中很重的一環,而且做這個事情也會讓你的項目每一個模塊職責更加的明瞭
業務模塊
每一個業務模塊都需要有一個唯一的包名,這樣內部的文件就肯定不會重合到了
界面的跳轉
使用任何一個組件化方案,都基本上有路由這個功能,它可以讓你跨模塊的啓動 Activity 界面,屏蔽實現,暴露 uri.但是也有一些組件化方案比如 cc組件化,它沒有這個概念,雖然也有類似的 host 和 path 的調用,但是本身不是基於 Uri 實現的,所以對於這方面我更加喜歡 ARouter 或者 WMRouter 或者 ActivityRouter,這些都是基於 Uri 的
基於 Uri 其實是有好處的,首先很多地方的跳轉都可以用鏈接表示,很方便.而且我可以添加各種 query 參數來傳遞數據給目標界面
總結
組件化方案很多,但是我建議大家都能深入瞭解一點組件化,選擇一個適合自己的,這裏我也有一個組件化的方案,相比來說,有以下的優點
- 只要有 Context 或者 Fragment,就能代替 onActivityResult,直接跳轉回調裏面拿數據(支持第三方界面和系統界面),這點非常有用,不然你就要被 onActivityResult 束縛
- 支持手動取消路由,還有當對應發起的 Fragment 或者 Activity 銷燬的時候,自動會取消相關的路由
- 攔截器種類中有一種特殊的頁面攔截器,簡明扼要的說就是進入目標界面之前會自動執行的攔截器,這種攔截器特別的有用,比如給目標界面標記一個登錄攔截器,那麼這個界面就必須登錄才能進去
- 能爲每一個業務模塊提供一個聲明週期,讓每一個業務模塊有初始化和銷燬的機會
- 其他功能可能其他框架也具備,這裏也就不在細說了
這是開源的方案的地址,感興趣的可以看看,歡迎 star 或者 fork