一、要用模塊化、組件化才能完成 Android 項目中類加載功能的原因
Android項目中的類加載功能是通過Java虛擬機(JVM)實現的,而JVM是基于Java語言的模塊化和組件化設計思想來構建的。因此,在Android項目中,如果要完成類加載功能,就需要使用模塊化、組件化的方法來組織代碼結構和管理資源,以便讓JVM能夠更好地識別和加載所需的類文件。
Android工程的組件一般分為兩種:
application組件: 是指該組件本身就可以運行并打包成apk。lib組件: 是指該組件屬于app的一部分,可以供其它組件使用但是本身不能打包成apk。正常一個App中可以有多個module(模塊),但是一般只會有一個module是設置為application的,其他均設置為library; 組件化開發就是要每個module都可以運行起來,因此在開發期間每個module均設置為application,發布時再進行合并。Android項目中代碼量達到一定程度,編譯將是一件非常痛苦的事情; 短則一兩分鐘,長則達到五六分鐘;隨著app業務的壯大,模塊越來越多,代碼量超10萬是很正常的。這個時候我們會遇到以下問題:
稍微改動一個模塊的一點代碼都要編譯整個工程,耗時耗力公共資源、業務、模塊混在一起耦合度太高不方便測試組件化開發可以有效降低代碼模塊的耦合度,使代碼架構更加清晰,同時模塊化的編譯可以有效減少編譯時間,當然總的編譯時間是不會減少的,只是App模塊化之后開發某個模塊時,只需要編譯特定模塊,可以快速編譯調試。通過模塊化和組件化,可以將整個應用分解為多個模塊或組件,并將其編譯成不同的二進制文件,從而實現代碼的復用和靈活性。同時,模塊化和組件化還能簡化開發流程、提高代碼質量,并使代碼更易于維護和升級。
二、模塊化、組件化和插件化簡介
在 Android 中,組件化、插件化和模塊化都是很常見的架構設計手段,用于提高應用開發的靈活性、擴展性和復用性。組件化、插件化和模塊化可以混合使用,根據項目的需求和規模選擇合適的方案。
1、模塊化
模塊化最初的目的是將同一類型的代碼整合在一起; 所以模塊的功能相對復雜,但都同屬于一個業務;不同模塊之間也會存在依賴關系; 但大部分都是業務性的互相跳轉,從地位上來說它們都是平級的。模塊化編程是一種軟件設計技術,強調將程序的功能分離為獨立的可互換模塊,因此每個模塊都包含僅執行所需功能的一個方面所需的一切。簡單來說就是:模塊化是將功能拆分,分成相互獨立的模塊,以便于每個模塊只包含與其自身功能相關的內容。
特點:
分屬同一功能/業務的代碼進行隔離(分裝)成獨立的模塊,可以獨立運行; 以頁面、功能或其他不同粒度劃分程度不同的模塊,位于業務框架層,模塊間通過接口調用,目的是降低模塊間的耦合,由之前的主應用與模塊耦合,變為主應用與接口耦合,接口與模塊耦合;模塊就像有多個USB插口的充電寶,可以和多部手機充電,接口可以隨意插拔,復用性很強,可以獨立管理; 模塊就像是獨立的功能和項目(如淘寶:注冊、登錄、購物、直播…),可以調用組件來組成模塊,多個模塊可以組合成業務框架。模塊化設計是將整個項目按照功能模塊進行拆分,在開發期間更加方便地進行分工協作。和組件化不同,模塊化并不是將業務邏輯拆分到不同的組件內部,而是將整個項目按照業務模塊進行邏輯的劃分。在實現模塊化的過程當中,可以采用以下步驟:
確定項目中每個模塊的職責和功能。使用 Gradle 等自動化工具來管理每個模塊的依賴關系。使用業務相關的命名空間來劃分代碼的功能,從而實現模塊化。定義接口或抽象類來規范模塊之間的交互,避免相互依賴。2、組件化
組件化最初的目的是代碼重用,功能相對單一或者獨立; 在整個系統的代碼層次上位于最底層,被其他代碼所依賴,所以說組件化是縱向分層。基于組件的軟件工程 (CBSE) 也稱為基于組件的發展 (CBD),是軟件工程的一個分支,它強調在給定軟件系統中提供的廣泛功能方面的關注點分離。它是一種基于重用的方法,用于定義、實現和組合松散耦合的獨立組件到系統中。這種做法旨在為軟件本身和贊助此類軟件的組織在短期和長期帶來同樣廣泛的利益。簡單來說就是:組件化就是基于可重用為目的的,將一個大的軟件系統按照分離關注點的形式,拆分多個獨立的組件,減少耦合。
組件化的核心思想是將業務拆分成獨立的模塊,利用模塊間的相互獨立性,將不同業務模塊分割成不同的組件。這樣可以提高代碼的可復用性、可維護性和可拓展性。在實際開發中,可以采用以下步驟來實現組件化:
將項目按照不同的業務模塊進行拆分。使用路由框架來實現模塊與模塊之間的跳轉(通常使用 ARouter)。采用組件化設計模式,將組件間的依賴關系進行清晰地規劃和管理,包括使用接口或抽象類定義組件的標準、使用消息機制來解耦組件之間的關系等。在代碼實現時要注意各個模塊之間的耦合度,避免出現相互依賴、難以維護的情況。特點:
把重復的代碼提取出來合并成為一個個組件,組件最重要的就是重用(復用),位于框架最底層,其他功能都依賴于組件,可供不同功能使用,獨立性強組件就像一個個小的單位,多個組件可以組合成組件庫,方便調用和復用,組件間也可以嵌套,小組件組合成大組件3、插件化
插件化是指將應用程序的一部分功能打包成一個插件,通過動態加載和卸載實現功能的增減。插件化相比于常規的 apk 開發,更加靈活,能夠動態的添加功能模塊,且不需要重新編譯打包整個應用程序,縮小了應用程序的體積。插件化的主要思想就是將應用的某些功能模塊以插件的形式動態加載到主工程中,從而實現應用動態化、組件化、靈活化、輕量化等一系列的好處。
插件化的實現步驟如下:
開發插件化應用之前,需要先寫一套基于插件化框架的核心代碼,包括插件的加載、安裝、卸載和類加載等邏輯。編寫插件模塊時,需要將代碼寫成插件模式,即將代碼和資源打包成一個 APK,并且確保插件與主工程是相互獨立、互不干擾的。主工程需要能夠動態地加載某些插件,并進行跳轉和使用。需要考慮插件與主工程之間的數據傳遞、通信和資源共享等問題,從而實現完整的插件化功能。特點:
宿主和插件分開編譯并發開發動態更新插件按需下載模塊方法數或變量數爆棚插件無需安裝即可運行延伸閱讀1:組件化開發的優點
業務模塊分開,每個模塊可以獨立開發編譯運行,解耦的同時也降低了項目的復雜度開發單個模塊時可以共享資源和工具類可以針對單個模塊測試, 開發調試時不需要對整個項目進行編譯多人合作時可以只關注自己的業務模塊,把某一業務當成單一項目來開發可以靈活的對業務模塊進行組裝和拆分