模塊化開(kāi)發(fā)適合于大型項(xiàng)目中多人協(xié)同開(kāi)發(fā),每個(gè)人獨(dú)立開(kāi)發(fā)某個(gè)模塊,單獨(dú)測(cè)試,單獨(dú)維護(hù),最終以library或者aar或者module的形式被應(yīng)用層module依賴(lài)

image.png
這是一張模塊化開(kāi)發(fā)的分層圖片

module.png
命名建議:
1.底層:Library
2.中間層:Module + 業(yè)務(wù)或功能名字
3.上層:App + 項(xiàng)目名字
建議分層進(jìn)行
-
底層:包含基礎(chǔ)庫(kù)和底層庫(kù)
- 基礎(chǔ)庫(kù):
包含所有模塊需要的依賴(lài)庫(kù),以及一些工具類(lèi),比如封裝了的常用網(wǎng)絡(luò)請(qǐng)求,封裝圖片處理fresco,數(shù)據(jù)庫(kù)相關(guān)等,還包含所有模塊需要的依賴(lài)庫(kù); - 底層庫(kù):
主要是使用C/C++開(kāi)發(fā)的跨平臺(tái)的引擎或者庫(kù),以so的形式存在。例如:游戲引擎cocos2d
- 基礎(chǔ)庫(kù):
-
中間層
- 首先、分模塊肯定要按照功能分,獨(dú)立的一個(gè)功能,不能雜。比如、更新、登錄、分享、播放,都可以。
- 其次、我采取aar的形式作為模塊的最小單位,為什么是aar不是jar,更不是library,因?yàn)閖ar不能帶資源只能帶java代碼,library的話太容易被修改了,aar的好處是能帶資源并且是編譯好的,不能被修改。保證了模塊的版本不會(huì)在被別人調(diào)用的時(shí)候隨意修改,如果想修改就要聯(lián)系做aar的人,讓他去升級(jí)aar的版本。
用android studio,打aar用maven;aar其實(shí)就是依賴(lài),只不過(guò)之前的依賴(lài)都是存到了maven遠(yuǎn)程庫(kù)里,自己用的話可以自己建和私有的maven庫(kù),太蠻煩的話可以直接用本地的aar文件做依賴(lài)。
上層
將所有的業(yè)務(wù)模塊聚合在一起,加上配置,形成主應(yīng)用,一個(gè)模塊化做的好的應(yīng)用,主應(yīng)用應(yīng)該很簡(jiǎn)單,并且非常的穩(wěn)定。
模塊化開(kāi)發(fā)最容易出現(xiàn)的就是依賴(lài)沖突,以下是解決依賴(lài)沖突的一些建議
1.例如上面的項(xiàng)目,moduleA和moduleB都被app層依賴(lài),而moduleA和moduleB都有如下資源
<resources>
...
<string name="confim">點(diǎn)擊確認(rèn)</string>
...
</resources>
app層中引用
// app模塊
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="30dp"
android:text="@string/confim"
/>
此時(shí)如果編譯app,則app就會(huì)報(bào)資源名稱(chēng)沖突
解決辦法比較容易,每個(gè)子模塊給資源名添加前綴,具體做法是在每個(gè)子模塊的build.gradle文件的android塊內(nèi)添加一行代碼:resourcePrefix “資源名前綴”:
// moduleA模塊的build.gradle文件
...
android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
resourcePrefix "module_A"
...
}
...
// moduleB模塊的build.gradle文件
...
android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
resourcePrefix "module_B"
...
}
...
此時(shí)還不行,還需要我們手動(dòng)去改一下資源名稱(chēng),給前面加上前綴
// moduleA模塊
<resources>
...
<string name="moduleA">confim</string>
...
</resources>
// moduleB模塊
<resources>
...
<string name="moduleB">confim</string>
...
</resources>
2.重復(fù)依賴(lài)
Error:Module 'qsp_release:libLive:unspecified' depends on one or more Android Libraries but is a jar
1.方法一:
通過(guò)gradle配置
dependencies { provided fileTree(dir: 'libs', include: ['*.jar'])}
2.方式二:
右鍵module選擇open module setting,選擇要修改的module名,切換到dependencies頁(yè)面,將要修改的jar的scope修改provided模式。