從本篇開始,打算從廣義上探究一下移動架構的思想;包括現在仍然比較火熱的模塊化,組件化, 插件化等架構思想。話說在前面,本篇旨在說明當前主流架構的設計概念,讓大家了解當前的架構形式,以及主要用了什么設計思想,什么設計思路,算是引導篇...
一、模塊化,組件化,插件化
上述概念已經好久了,或許還是有一些同胞對這些概念不是很清楚,大體知道是什么,但是詳細也不知道是什么。現在來解析一下。
二、單工程模式
移動開發誕生,我們開發移動項目,我相信大多用的是單工程單任務的開發模式,二話不說,直接就開始寫起,是不是這樣呢?
new Project -> 分包 -> 寫起。我相信都經歷過,也寫的比較爽,為什么呢?
這種模式不涉及亂七八糟的處理方式, 上手快,開發快,足夠敏捷。那么原因是什么呢?Mobile Project 剛起步,項目都偏小,一些附加業務還沒綁到App上。
1、模塊化
Android Studio出來了,多出來了一個新的概念, Project, Module... 模塊;當時以包的形式分離的公共包common,現在成了AS中的Module。
大家都知道,Module包含兩種格式: application, library。也就是說,一個Module就是一個小的項目,也是AS概念中的模塊。
因此我們開始設計common模塊, common_business模塊,甚至db模塊。模塊的好處是什么?
相比於包來講,模塊更靈活,耦合更低,隨意插拔,想引入哪個就引入哪個。根據不同的關注點,將一個項目的可以共享的部分抽取出來,形成獨立的Module,就是模塊化。
當然,模塊化不只包含公共部分,當然也可以是業務模塊。
2、組件化
平時看看論壇,好多人都在問: 模塊化和組件化有什么區別? 到底有什么區別呢,其實很小;但並不是完全相同的概念。 通過以上模塊化的概念講述,應該對模塊化有了一個了解,那么區別是什么呢?
組件化是建立在模塊化思想上的一次演進,一個變種。組件化本來就是模塊化的概念。但是組件化的核心是 什么? 是模塊角色的可轉換性。是的,就是可轉換性。
組件化的核心是角色的轉換。 在打包時, 是library; 在調試時, 是application。
怎么理解組件化的概念 ?
Module的模式分兩種, application和library
library就是引用庫,如你抽取的common。 而application就是一個apk, 是一個完整的項目。
在調試時,我只關心我負責的模塊,我希望我的模塊是一個單獨的app,因為這樣更小,業務更專一,相對來講修改與調試就會越省時省心,編譯就會越快。試想當你需要改一段代碼,既要關注自己的,也要關注別人的,是一種什么體驗 ? 或者, 編譯一個項目10M的代碼和一個工程全部1G的代碼,哪個比較舒服一些?
3、 插件化
又有人問了:插件化和組件化又有什么區別呢?
插件化嚴格意義來講,其實也算是模塊化的觀念。將一個完整的工程,按業務划分為不同的插件,都是分治法的一種體現。化整為零,相互配合。越小的模塊越容易維護。
插件化按理也算是模塊化的一種體現,和組件化就不一個概念了。那么,到底有什么區別呢?
組件化的單位是組件(module)。
插件化的單位是apk(一個完整的應用)。
組件化實現的是解耦與加快編譯, 隔離不需要關注的部分。
插件化實現的也是解耦與加快編譯,同時實現熱插拔也就是熱更新。
組件化的靈活性在於按加載時機切換,分離出獨立的業務組件,比如微信的朋友圈
插件化的靈活性在於是加載apk, 完全可以動態下載,動態更新,比組件化更靈活。
組件化能做的只是, 朋友圈已經有了,我想單獨調試,維護,和別人不耦合。但是和整個項目還是有關聯的。
插件化可以說朋友圈就是一個app, 我需要整合了,把它整合進微信這個大的app里面
其實從框架名稱就可以看出: 組 和 插。
組本來就是一個系統,你把微信分為朋友圈,聊天, 通訊錄按意義上划為獨立模塊,但並不是真正意義上的獨立模塊。
插本來就是不同的apk, 你把微信的朋友圈,聊天,通訊錄單獨做一個完全獨立的app, 需要微信的時候插在一起,就是一個大型的app了。
插件化的加載是動態的,這點很重要,也是靈活的根源。
以上是對三個思想的解析,相信應該能明白不同的概念的具體意義和區別在哪了。
4、子模塊划分
除了大家公認的common部分, 業務模塊的划分尤為重要,相比於狹義上的架構,廣義上的子系統的划分的關注點,很考驗技術經驗以及對業務的理解。
5、通信方式
模塊化的通信方式,無非是相互引入;我抽取了common, 其他模塊使用自然要引入這個module 組件化的通信方式,按理說可以划分為多種,主流的是隱式和路由。隱式的存在使解耦與靈活大大降低,因此路由是主流 插件化的通信方式,不同插件本身就是不同的進程了。因此通信方式偏向於Binder機制類似的進程間通信
廢話說了這么多,其實本篇作為組件化的引導篇,主要是想讓大家掌握組件化開發。網上有很多關於學習組件化開發思路的文章,組件化原理很簡單,但是真正實施起來還是挺困難的,沒有相應的實戰+源碼參考就做好踩坑的准備吧。
最近小編有幸在字節跳動高工手里扒到這份“組件化實戰學習手冊”,這位大佬主導開發過多個采用組件化架構的APP項目。現在我只想吹爆!這位大佬熬夜半個月,把積累的經驗和踩的坑都進行了總結,整理成了長達220頁的學習手冊,手冊中收錄了大廠熱門的組件化項目實戰,從新手到架構師,這份學習手冊足以。
第一章 Android組件化初識
- 組件化和模塊化的區別
- 組件化和插件化的區別
- 組件化開發的優勢
- 業務邏輯層
- 組件化開發要遇到的問題
- 從組件化實戰來解決問題
- Android組件化基礎
……
第二章 Android組件化初探目錄
- 組件化演示案例
概述
模塊化和組件化
組件化Demo
組件application和library動態切換
…… - WanAndroid APP 組件化項目實戰附demo
版本更新
效果圖
主要功能
項目目錄結構
主要開源框架
……
第三章 架構演化(大廠篇)
- 從智行 Android 項目看組件化架構實踐
組件化調整的原因和目標
組件化架構調整的整體規划
組件化架構調整中遇到的一些問題
- 得到 App
Android徹底組件化demo發布
JIMU使用指南
組件化拆分的感悟
……
有需要的朋友直接點擊此處的藍色字體獲取完整文檔。
- 微信 App
微信Android模塊化架構重構實踐
微信Android架構歷史
為何再次重構微信
……
-
蘑菇街 App
蘑菇街 App 的組件化實現方式
組件生命周期管理
殼工程
遇到的問題
持續集成
周邊設施
……
-
愛奇藝 App
基於Service的IPC通信
組件化跨進程通信的核心訴求
Andromeda
架構分析
……
- 美團 App
外賣客戶端容器化架構的演進
美團外賣容器化架構全景圖
外賣跨端容器建設
外賣頁面容器建設
外賣容器化架構的衡量指標
外賣容器化架構的監控運維
外賣容器化架構的發布能力
……
- 美團Android組件化方案及組件消息總線modular-event實戰
- 美團Android消息總線的演進之路:用LiveDataBus替代RxBus、EventBus
- WMRouter:美團外賣Android開源路由框架
- 美團貓眼android模塊化實戰-可能是最詳細的模塊化實戰
- 攜程App
- 支付寶 App
......
以上就是字節跳動大佬熬夜整理的220頁Android組件化實戰學習手冊,有需要的朋友直接點擊此處的藍色字體獲取完整文檔。
結語
現在組件化真的不是什么新鮮東西了,大公司都用的滾瓜爛熟,龍飛鳳舞了,也就是現在部分中型項目和小項目在組件化的路上努力。
所以同志們,組件化沒玩過的,不熟悉的趕緊搞起來,說一點,你不會組件化,發布影子工程那么對你來說就是個噩夢。從本質上來講任何技術進步都是在現實需求的逼迫下抓耳撓腮,耗盡無數頭發才想出來的。
所以呢組件化這個東西出來這么久了,頁發展了這么久了,用的人越來越多,那肯定是對我們開發大有裨益的,小伙伴們不會,不熟悉抓緊啦,要不面試問你你怎么回答呢!