Arouter实现了大型App之间的轻耦合,降低代码的复杂度,易维护。如果不使用Arouter那么项目之前的关系可能是如下:底层模块间相互耦合,工程代码复杂度高,不便于管理。
Arouter
引入Arouter后希望底层模块间轻耦合,模块间的引用跳转交给Arouter完成,各个模块间的效果如下。
Module之间不通过依赖的关系,而是通过Arouter路由转发,App作为一个壳不实现具体功能,而是作为路由的中转,另外模块之间也可以通过Arouter相互引用。
Android项目Arouter引入
新建Android工程,新建四个模块分为App模块,base_interface模块, base_impl模块,app_setting模块。
依赖关系如下:
app_setting和base_impl间不相互依赖。将各个模块导入Arouter依赖,app作为Application,其他作为library. App模块build.gradle文件如下:
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
// kotlin/java混编
apply plugin: 'kotlin-kapt'
android {
namespace 'com.hxzlj.multi_module'
compileSdk 33
defaultConfig {
applicationId "com.hxzlj.multi_module"
minSdk 21
targetSdk 33
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
//ARouter
kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
//工程依赖
implementation project(path: ':base_impl')
implementation project(path: ':app_setting')
//Arouter
api 'com.alibaba:arouter-api:1.5.1'
kapt 'com.alibaba:arouter-compiler:1.5.1'
}
base_impl的build.gradle文件
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
android {
namespace 'com.hxzlj.base_impl'
compileSdk 33
defaultConfig {
minSdk 21
targetSdk 33
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
//ARouter
kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
api project(path: ':base_interface')
api 'com.alibaba:arouter-api:1.5.1'
kapt 'com.alibaba:arouter-compiler:1.5.1'
}
必须注意, androidx必须要有
android.enableJetifier=true
。工程的gradle.properties中。