組件化
項目需求的不斷變更,項目越來越大,代碼越來越臃腫,耦合度越來越高,導致開發效率下降。爲了解決這一問題,最開始模塊化,劃分爲多個模塊進行開發,由於項目過大,每次打包編譯特別慢,測試不方便,然後對每個模塊進行拆分,實現組件化。
這樣做的一個好處,各個業務組件可以單獨拿出來測試,減少了每次打包時的編譯耗費時間,開發人員可以單獨負責自己的業務組件。
組件各個模塊配置
android studio 提供了一個工程下創建多個module,我們怎麼樣使這些module在app module下進行插拔式。
保證在每個module的build.gradle中可以調用一個變量,可以在項目工程的gradle.properties文件中頂一個變量如:
isModule=false
在業務模塊的build.gradle中的配置如下:
if (isModule.toBoolean()) {
apply plugin: 'com.android.application'//可以單獨打包成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')
}
同時業務模塊的項目結構如下: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')
}
跨模塊跳轉(路由)
由於各個功能在各組件模塊中,這就導致Activity之間跨模塊跳轉,這樣有兩種方式,1.通過包名,可以跳轉到另一個模塊的activity,2.通過路由,使用阿里巴巴的ARouter。
ARouter的功能:
支持直接解析標準URL進行跳轉,並自動注入參數到目標頁面中
支持多模塊工程使用
支持添加多個攔截器,自定義攔截順序
支持依賴注入,可單獨作爲依賴注入框架使用
支持InstantRun
支持MultiDex(Google方案)
映射關係按組分類、多級管理,按需初始化
支持用戶指定全局降級與局部降級策略
頁面、攔截器、服務等組件均自動註冊到框架
支持多種方式配置轉場動畫
支持獲取Fragment
完全支持Kotlin以及混編(配置見文末 其他#5)
支持第三方 App 加固(使用 arouter-register 實現自動註冊)
支持生成路由文檔
提供 IDE 插件便捷的關聯路徑和目標類
對於Arouter的配置:
在基模塊中進行配置:
//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()]
}
}