Android組件化基礎(chǔ)框架配置

新建的Module以Android Library 的形式新建

  1. main組件的gradle文件中,apply plugin使用的是com.android.application


    image.png
  2. 其他業(yè)務(wù)模塊(組件A猖毫、組件B泉哈、組件C璧榄、組件D、common組件等)督笆,apply plugin使用的是com.android.library


    image.png

組件集成

  1. 各個(gè)組件都建立完成之后处渣,接下來(lái)可以把組件集成到main組件中伶贰,集成非常簡(jiǎn)單,只需在main組件的gradle文件中添加dependencies{}配置罐栈,添加如下語(yǔ)句:
image.png

組件資源共享

1黍衙、在common組件的build.gradle文件中,添加android 配置荠诬,如下:

android {
    //common組件下面添加
    repositories {
        flatDir {
            dirs 'libs'
        }
    }
}

在各個(gè)需要調(diào)用公共common組件的組件build.gradle文件中琅翻,也添加android 配置,如下:

android {
    //common組件下面添加
    repositories {
        flatDir {
            dirs '../common/libs/', 'libs'
        }
    }
}

2柑贞、common組件里引入各種類庫(kù)的時(shí)候必須用api方椎,而不是用implementation,原因:

implementation編譯的依賴只作用于當(dāng)前的module钧嘶,即common組件模塊中使用implementation編譯的三方庫(kù)只對(duì)common模塊起作用棠众,main組件模塊中無(wú)法使用該三方庫(kù)。

image.png

3有决、關(guān)于組件資源共享闸拿,舉個(gè)簡(jiǎn)單示例:例如圖片都是存放到公共的common組件的res里,那么如何在組件A疮薇、組件B胸墙、組件C里使用呢?


image.png

使用方法如下:

  • 打開各組件的build.gradle文件按咒,在dependencies{}里添加如下代碼
dependencies {
    
    ...
 
    implementation project(':common')
{

-如此一來(lái)迟隅,就能在組件A里調(diào)用common組件的圖片資源了


image.png

同樣的道理, 組件A励七、 組件B智袭、 組件C的顏色代碼也可以直接調(diào)用公共common組件里colors.xml的代碼


image.png

我們可以把其他第三方庫(kù)、自定義view掠抬、工具類吼野、公用資源都放進(jìn)公共common組件里,也就是說(shuō)組件A两波、組件B瞳步、組件C里build.gradle所引入的類庫(kù),都可以放到common組件里的dependencies{}里

所以各個(gè)業(yè)務(wù)組件里面的build.gradle文件的dependencies{}配置簡(jiǎn)化后腰奋,就變成了下面這樣:

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation project(':common')
}

通過(guò)以上解說(shuō)单起,大家應(yīng)該都明白了吧,圖片劣坊、xml這些(value目錄下的各種xml文件)嘀倒,都可以放到公共common組件里,然后再被其他組件引用。對(duì)于全局共用的style.xml文件测蘑,我們更應(yīng)該把它放在common組件中灌危,例如我們的項(xiàng)目theme,本來(lái)是放在main組件的style里面碳胳,我們可以把它移到common中勇蝙,這樣其他組件調(diào)試時(shí),作為一個(gè)單獨(dú)的項(xiàng)目固逗,也能和主項(xiàng)目有一樣的主題浅蚪。總而言之烫罩,所有你認(rèn)為可以被各個(gè)組件共享的資源,都可以放在common組件中洽故。

往組件里添加Fragment

1贝攒、以組件D為例,在組件D里添加一個(gè)包fragment

2时甚、在fragment包右鍵 → New → Fragment →Fragment(Blank)

3隘弊、 填寫Fragment碎片名稱,勾選創(chuàng)建xml文件荒适,如下:

各個(gè)組件單獨(dú)開發(fā)(測(cè)試)

組件單獨(dú)開發(fā)時(shí)梨熙,我們需要改build.gradle的apply plugin模式,等要集成到main組件時(shí)刀诬,又得改回來(lái)咽扇,如果這樣子手工去改,組件一多陕壹,修改起來(lái)比較麻煩质欲,也不優(yōu)雅。優(yōu)雅的解決辦法就是設(shè)置一個(gè)開關(guān)糠馆,打開時(shí)嘶伟,就是application模式,可以單獨(dú)開發(fā)又碌;關(guān)閉時(shí)九昧,就是library模式,可以集成到main組件中”显龋現(xiàn)在按我下面的步驟來(lái)實(shí)現(xiàn):

1铸鹰、在項(xiàng)目根目錄下,有一個(gè)build.gradle文件期揪,在這個(gè)文件最末尾添加一個(gè)ext {}配置掉奄,然后在ext配置里設(shè)定一個(gè)常量isDebug,值設(shè)為true


image.png

2、build.gradle里設(shè)置了isDebug常量后姓建,我們項(xiàng)目中的其他build.gradle文件都可以把這個(gè)常量讀取出來(lái)诞仓,所以我們可以在其他組件的build.gradle文件中,讀取該常量的值速兔,動(dòng)態(tài)設(shè)置apply plugin墅拭,代碼如下:

if(isDebug){
    apply plugin: 'com.android.application'
}else {
    apply plugin: 'com.android.library'
}

3、這樣子設(shè)置之后涣狗,當(dāng)我們需要切換模式時(shí)谍婉,只需要修改項(xiàng)目根目錄下build.gradle文件中isDebug常量的值,修改完成之后镀钓,點(diǎn)擊Project sync按鈕同步一下即可穗熬。如果有報(bào)錯(cuò),那么還有個(gè)地方需要修改一下丁溅,就是main組件的build.gradle文件唤蔗,我們把module的模式改成了application,main組件就不能引入application窟赏,引入的話就會(huì)報(bào)錯(cuò)妓柜,所以當(dāng)是debug調(diào)試模式時(shí),這里就不引入該組件涯穷,以免報(bào)錯(cuò)棍掐。所以在集成組件前,要先判斷是什么模式拷况,如下圖:


image.png

4作煌、接下來(lái)還得修改 AndroidManifest.xml,當(dāng)把一個(gè)module設(shè)置為application時(shí)蝠嘉,AndroidManifest.xml需要包含一個(gè)app所需要的屬性最疆,例如app的icon、theme蚤告、launch Activity這些屬性設(shè)置努酸,而當(dāng)module為library時(shí),這些屬性就都不需要用到杜恰,所以當(dāng)我們處于不同模式時(shí)获诈,AndroidManifest.xml文件的配置也得不同。方法如下:

(1)心褐、Android目錄模式切換到Project目錄模式
(2)舔涎、 在各個(gè)組件的src文件夾中新創(chuàng)建一個(gè)debug目錄,再把我們用于debug調(diào)試的AndroidManifest.xml文件放進(jìn)去


image.png

(3)逗爹、調(diào)試用的AndroidManifest.xml文件可以直接復(fù)制manifests目錄里的亡嫌,然后添加application的基本信息嚎于,如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.moudeld">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
    </application>
</manifest>

以上內(nèi)容會(huì)有很多錯(cuò)誤提示,其實(shí)提示的無(wú)非就是資源找不到挟冠,既然前面我們已經(jīng)創(chuàng)建了公共的common組件于购,那么我們只需要把main組件中相應(yīng)的資源移動(dòng)到common組件中就可以了

5、接下來(lái)在各個(gè)組件的build.gradle文件中知染,指定不同模式下使用的AndroidManifest.xml文件肋僧,在android {}里添加如下代碼:

sourceSets {
        main {
            if (isDebug) {
                manifest.srcFile 'src/debug/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/AndroidManifest.xml'
                //集成開發(fā)模式下排除debug文件夾中的所有Java文件
                java {
                    exclude 'debug/**'
                }
            }
        }
    }
image.png

統(tǒng)一項(xiàng)目版本號(hào)
各個(gè)組件的build.gradle文件中,有很多版本號(hào)控淡。為了避免每次修改都得同時(shí)修改多份build.gradle文件嫌吠,也避免不同的組件使用的版本不一樣,導(dǎo)致沖突掺炭,所以我們可以把這些版本號(hào)統(tǒng)一管理起來(lái)辫诅,方法如下:

1、在項(xiàng)目根目錄下的build.gradle文件中涧狮,定義版本號(hào)常量


image.png

2泥栖、然后在各個(gè)組件的build.gradle文件中,做這樣的修改:

android {
    compileSdkVersion rootProject.ext.android.compileSdkVersion
    buildToolsVersion rootProject.ext.android.buildToolsVersion

    defaultConfig {
        minSdkVersion rootProject.ext.android.minSdkVersion
        targetSdkVersion rootProject.ext.android.targetSdkVersion
        versionCode rootProject.ext.android.versionCode
        versionName rootProject.ext.android.versionName
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末勋篓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子魏割,更是在濱河造成了極大的恐慌譬嚣,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钞它,死亡現(xiàn)場(chǎng)離奇詭異拜银,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)遭垛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門尼桶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人锯仪,你說(shuō)我怎么就攤上這事泵督。” “怎么了庶喜?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵小腊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我久窟,道長(zhǎng)秩冈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任斥扛,我火速辦了婚禮入问,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己芬失,他們只是感情好楣黍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著麸折,像睡著了一般锡凝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上垢啼,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天窜锯,我揣著相機(jī)與錄音,去河邊找鬼芭析。 笑死锚扎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的馁启。 我是一名探鬼主播驾孔,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼惯疙!你這毒婦竟也來(lái)了翠勉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤霉颠,失蹤者是張志新(化名)和其女友劉穎对碌,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒿偎,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡朽们,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诉位。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骑脱。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖苍糠,靈堂內(nèi)的尸體忽然破棺而出叁丧,到底是詐尸還是另有隱情,我是刑警寧澤椿息,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布歹袁,位于F島的核電站,受9級(jí)特大地震影響寝优,放射性物質(zhì)發(fā)生泄漏条舔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一乏矾、第九天 我趴在偏房一處隱蔽的房頂上張望孟抗。 院中可真熱鬧迁杨,春花似錦、人聲如沸凄硼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)摊沉。三九已至狐史,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間说墨,已是汗流浹背骏全。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尼斧,地道東北人姜贡。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像棺棵,于是被迫代替她去往敵國(guó)和親楼咳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一烛恤、概念 組件化:把一個(gè)功能完整的App或模塊拆分成多個(gè)子模塊母怜,每個(gè)子模塊可以獨(dú)立編譯和運(yùn)行,也可以任意組合成另一...
    TomyZhang閱讀 937評(píng)論 0 1
  • 問(wèn)題 在已經(jīng)開發(fā)過(guò)幾個(gè)項(xiàng)目的童鞋,如果這時(shí)需要重新開發(fā)一個(gè)新項(xiàng)目,是否需要自己重新搭建框架呢,還是從老項(xiàng)目中拷貝粘...
    8ba406212441閱讀 43,057評(píng)論 84 381
  • Android組件化項(xiàng)目地址:Android組件化項(xiàng)目AndroidModulePattern Android組件...
    半灬邊灬天閱讀 2,921評(píng)論 4 37
  • 框架地址:https://github.com/geduo83/FlyTour FlyTour是Android組件...
    門心叼龍閱讀 2,977評(píng)論 1 40
  • 首先缚柏,談?wù)劄槭裁匆獙戇@個(gè)系列的文章糙申,嚴(yán)格來(lái)說(shuō)是一段學(xué)習(xí)組件化的筆記。 很多小伙伴都了解組件化船惨,也學(xué)習(xí)過(guò),但是像我這...
    軻葉閱讀 570評(píng)論 0 12