Android組件化開發(fā)初探

組件化

項(xiàng)目需求的不斷變更,項(xiàng)目越來越大坝辫,代碼越來越臃腫篷就,耦合度越來越高,導(dǎo)致開發(fā)效率下降近忙。為了解決這一問題竭业,最開始模塊化,劃分為多個模塊進(jìn)行開發(fā)及舍,由于項(xiàng)目過大未辆,每次打包編譯特別慢,測試不方便锯玛,然后對每個模塊進(jìn)行拆分咐柜,實(shí)現(xiàn)組件化。


在這里插入圖片描述

這樣做的一個好處攘残,各個業(yè)務(wù)組件可以單獨(dú)拿出來測試炕桨,減少了每次打包時的編譯耗費(fèi)時間,開發(fā)人員可以單獨(dú)負(fù)責(zé)自己的業(yè)務(wù)組件肯腕。

組件各個模塊配置

android studio 提供了一個工程下創(chuàng)建多個module,我們怎么樣使這些module在app module下進(jìn)行插拔式献宫。


在這里插入圖片描述

保證在每個module的build.gradle中可以調(diào)用一個變量,可以在項(xiàng)目工程的gradle.properties文件中頂一個變量如:

isModule=false

在業(yè)務(wù)模塊的build.gradle中的配置如下:

if (isModule.toBoolean()) {
    apply plugin: 'com.android.application'//可以單獨(dú)打包成apk
} else {
    apply plugin: 'com.android.library'
}
android {
    compileSdkVersion 28
    defaultConfig {
        if (isModule.toBoolean()) {
            applicationId "com.example.infoapplication"
        }
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }
    }
    sourceSets {
        main {
            if (isModule.toBoolean()) {
                manifest.srcFile 'src/main/release/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    implementation 'com.android.support:appcompat-v7:28.0.0'
    //Arouter
    annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'
    implementation project(':mylibrary')
}

同時業(yè)務(wù)模塊的項(xiàng)目結(jié)構(gòu)如下:AndroidManifest.xml加載方式見sourceSets 实撒。


在這里插入圖片描述

而app殼下的文件配置如下:

dependencies {
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    if (姊途!isModule.toBoolean()) {
        implementation project(':shopcomponent')
        implementation project(':infoapplication')
    } 
    implementation project(':mylibrary')
}

跨模塊跳轉(zhuǎn)(路由)

由于各個功能在各組件模塊中,這就導(dǎo)致Activity之間跨模塊跳轉(zhuǎn)知态,這樣有兩種方式捷兰,1.通過包名,可以跳轉(zhuǎn)到另一個模塊的activity负敏,2.通過路由贡茅,使用阿里巴巴的ARouter。
ARouter的功能:
支持直接解析標(biāo)準(zhǔn)URL進(jìn)行跳轉(zhuǎn)其做,并自動注入?yún)?shù)到目標(biāo)頁面中
支持多模塊工程使用
支持添加多個攔截器顶考,自定義攔截順序
支持依賴注入,可單獨(dú)作為依賴注入框架使用
支持InstantRun
支持MultiDex(Google方案)
映射關(guān)系按組分類妖泄、多級管理驹沿,按需初始化
支持用戶指定全局降級與局部降級策略
頁面、攔截器蹈胡、服務(wù)等組件均自動注冊到框架
支持多種方式配置轉(zhuǎn)場動畫
支持獲取Fragment
完全支持Kotlin以及混編(配置見文末 其他#5)
支持第三方 App 加固(使用 arouter-register 實(shí)現(xiàn)自動注冊)
支持生成路由文檔
提供 IDE 插件便捷的關(guān)聯(lián)路徑和目標(biāo)類
對于Arouter的配置:
在基模塊中進(jìn)行配置:

    //arouter  https://github.com/alibaba/ARouter
    api 'com.alibaba:arouter-api:1.4.1'
    annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'

javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }

同時在各個子組件模塊中添加:(由于Arouter以注解的形式)

annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'

javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }

示例代碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末渊季,一起剝皮案震驚了整個濱河市朋蔫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌却汉,老刑警劉巖驯妄,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異合砂,居然都是意外死亡青扔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門既穆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人雀鹃,你說我怎么就攤上這事幻工。” “怎么了黎茎?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵囊颅,是天一觀的道長。 經(jīng)常有香客問我傅瞻,道長踢代,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任嗅骄,我火速辦了婚禮胳挎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘溺森。我一直安慰自己慕爬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布屏积。 她就那樣靜靜地躺著医窿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪炊林。 梳的紋絲不亂的頭發(fā)上姥卢,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機(jī)與錄音渣聚,去河邊找鬼独榴。 笑死,一個胖子當(dāng)著我的面吹牛奕枝,可吹牛的內(nèi)容都是我干的括眠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼倍权,長吁一口氣:“原來是場噩夢啊……” “哼掷豺!你這毒婦竟也來了捞烟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤当船,失蹤者是張志新(化名)和其女友劉穎题画,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體德频,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡苍息,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了壹置。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竞思。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖钞护,靈堂內(nèi)的尸體忽然破棺而出盖喷,到底是詐尸還是另有隱情,我是刑警寧澤难咕,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布课梳,位于F島的核電站,受9級特大地震影響余佃,放射性物質(zhì)發(fā)生泄漏暮刃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一爆土、第九天 我趴在偏房一處隱蔽的房頂上張望椭懊。 院中可真熱鬧,春花似錦步势、人聲如沸灾搏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狂窑。三九已至,卻和暖如春桑腮,著一層夾襖步出監(jiān)牢的瞬間泉哈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工破讨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丛晦,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓提陶,卻偏偏與公主長得像烫沙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子隙笆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

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