前言
通常解決不一樣模塊中的Activity跳轉須要相互依賴,如此將產生嚴重的耦合,失去了劃分module的意義。 能夠本身根據須要設計跳轉router,也能夠直接使用arouter第三方依賴實現,在實現過程當中會產生較多的問題,本文將給出基本步驟及解決辦法。java
1.kotlin配置基礎步驟
如下步驟主要以Kotlin語言環境爲基礎。首先在項目app或其餘命名的模塊下的build.gradle中添加如下內容android
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' }
這是其餘博客中描述的通用配置,可是這樣作會出現一個錯誤:api
- 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都須要配置。app
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模塊中引用;ide
2.Java配置基礎步驟
不少博客針對是否使用 arg("AROUTER_MODULE_NAME", project.getName())仍是arguments = [ moduleName : project.getName() ] 會引起模塊不能找到的錯誤 ,正解:一樣每一個須要引用到@Router,都須要添加如下內容。gradle
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語言。ui
class BaseApplication :Application(){ override fun onCreate() { super.onCreate() if (BuildConfig.DEBUG) { ARouter.openLog() ARouter.openDebug() } ARouter.init(this) } }
4.關於編譯
apt,annotationProcessor this