Kotlin系列之2-Kotlin中的ARouter的使用

前言

这两年google一直在推荐模块化开发,在github上有google官方的ArchitectureDemo。最近写了个demo,用到了ARouter,但是配置了之后,在调用的时候报这样的错误。仔细检查了一下用法是否正确。

ARouter介绍

这是阿里Android技术团队开源的一款路由框架。这款路由框架可以为我们的应用开发提供更好更丰富的跳转方案。比如支持解析标准URL进行跳转,并自动注入参数到目标页面中;支持添加多个拦截器,自定义拦截顺序(满足拦截器设置的条件才允许跳转,所以这一特性对于某些问题又提供了新的解决思路。

ARouter源码分析   ARouter官方项目地址

ARouter使用

 1、在app的 gradle文件中添加声明

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.0"
    useLibrary 'org.apache.http.legacy'
    defaultConfig {
        applicationId "com.clark.dingding"
        minSdkVersion 26
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        javaCompileOptions {
            annotationProcessorOptions {
               //很多网上的资料是这么多的,但是运行了是不可以的
            //    arguments = [moduleName : project.getName()]
                arguments = [AROUTER_MODULE_NAME : project.getName()]
            }
        }
    }
}

dependencies {
//阿里的路由框架
implementation 'com.alibaba:arouter-api:1.5.1'
annotationProcessor 'com.alibaba:arouter-compiler:1.5.1'

}

2、在dependencies 中引入框架 如上代码

3、在Application中初始化框架,

ARouter.init(this)

 

 

4、在需要使用的activity或者fragment中注入 

ARouter.getInstance().inject(this)

 

5、在调用的地方使用

//不带参数调用

ARouter.getInstance().build(ARouterPath.news2Activity).navigation()

带参数调用

                ARouter.getInstance()
                    .build(ARouterPath.news2Activity)
                    .withTransition(R.anim.activity_up_in, R.anim.activity_up_out)
                    .navigation(this@NewsActivity, 2, object : NavigationCallback {
                        override fun onFound(postcard: Postcard?) {
                            Log.d("clark", "找到匹配路径")
                        }

                        override fun onLost(postcard: Postcard?) {
                            Log.d("clark", "没有找到匹配路径")

                        }

                        override fun onArrival(postcard: Postcard?) {
                            Log.d("clark", "成功跳转")

                        }

                        override fun onInterrupt(postcard: Postcard?) {
                            Log.d("clark", "跳转路径被中断")

                        }
                    })

更多调用方法详见 官方文档  参考文档

问题

但是我配置了所有的注意点,依旧不能实现跳转,log给出的提示为

ARouter::There is no route match the path

查了资料发现,java的项目跟kotlin的项目在调用方式上是不一样的。我的项目是用的部分kotlin代码,以下的办法可以参考解决。

第一个注意点

在app的build文件中添加

apply plugin: 'kotlin-kapt'

并修改配置声明方式,代码如下

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-android-extensions'
    id 'kotlin-kapt'
}

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.0"
    useLibrary 'org.apache.http.legacy'
    defaultConfig {
        applicationId "com.clark.dingding"
        minSdkVersion 26
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
//java工程的声明方式
//        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
//        javaCompileOptions {
//            annotationProcessorOptions {
//                arguments = [AROUTER_MODULE_NAME : project.getName()]
//            }
//        }
//kotlin工程的声明方式
        kapt {
            arguments {
                arg("AROUTER_MODULE_NAME", project.getName())
            }
        }

    }
    dataBinding {
        enabled = true
    }
}

 而且包的导入方式为,如下

    //java导入包
//  implementation 'com.alibaba:arouter-api:1.5.1'
//  annotationProcessor  'com.alibaba:arouter-compiler:1.5.1'

    //kotlin导入包
    implementation 'com.alibaba:arouter-api:1.5.1'
    kapt 'com.alibaba:arouter-compiler:1.5.1'

第二个注意点 

要注意的是路径配置,每个module的group(默认路径的第一级)一定要不一样。比如你的app module有个页面可以用@route(path="/app/activity") 然后有个login module中的页面就不要用/app开头了,可以用@route(path="/add/activity")这样子的。

基本上额外再注意这两点就能解决跳转失败的问题了,如果依旧不能解决,欢迎大家留言探讨,我会及时回复。

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值