含有多個 Gradle 模組的專案稱為多模組專案。本指南包含開發多模組 Android 應用程式的最佳做法和建議模式。
程式碼集不斷擴增的問題
由於程式碼集不斷擴增,隨著時間過去,擴充性、可讀性和整體程式碼品質通常會逐漸下降。這是因為程式碼集的規模增加,但沒有維護人員採取主動措施來實行易於維護的結構。模組化是一種建構程式碼集的方式,能提升可維護性,並避免上述問題。
什麼是模組化?
模組化是將程式碼集整理成鬆耦合和獨立部分的做法。每個部分都是一個模組,而每個模組都是獨立的,具有明確用途。將問題分成幾個較易解決的小部分,就能降低設計和維護大型系統的複雜度。

模組化的優點
模組化的優點有很多,但主要在於提升程式碼集的可維護性和整體品質。下表摘要說明主要優點。
好處 | 摘要 |
---|---|
複用性 | 藉由模組化,您可以共用程式碼,並從同一個基礎建構多個應用程式。模組可有效建構區塊。應用程式應是功能的總和,而功能會歸類成獨立的模組。特定模組提供的功能不一定會在特定應用程式中啟用。舉例來說,:feature:news 可以是完整版變種版本和 Wear 應用程式的一部分,但不能是試用版變種版本的一部分。 |
嚴格控管瀏覽權限 | 您可以利用模組輕鬆控管對程式碼集其他部分公開的內容。公開介面以外的任何內容均可標示為 internal 或 private ,這樣就能避免在模組外使用。 |
可自訂提供方式 | Play Feature Delivery 會使用應用程式套件的進階功能,方便您依條件或隨選方式提供應用程式的特定功能。 |
模組化的優點只能透過模組化程式碼集實現。 使用其他技術或許也能享有下列優點,但模組化功能可進一步強制實現這些優點。
好處 | 摘要 |
---|---|
擴充性 | 在緊耦合的程式碼集中,單一變更可能會在看似不相關的多個程式碼部分中,觸發一連串變更。經過適當模組化的專案會謹守關注點分離原則,進而限制耦合。這個做法能給予貢獻者更高的自主能力。 |
擁有權 | 除了提供自主能力以外,模組也可用來賦予責任。模組可設立一位專屬擁有者,負責維護程式碼、修正錯誤、新增測試及審查變更。 |
封裝 | 封裝是指程式碼各部分對於其他部分的認知,應維持在最低限度。獨立的程式碼更容易閱讀及理解。 |
可測試性 | 可測試性是指測試程式碼的方便程度。如果程式碼集中的元件能輕鬆在獨立狀態下進行測試,就稱為可測試的程式碼集。 |
建構時間 | 部分 Gradle 功能可利用模組化的特性提升建構效能,這類功能包括漸進式建構、建構快取或平行建構。 |
常見陷阱
程式碼集的精細程度是指組成程式碼集的模組精細程度。程式碼集越精細,含有的模組越多也越小。設計模組化程式碼集時,應決定精細程度,並考量程式碼集的大小和相對的複雜度。過於精細會導致負擔加重,過於粗略則會降低模組化的優勢。
一些常見陷阱如下:
- 過於精細:每個模組都會增加建構複雜度和樣板程式碼,帶來一定程度的負擔。複雜的建構設定會導致難以在各模組間保持一致的設定。樣板程式碼過多會導致程式碼集變得冗贅,因而難以維護。如果負擔抵消了提升擴充性帶來的好處,請考慮合併部分模組。
- 過於粗略:反之,如果模組過大,最終就又等於是單體,失去了模組化的好處。舉例來說,在小型專案中,您可以將資料層放入單一模組。但隨著規模擴增,可能需要將存放區和資料來源分割為獨立模組。
- 太過複雜:將專案模組化不一定是合理做法,這主要取決於程式碼集大小。如果您預計專案數量不會增加至超過特定閾值,那麼擴充性和建構時間增長的情形就不會發生。
我適合使用模組化技術嗎?
如要享受重複使用程式碼、嚴格控制瀏覽權限或採用 Play Feature Delivery 所帶來的優點,就必須使用模組化技術。如果不需要以上功能,但仍想提升擴充性、擁有權、封裝或建構時間,不妨嘗試模組化。
範例
- Now in Android:功能全面的 Android 應用程式,包含模組化功能。
- 多模組架構範例