安卓模塊化開(kāi)發(fā)淺談

模塊化開(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
  • 中間層

    • 首先、分模塊肯定要按照功能分,獨(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模式。

最后編輯于
?著作權(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)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,058評(píng)論 25 709
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,273評(píng)論 6 342
  • 一、模塊化淺談 1. Android 模塊化開(kāi)發(fā)介紹; 模塊化開(kāi)發(fā)思路就是:?jiǎn)为?dú)開(kāi)發(fā)每個(gè)模塊,用集成的方式把他們組...
    路Promenade閱讀 28,011評(píng)論 31 136
  • 文/楊三兒 最近又從新拾起以前怎么也看不下去的一個(gè)作家的作品,這位作家就是王小波,剛開(kāi)始了解知道王小波是由于過(guò)分關(guān)...
    楊三兒閱讀 446評(píng)論 1 5

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