问题
集成ARouter的时候如果出现了路由找不到。
我们该如何确定问题?
可以针对配置,进行检查以下几个地方。
1.是否完整添加了依赖库:
defaultConfig{
...
//如果是Kotlin与java混编的,javaCompileOptions 可能无法执行,换成下面的
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: project.getName()]
}
}
}
implementation 'com.alibaba:arouter-api:1.5.1'
annotationProcessor 'com.alibaba:arouter-compiler:1.5.1'
2.annotationProcessor是否有启动:
路由配置大部分都是依靠注解来实现。但是程序编译之后注解是需要通过annotationProcessor插件转成实体类。才能在运行时生效的。
sync project
运行后,没有类似这样的注解出现,说明我们没配置正确。
如果你的项目是Kotlin +Java 混编的。用的Kotlin注解处理器,而不是java注解处理器。
怎么检测?
看build.gradle文件之中是否有: apply plugin: 'kotlin-kapt'
如果有的话,就需要替换配置为:
defaultConfig{
...
kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
}
implementation 'com.alibaba:arouter-api:1.5.0'
kapt 'com.alibaba:arouter-compiler:1.2.2'
当我们sync Project
项目之后,都会在 module/build/generated/source/apt
文件夹或者module\build\generated\ap_generated_sources
文件夹下面生成ARouter$$Group$$
类。 如果这个类生成了,就代表配置成功了。
90%的 提示路由找不到,都是这个原因
3.类是否注册成功
需要检查,启动传的路由地址和类里面标注的路由名称是否一致
@Route(path = "/app/temp") //确保这个路由地址是传的正确的
public class TempActivity extends AppCompatActivity {
@Autowired(name = "extension")
public HashMap<String, Object> extension;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在onCreate 方法之中需要添加inject 初始化
ARouter.getInstance().inject(this);
}
}
4.初始化配置
class KeyApplication() : Application() {
override fun onCreate() {
super.onCreate()
//有没有在Application 之中进行初始化调用。 这个没初始化好 执行的时候会出现错误。比较好追踪
ARouter.init(this)
}
}
ARouter的配置很简单。主要就是关于第二点。配置注解转代码的插件,如果成功了。就没有什么问题了。
评论区