美文网首页android
【Android】ARouter 跳转 / 注入失败 合集

【Android】ARouter 跳转 / 注入失败 合集

作者: littlefogcat | 来源:发表于2022-03-08 13:04 被阅读0次

跳转失败

首先需要检查以下条件:

  • 当前模块是否引入kapt?
  • 当前模块是否依赖了arouter-compiler?
  • 当前模块是否依赖了对应模块?
  • 对应模块是否设置了arouter参数?

注入失败

首先需要检查以下条件:

  • 当前模块是否引入kapt?
  • 当前模块是否引入arouter-compiler?

- 注入字段为 private 或使用 kotlin

Autowired 注入的字段必须为 public 或者 internal,否则无法注入。
在 kotlin 中,会默认生成 setter 和 getter,所以必须使用 @JvmField 标注对应的字段,或者使用 lateinit var 定义对应字段。

报错信息:

Execution failed for task ':module_globalbutton:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction
   > java.lang.reflect.InvocationTargetException (no error message)

错误: ARouter::Compiler An exception is encountered, [The inject fields CAN NOT BE 'private'!!! please check field [service] in class [com.clearcrane.module_globalbutton.GlobalButtonActivity]]
      at com.alibaba.android.arouter.compiler.processor.AutowiredProcessor.categories(AutowiredProcessor.java:276)
      at com.alibaba.android.arouter.compiler.processor.AutowiredProcessor.process(AutowiredProcessor.java:69)
      at ……

这种情况在 ARouter github 页面有描述:

首先,Kotlin中的字段是可以自动注入的,但是注入代码为了减少反射,使用的字段赋值的方式来注入的,Kotlin默认会生成set/get方法,并把属性设置为private 所以只要保证Kotlin中字段可见性不是private即可,简单解决可以在字段上添加 @JvmField

另外,将字段设置为 lateinit var 也是可以解决的。

相关文章

网友评论

    本文标题:【Android】ARouter 跳转 / 注入失败 合集

    本文链接:https://www.haomeiwen.com/subject/mvdarrtx.html