知之为知之
知之为知之
8天前 · 2 人阅读

ARouter官方地址:https://github.com/alibaba/ARouter

一:官方简单实现跳转(对纯java的项目没有问题,但是如果有kotlin就不行了):

1:添加依赖和配置

android {
    defaultConfig {
    ...
    javaCompileOptions {
        annotationProcessorOptions {
        arguments = [ moduleName : project.getName() ]
        }
    }
    }
}
dependencies {
    // 替换成最新版本, 需要注意的是api
    // 要与compiler匹配使用,均使用最新版可以保证兼容
    compile 'com.alibaba:arouter-api:x.x.x'
    annotationProcessor 'com.alibaba:arouter-compiler:x.x.x'
    ...
}

// 旧版本gradle插件(< 2.2),可以使用apt插件,配置方法见文末'其他#4'
// Kotlin配置参考文末'其他#5'

2: 添加注解
// 在支持路由的页面上添加注解(必选)
// 这里的路径需要注意的是至少需要有两级,/xx/xx

@Route(path = "/test/activity")
public class YourActivity extend Activity {
    ...
}

3: 初始化SDK

if (isDebug()) {           // 这两行必须写在init之前,否则这些配置在init过程中将无效
    ARouter.openLog();     // 打印日志
    ARouter.openDebug();   // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
}
ARouter.init(mApplication); // 尽可能早,推荐在Application中初始化

4: 发起路由操作
// 1. 应用内简单的跳转(通过URL跳转在'进阶用法'中)

ARouter.getInstance().build("/test/activity").navigation();

----------------------------------下面注意了-----------------------------------
本身我的项目是java和kotlin进行混写的,现在进行组件化路由配置,按照上面的配置如何也不能成功,自己遇到坑如下:

1:各个module 都需要添加ARouter的依赖

app的module和其他需要路由跳转的module,都要添加依赖,才能写@Router的注解哦

2:有kotlin的代码,javaCompileOptions改为kapt的

defaultConfig{
          ...
//        javaCompileOptions {
//            annotationProcessorOptions {
//                arguments = [ moduleName : project.getName() ]
//            }
//        }
        kapt {
            arguments {
                arg("moduleName", project.getName())
            }
        }
}

3:有kotlin的代码,需要依赖配置修改annotationProcessor改为kapt

    compile 'com.alibaba:arouter-api:1.3.1'
//    annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
    kapt 'com.alibaba:arouter-compiler:1.1.4'

4: 不同module中,写@Router的path路径需要注意

应用app的module内两个页面跳转,与app的module跳转到其他module,写@Router的path路径需要注意

应用内跳转,"/app/test"对于一个页面
 findView(R.id.img).setOnClickListener(v -> ARouter.getInstance()
                .build("/app/test")
                .navigation());
app的mudule跳转到其他module,如果还是写"/app/test2/",这样就会失败,需要修改一下第一个名称,例如:"/lib/test2", 这样才会成功
//在其他module中,不要以"/app/xxx"开头
findView(R.id.img).setOnClickListener(v -> ARouter.getInstance()
                .build("/lib/test1")的
                .navigation());

收藏 0
关键词: arouter module 跳转 app com alib
评论