Android業務元件化之現狀分析與探討
前言:
從個人經歷來說的話,從事APP開發這麼多年來,所接觸的APP的體積變得越來越大,業務的也變得越來越複雜,總來來說只有一句話:這是一個APP臃腫的時代!所以為了告別APP臃腫的時代,讓我們進入一個U盤時代,每個業務模組都是一個具備獨立執行的U盤,插在哪裡都可以完美執行,這就是推進業務元件化的初衷也是一個美好的願景。
業務元件化相關文章地址:
需求背景:
隨著公司的快速發展,版本不斷的迭代,業務變得也越來越複雜,業務模組的數量有可能還會繼續增加,而且每個模組的程式碼也會越來越多,這樣下去勢必影響開發效率,增加專案的維護成本,每個工程師都要熟悉如此之多的程式碼,而且每次編譯如此之多的程式碼,電腦卡死了有木有?慢的像蝸牛先生有木有?這樣以來估計工程師直接瘋掉了!然後跳樓go die 了!所以推進公司業務元件化迫在眉睫,這也是實現業務元件化的大背景。
現狀分析:
只有知道自己問題出在了哪裡?才好尋找解決問題的辦法,我們先來看下目前大部分app的單一專案結構原型。大致如下圖所示:
一眼望去這結構不是挺清晰的麼?每個業務都放在單獨的包名下,網路庫、圖片載入庫等第三方庫與上層業務都完美的剝離了,我們再來看下他們的直接的依賴關係圖:
雖然上面的依賴關係舉例有點太過於極端,但是真實場景中是存在的。各個業務之間程式碼互相引用,所以這種結構也是架構整改的根本動機,也是當務之急應該考慮的事情。為了更好的滿足各個業務的迭代而彼此不受影響,更好的解決上面這種讓人頭疼的依賴關係,開始著手app架構整改。
從上面的分析我們可以得出適合業務元件化的幾種情況:
- 業務較多、而且複雜
- 業務之間的依賴需要解耦
- 團隊成員較多,需要各自開發相對獨立的業務
業務元件化方向:
APP業務元件化架構整改的方向就是告別結構臃腫的時代,讓各個業務變得相對獨立。模組工程和類庫工程之間遵循向下依賴關係,各個模組之間的遵循平級依賴關係。先看下整改後的各個獨立業務模組與類庫工程之間的向下依賴關係圖:
整改的方向由一個專案工程拆分成若干個模組工程,由app殼工程提供統一的入口,每個業務獨立的模組module共享專案的依賴庫。由殼工程整合需要引入的業務模組,至於各個獨立的業務模組之間的呼叫依賴關係,我們藉助一箇中間層充當路由功能,這個路由我們放在各個業務模組共同引用的依賴庫那一層。由路由統一排程他們之間的依賴關係,路由排程解決平級依賴問題示意圖:
通過APP殼工程提供的路由功能,各個模組之間呼叫不再採用傳統的顯式呼叫,而是採用隱式呼叫的方式。從而使各個模組之間不再存在依賴關係。
APP業務元件化架構整改技術方案:
業務元件化大致需要解決以下幾個問題。
1.)業務元件的生命週期
按照理想狀態的來看待的話,各個業務元件之間沒有任何依賴關係,這時我們可以把每個獨立的業務元件看成一個可執行的app,所以業務元件的生命週期和應與獨立的app保持一致。
2.)業務元件之間通訊
在各個單獨業務元件內,基本上保持原來的呼叫方式,元件之間通訊採用URL Schema方式實現頁面跳轉,格式為 schema://host/action?param1=value1¶m2=value2 。關於schema對映表維護由上面提到的Router(路由)這麼一個角色來維護,
schema解析由系統Framework來維護。其中schema對映表可以做成後臺配置檔案形式。也可以程式碼維護,不過元件需要預先註冊。以上說的對於傳遞基本引數是沒啥問題的。如果要傳遞物件的話,轉成Json 字串就可以了。
APP 業務元件化架構整改帶來的好處:
如此規模大的架構整改需要付出更高的成本,還會涉及一些潛在的風險,那麼整改後的架構能夠帶來哪些好處呢?
-
加快迭代速度,各個業務模組元件更加獨立,不再因為業務耦合情況,在發版時候,由於互相等待而遲遲不能釋出版本。
-
穩定的公共模組採用依賴庫方式,提供給各個業務線使用,減少重複開發和維護工作量。
-
迭代頻繁的業務模組採用元件方式,各業務線研發可以互不干擾、提升協作效率,並控制產品質量。
-
為新業務隨時整合提供了基礎,所有業務可上可下,靈活多變。
-
降低團隊成員熟悉專案的成本,降低專案的維護難度。
-
加快編譯速度,提高開發效率
總結:
本篇主要來分析為何要實現業務元件化、元件化的方向、元件化的技術方案簡單探討、元件化帶來的好處,由於目前還處於實施初期,很多觀點有可能是錯誤的,很多技術坑還沒涉及,後續會跟進更多相關實現方案。
相關推薦
Android業務元件化之現狀分析與探討
前言: 從個人經歷來說的話,從事APP開發這麼多年來,所接觸的APP的體積變得越來越大,業務的也變得越來越複雜,總來來說只有一句話:這是一個APP臃腫的時代!所以為了告別APP臃腫的時代,讓我們進入一個U盤時代,每個業務模組都是一個具備獨立執行的U盤,插在哪
Android業務元件化之Gradle和Sonatype Nexus搭建私有maven倉庫
前言: 公司的業務元件化推進的已經差不多三四個月的時間了,各個業務元件之間的解耦工作已經基本完成,各個業務元件以module的形式存在專案中,然後專案依賴本地的module,多少有點不太利於專案的並行開發維護了,本質原因就是如果是依賴本地的,必須要將依賴的module和主工程放在一個project裡
Android業務元件化之子模組SubModule的拆分以及它們之間的路由Router實現
前言: 前面分析了APP的現狀以及業務元件化的一些探討(Android業務元件化之現狀分析與探討),以及通訊的橋樑Scheme的使用(Android業務元件化之URL Scheme使用),今天重點來聊下子模組SubModule的拆分以及它們之間的路由Router實現。本篇涉及的相關知識比較多,閱讀
Android業務元件化之URL Scheme使用
前言: 最近公司業務發展迅速,單一的專案工程不再適合公司發展需要,所以開始推進公司APP業務元件化,很榮幸自己能夠牽頭做這件事,經過研究實現元件化的通訊方案通過URL Scheme,所以想著現在還是在預研階段,很有必要先了解一下URL Scheme,看看是如何使用的?其實在之前做Hybrid混合程
Android 專案元件化之建立module,生成aar,引入aar
導言: 在android平時的開發中,經常自己寫的東西讓別人使用,那麼就有module,aar,jar等方式. 1:module通過import module並dependencies完成 2:aar,包括所有檔案的android專用包,通過右邊的gradle->assembl
Android 業務元件化開發實踐
本文原創,轉載請以連結形式註明地址:http://kymjs.com/code/2016/10/18/01元件化並不是新話題,其實很早很早以前我們開始為專案解耦的時候就討論過的。但那時候我們說的是功能元件化。比如很多公司都常見的,網路請求模組、登入註冊模組單獨拿出來,交給一個團隊開發,而在用的時候只需要接入對
Android業務元件化開發實踐
1. 寫在前面 原文地址:http://kymjs.com/code/2016/10/18/01 借用阿布倪盟博的一句話:“在MDCC中馮森林老師的《迴歸初心,從容器化到元件化》,為我們這些沒有那麼多精力折騰黑科技開發者們打開了另一扇門” 。 元件
Android/Linux Thermal Governor之IPA分析與使用
IPA(Intelligent Power Allocator)模型的核心是利用PID控制器,Thermal Zone的溫度作為輸入,可分配功耗值作為輸出,調節Allocator的頻率和電壓值。 由Power Management一般開發模型可知,包括模型建立,模型實現,驗證。 1 IPA模型 PID控制器在
Android業務元件化開發實踐(轉載)
借用阿布倪盟博的一句話:“在MDCC中馮森林老師的《迴歸初心,從容器化到元件化》,為我們這些沒有那麼多精力折騰黑科技開發者們打開了另一扇門” 。 元件化並不是新話題,其實很早很早以前我們開始為專案解耦的時候就討論過的。但那時候我們說的是功能元件化。比如很多公司都常
Android業務元件化開發實踐(二)
前言: 從個人經歷來說的話,從事APP開發這麼多年來,所接觸的APP的體積變得越來越大,業務的也變得越來越複雜,總來來說只有一句話:這是一個APP臃腫的時代!所以為了告別APP臃腫的時代,讓我們進入一個U盤時代,每個業務模組都是一個具備獨立執行的U盤,插在哪裡都可以完美執行,這就是推進業務元件
Android專案架構之業務元件化
前言: 從個人經歷來說的話,從事APP開發這麼多年來,所接觸的APP的體積變得越來越大,業務的也變得越來越複雜,總來來說只有一句話:這是一個APP臃腫的時代!所以為了告別APP臃腫的時代,讓我們進入一個U盤時代,每個業務模組都是一個具備獨立執行的盤,插在哪裡都
Android元件化之元件通訊
Demo地址:https://github.com/751496032/ComponentDemo 本文是續上一篇Android元件化方案實踐與思考文章一些思考,主要是針對元件間通訊,比如: 每個元件如何初始化各自的資料 Activity間如何跳轉、Fragment例項
我所理解的Android元件化之通訊機制
之前寫過一篇關於Android元件化的文章,《Android元件化框架設計與實踐》,之前沒看過的小夥伴可以先點選閱讀。那篇文章是從實戰中進行總結得來,是公司的一個真實專案進行元件化架構改造,粒度會分的更粗些,是對整體架構實踐進行相應的總結,裡面說了要打造一個元件化框架的話,需要從以下7個方面入手: 程式碼解
Android 元件化之路 路由設計
基於公司業務發展,公司的APP需求不斷增加,應用也略顯“臃腫”。想著趁現在不那麼“糟糕”,時間也比較寬裕,把專案結構整整,因而走上了元件化之路。 模組化 VS 元件化 模組化: 將一個程式按照其功能做拆分,分成相互獨立的模組,以便於每個模組只包含與其功能
Android控制元件系列之RadioButton與RadioGroup的基本使用
RadioButton即單選框,是一種基礎的UI控制元件。RadioGroup為我們提供了RadioButton單選按鈕的容器,RadioButton通常放於RadioGroup容器中進行使用。RadioButton的選中狀態,在xml檔案中可以使用android:chec
Android元件化之終極方案
Fragment或View如何支援元件化 距離 Android元件化方案 釋出已經半年有餘,雖說這個方案已經能夠解決一些專案的需求,但是依然不夠完美。很多開發者也在部落格和GitHub中留言甚至發郵件問我,Fragment怎麼辦?
Android元件化之不同模組間 互動(activity互相跳轉,資料互相傳遞,互相呼叫函式)
轉載請標明地址:https://blog.csdn.net/gaolei1201/article/details/77601027 在元件化之前,業務發展不是很快的時候,這樣是比較合適的,能一定程度地保證開發效率。 慢慢地程式碼量多了起來,開發人員也多了起來,業務發展也
《Android徹底元件化方案實踐》讀後分析
《得到》App相關開發成員開源關於Android元件話的實踐方案及demo,看似實現程式碼簡單,但核心是元件化的實現想法以及自動整合、單獨執行的構建實現。現對其中的核心思想和gradle外掛寫些自己的理解以及Gradle外掛開發學習筆記,填補這方面的知識以及拓展
Java序列化與ProtocalBuffer序列化之深入分析(轉)
今天看了《Java序列化與ProtocalBuffer序列化之深入分析》,感覺有所收穫。原文中對ObjectStreamField中關於屬性型別與字元表示的對映沒有指出來,在原帖中回覆了作者,這裡稍作修改並轉發。 從一個簡單物件的序列化內容來看java序列化與ProtocalBuffer序列化機制的
(一)Android官方MVVM框架實現元件化之整體結構
一、google官方MVVM框架講解 我前面對比了MVC和MVP《兩張圖看懂Android開發中MVC與MVP的區別》,可以相對於MVC我們的MVP是有多優越,但是Android開發現在已經開始流行了MVVM,前不久google官方釋出了MVV