Kotlin集成Arouter

2,736 阅读2分钟

原文博客

使用场景

为了软件间的解耦操作,确保模块之间Activity的相互跳转不受影响。故引用阿里巴巴的Arouter。但官网上还没有针对Kotlin的集成说明,故在此记录下来

如何使用

  1. gradle配置
  2. 目录配置,常量类配置
  3. Application中进行Arouter初始化
  4. Activity的配置

1. gradle配置

注意需要在两个地方进行配置

1.根目录下的build.gradle中配置,在dependencies中增加arouter-register引用

 dependencies {
        classpath "com.alibaba:arouter-register:1.0.2"
    }

2.在模块所在的build.gradle中添加引用及编译配置

plugins {
//    1.增加kotlin-kapt引用
    id 'kotlin-kapt'
}



android {

//  2.增加Arouter编译配置,注意顺序。此处应该在android{}中
    kapt {
        arguments {
            arg("AROUTER_MODULE_NAME", project.getName())
        }
    }
}

dependencies {

// 3. 添加gradle引用
    implementation 'com.alibaba:arouter-api:1.5.1'
    kapt "com.alibaba:arouter-compiler:1.5.1"

}

注意:此处的与官网教程不一样。官网的配置是针对java的,所以我没有使用 javaCompileOptionsannotationProcessor'com.alibaba:arouter-compiler:1.5.1'这两个配置对kotlin不生效。

2. 目录配置,常量类配置

新建一个ui包用于存放需要跳转的Activity,随后新建一个ConstantObject文件。添加Activity的常量资源

常量类Constants

object Constants {
    object Activitys{
        const val RECYCLELIST_ACTIVITY = "/ui/RecycleListActivity"
    }
}

目录结构

目录结构

3. 在Application中进行Arouter初始化

class App : Application() {
    override fun onCreate() {
        super.onCreate()
        if (BuildConfig.DEBUG){
            ARouter.openLog()
            ARouter.openDebug()
        }
        ARouter.init(this)

    }

    override fun onTerminate() {
        super.onTerminate()
        ARouter.getInstance().destroy()
    }
}

**注意:**此处有两个小坑。

  1. 重写的APP类需要在Manifest中进行添加,否则不会执行。(只需要在application节点中添加name并指向这个类即可)
  2. 注意BuildConfig这个类是引用谁的,因为Arouter本身也有BuildConfig此处需要引用AnroidBuildConfig。博主引用错了后,一直无法跳转。而且也一直没有报错,坑了很久

4. Activity的配置

以上工作做完后,就可以在需要跳转的Activity进行配置了。

跳转到的Activity,增加@Route注解

@Route(path = Constants.Activitys.RECYCLELIST_ACTIVITY)
class RecycleListActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_recycle_list)
    }
}

需要进行跳转的Activity,调用Arouter单例进行跳转

 mBtnList.setOnClickListener {
            ARouter.getInstance().build(Constants.Activitys.RECYCLELIST_ACTIVITY).navigation()
        }