隨着項目不斷的迭代 , 代碼愈來愈臃腫 , 人員也愈來愈多 , 同時在一個 module 中共同開發 , 首先來講維護成本極高 , 不易管理擴展 , 如今就有了模塊化的思想 , 把模塊之間共用的代碼(網絡框架, 圖片框架, 異步框架, 日誌框架, 顯示小部件 View 等),不一樣的功能。抽取成單獨的 core module 和多個功能 module 。這樣每一個人負責本身的 module 開發,便於管理,協同開發。java
當 module 愈來愈多,這又出現了一個問題,編譯時間很長,爲了解決這個問題,最後把每一個 module 作成可配置,支持單獨調試,大大的提高了開發效率。android
在項目中根據不一樣的功能需求,和共用的代碼抽取出來,造成單獨的 module , 這就是模塊化。git
組件化是創建在模塊化思想上的一次升級,一個變種。組件化原本就是模塊化的概念,只是具備可變性,在線上環境是 module lib , debug 環境是 application 。組件化的單位是 applicationgithub
其實插件化也是基於模塊化的思想,將一個完整的工程,按業務劃分爲不一樣的插件,來化整爲零,相互配合。插件化的單位是 apk , 能夠實現對 apk 的動態加載,更新,比組件化更靈活。bash
在實現以前咱們先來看下最終效果吧網絡
目錄結構:app
效果:框架
1.1 項目 build.gradle 配置是否須要單獨調試環境異步
ext {
// extend
// false: 組件模式
// true :集成模式
isModule = false
}
複製代碼
1.2 module 中 build.gralde 配置模塊化
//根據isModule標籤動態的切換 集成/組件模式
if (isModule){
apply plugin: 'com.android.library'
}else{
apply plugin: 'com.android.application'
}
複製代碼
android{
...
defaultConfig {
//資源配置
sourceSets{
main{
//在組件模式下 使用不一樣的manifest文件
if(!isModule){
manifest.srcFile 'src/main/module/AndroidManifest.xml'
java.srcDirs 'src/main/module/java','src/main/java'
}else{
manifest.srcFile 'src/main/AndroidManifest.xml'
}
}
}
}
...
}
複製代碼
切換以後就能夠單獨運行了。
將不一樣業務代碼抽離成單獨的 module,而後在宿主 APP 中根據調試環境依賴。
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) if (isModule) {
//對代碼跟資源進行隔離
runtimeOnly project(path: ':modulea') runtimeOnly project(path: ':moduleb') } } 複製代碼
這裏若是有人對依賴方式不瞭解的話,能夠看下面這張表
這裏用到了個人輕量級 YEventBus 通訊框架,若是想詳細瞭解怎麼使用和原理的能夠看下我以前寫的這篇文章輕量級 EventBus 框架,根據 TAG 發送接收事件
UI 跳轉框架這裏我沒有本身寫,用的 alibaba 開源的組件化路由框架 ARouter
到這裏我相信你們對組件化已經有了必定的瞭解, 咱們已經把組件化的模型搭建好了,如今能夠根據本身的業務需求搭建一套屬於本身項目上的組件化框架。
文章中全部代碼已上傳 GitHub YKComponent