組件化開發能夠提升團隊長期效率,即便只有一我的。android
承上 【掘金】Android組件化模塊化在移動應用開發中 (序)app
去限制每一個library只依賴框架代碼併爲其添加統一的調試外殼代碼,而不是變身app,浪費轉換時間,也不須要寫兩份清單文件。框架
在此以前簡單熟悉一下Gradle能使你的項目構建更快;模塊化
Gradle項目的構建分爲三個階段:初始化、配置、執行。在調試時,只去加載須要調試或聯合調試的 Module 這樣去提升一點構建速度。組件化
Gradle在初始化階段會首先去查找setting.gradle
文件,查找的規則以下:post
setting.gradle
文件。master
目錄查找。settings.gradle
中是否有定義。若是沒有,則進行單項目構建,不然進行多項目構建。多項目工程在根目錄必須存在setting.gradle
文件,單項目工程則能夠不須要這個文件。gradle
咱們在這個文件內去配置須要調試開發的Libraryui
include ':app'
//必要的
include ':必要的xxx'
//殼app 要加載的Library
gradle.ext.isAppMap =
[/** -1 剔除; 0 libaray; 1 APP*/
':佔位' : -2,
':libraryA': 0,
':libraryB': -1,
]
gradle.ext.isDebug = true
gradle.ext.debugModelApp = false
for (String libraryName : gradle.ext.isAppMap.keySet()) {
if... 決定是否要加載libaray
}
複製代碼
app的build.gradlelua
...
dependencies {
...
for (String modelName : gradle.ext.isAppMap.keySet()) {
if (gradle.ext.isDebug) {
if (gradle.ext.isAppMap.get(modelName) == 0) {
implementation project(modelName)
}
} else {
implementation project(modelName)
}
}
}
複製代碼
每一個library的build.gradlespa
switch (rootProject.getLoadType(getName())) {
case -1:
return
case 0:
apply plugin: 'com.android.library'
break
}
複製代碼
新建config.gradle
ext {
android = [
compileSdkVersion : 29,
......
]
}
def config = rootProject.ext.android
//相關庫依賴
subprojects {
afterEvaluate { mProject ->
if (mProject.hasProperty('android')) {
android {
compileSdkVersion config.compileSdkVersion
......
defaultConfig {
if (mProject.getName().equals('app')) {
applicationId "applicationId"
}
minSdkVersion config.minSdkVersion
targetSdkVersion config.targetSdkVersion
}
}
}
dependencies {
}
}
}
複製代碼
在根項目build.gradle
apply from: "config.gradle"
複製代碼
這樣,新建一個Module 基本不須要配置其餘,就能夠在該Modulen內去實現代碼,不一樣library頁面跳轉使用ARouter等。
... 未完待續...