Android項(xiàng)目組件化編程和多渠道編程的結(jié)合案例

我曾經(jīng)在 Android Studio下使用Gradle,進(jìn)行多版本代碼管理的示例 這邊文章中,分析過(guò)如何使用同一套代碼,并行開(kāi)發(fā)幾套差異化項(xiàng)目的解決方案。但如果要在這個(gè)基礎(chǔ)上,對(duì)項(xiàng)目進(jìn)行組件化呢?

項(xiàng)目地址 https://github.com/Jasonchenlijian/AndroidModuleVariantsDemo

需求

  1. 一套代碼分成不同的分支版本,在同一個(gè)工程下同時(shí)管理這幾個(gè)版本。
  2. 將整個(gè)項(xiàng)目拆分成幾個(gè)模塊,每個(gè)模塊可以獨(dú)立開(kāi)發(fā)調(diào)試,即組件化。

解決方案

1 工程結(jié)構(gòu)

根據(jù)功能將項(xiàng)目拆分成幾個(gè)模塊,原則上有3類(lèi)模塊。


image.png
1.1 app

主項(xiàng)目模塊。

1.2 module_a,module_b,module_main
  1. module_main是必須的,一般是項(xiàng)目的啟動(dòng)頁(yè)、主頁(yè)相關(guān)的頁(yè)面功能。當(dāng)項(xiàng)目從模塊模式切換到整體模式的時(shí)候,app也是以moudle_main為頁(yè)面入口的,可以說(shuō)這是一個(gè)特殊的子模塊。
  2. module_a和module_b是項(xiàng)目根據(jù)獨(dú)立的功能拆分成的子模塊,根據(jù)實(shí)際情況,這種子模塊可以有很多個(gè)。
1.3 lib_common

library模塊,一些通用的工具類(lèi),資源文件,第三方依賴都放在這個(gè)模塊中。這個(gè)模塊被其他所有模塊所依賴。

2 Gradle配置

2.1 app

image.png

在productFlavors中聲明兩個(gè)渠道,flavorsOne和flavorsTwo,分別配置其applicationId,最終項(xiàng)目打包出來(lái)的app只有這兩個(gè)渠道。

另外聲明configuration,將兩個(gè)渠道的添加。dependencies中依賴相應(yīng)的子模塊的時(shí)候,將每個(gè)渠道分別依賴。

注意在defaultConfig 中聲明 flavorDemensions

2.2 module_a,module_b,module_main
image.png

這三個(gè)模塊的dependencies都需要依賴lib_common模塊以及路由庫(kù)。


image.png

[圖片上傳中...(image.png-fe9cdc-1517555677434-0)]

根據(jù)是否為組件狀態(tài),配置sourceSet,以及productFalvors。注意publishNonDefault設(shè)置為ture。

2.3 lib_common
image.png

lib_common非常簡(jiǎn)單,是一個(gè)基層的依賴模塊,被除了APP以外的其他模塊所依賴。

3 組件模式和集成模式的切換

image.png

gradle.properties中配置變量isMoudle,用于切換組件模式和集成模式。在組件模式下,你可以將某一個(gè)模塊單獨(dú)作為一個(gè)APP運(yùn)行。


image.png

組件或集成模式下,對(duì)某一個(gè)模塊也可以運(yùn)行不同的渠道APP。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容