跳转失败
首先需要检查以下条件:
- 当前模块是否引入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
也是可以解决的。
网友评论