前言
一般解决不同模块中的Activity跳转需要相互依赖,如此将产生严重的耦合,失去了划分module的意义。 可以自己根据需要设计跳转router,也可以直接使用arouter第三方依赖实现,在实现过程中会产生较多的问题,本文将给出基本步骤及解决办法。
1.kotlin配置基础步骤
以下步骤主要以Kotlin语言环境为基础。首先在项目app或其他命名的模块下的build.gradle中添加以下内容
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'
kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
dependencies {
api 'com.alibaba:arouter-api:1.5.0'
kapt 'com.alibaba:arouter-compiler:1.2.2'
}
这是其他博客中描述的通用配置,但是这样做会出现一个错误:
- org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin [id 'kotlin-kapt']
- org.gradle.api.GradleException: Kotlin plugin should be enabled before 'kotlin-kapt'
很显然是配置引入的错误,正确做法:改变apply plugin: 'kotlin-kapt'加载的顺序,而且以下内容在每个需要配置@Route模块中的build.gradle都需要配置。
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
...
}
kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
dependencies {
implementation project(':base')
kapt 'com.alibaba:arouter-compiler:1.2.2'
}
注:api 'com.alibaba:arouter-api:1.5.0'已在base模块中引用;
2.Java配置基础步骤
很多博客针对是否使用 arg("AROUTER_MODULE_NAME", project.getName())还是arguments = [ moduleName : project.getName() ] 会引发模块不能找到的错误 ,正解:同样每个需要引用到@Router,都需要添加以下内容。
android {
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = [moduleName: project.getName()]
}
}
}
}
dependencies {
implementation project(':base')
implementation 'com.alibaba:arouter-api:1.5.0'
annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'
}
3.初始化
初始化在根Application,以下为kotlin语言。
class BaseApplication :Application(){
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) {
ARouter.openLog()
ARouter.openDebug()
}
ARouter.init(this)
}
}
4.关于编译
apt,annotationProcessor