組件化
項(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()]
}
}