1.使用方法
1.1添加依赖和配置
android {
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: project.getName()]
}
}
}
}
dependencies {
// 替换成最新版本, 需要注意的是api
// 要与compiler匹配使用,均使用最新版可以保证兼容
compile 'com.alibaba:arouter-api:x.x.x'
annotationProcessor 'com.alibaba:arouter-compiler:x.x.x'
...
}
1.2添加注解
// 在支持路由的页面上添加注解(必选)
// 这里的路径需要注意的是至少需要有两级,/xx/xx
@Route(path = "/test/activity")
public class YourActivity extend Activity {
...
}
1.3初始化SDK
// 这两行必须写在init之前,否则这些配置在init过程中将无效
if (isDebug()) {
ARouter.openLog(); // 打印日志
// 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
ARouter.openDebug();
}
ARouter.init(mApplication); // 尽可能早,推荐在Application中初始化
1.4发起路由操作
// 1. 应用内简单的跳转(通过URL跳转在'进阶用法'中)
ARouter.getInstance().build("/test/activity").navigation();
// 2. 跳转并携带参数
ARouter.getInstance().build("/test/1")
.withLong("key1", 666L)
.withString("key3", "888")
.withObject("key4", new Test("Jack", "Rose"))
.navigation();
2、dependencies坑
There is no route match the path错误
每个module都按1中所写,还是会报这个错误,解决方法两种:
(1)将module直接依赖到主程序;
(2)在一个baseLib中按照步骤1中的写好,然后在每个module中引用了baseLib,且在module中要有在dependency arouter库。【此处可以写个公用的module.gradle】
3、传值为null或者初始值,且不报错
//注入路由框架,拿到Autowired值,在使用前调用
ARouter.getInstance().inject(this);
4、Error:Error converting bytecode to dex:
不同的模块使用了相同的分组,例如 AMoudle 定义了 @router(path=”/com/a”), BMoudle也定义了@router(path=”/com/b”) 就会出现这个问题,暴露服务出现这个问题同理。