1. ARouter+Kotlin无法生成路由文档问题解决
如题,无法生成 build/generated/source/apt/(debug or release)/com/alibaba/android/arouter/docs/arouter-map-of-${moduleName}.json
官方
ARouter README中提到:
// 更新 build.gradle, 添加参数 AROUTER_GENERATE_DOC = enable
// 生成的文档路径 : build/generated/source/apt/(debug or release)/com/alibaba/android/arouter/docs/arouter-map-of-${moduleName}.json
android {
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: project.getName(), AROUTER_GENERATE_DOC: "enable"]
}
}
}
}
在Java下是没问提,但使用Kotlin的时候需要改为以下配置
解决方案
apply plugin: 'kotlin-kapt'
kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
arg("AROUTER_GENERATE_DOC", "enable")
}
}
2. Error:Execution failed for task ‘:app:compileDebugKotlin’. > Compilation error. See log for more details
产生此问题有多种情况,此处只讨论与ARoute有关的问题。根据提示,添加
--stacktrace --debug是有些详细log,但和项目没什么直接关系,所以没什么卵用。
产生原因
其实按照ARoute的文档进行操作就没有什么问题的,所以出现问题无非就是自己使用时出现了问题。
解决方案
- 1 . 检查@Autowired 是否使用了private修饰符,若有,去掉private即可
- 2 . 检查@Route(path = “”),这里path里至少需要两级,即例:
path = "/test/activity"
3. @Autowired 获取值是Null
这里只给出个人原因导致Null的解决方案,若是ARouter的bug,请到官方提issue。
例:
# AActivity
ARouter.getInstance()
.build("/activity/b")
.withBoolean("bool",true)
.withParcelable("parcel",new P())
.navigation()
# BActivity
@Route(path = "/activity/b")
class BActivity: AppCompatActivity(){
@Autowired(name = “bool”)
@JvmField
var mBool: Boolean? = null
@Autowired(name = “parcel”)
@JvmField
var mP: P? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout...)
ARouter.getInstance().inject(this@BActivity)
}
}
- 若
@Autowired取值为null,请先检查目标中是否有ARouter.getInstance().inject(this) - 若仅
mP == null,请检查P.kt是否有空构造函数 - 若配置无误,但扔存在Null,
Clean Projec了解一下
以上。

本文总结了ARouter与Kotlin配合使用时遇到的三个主要问题:1) 无法生成路由文档;2) 'app:compileDebugKotlin'任务执行失败的编译错误;3) 使用@Autowired注解获取值为Null。针对这些问题,提供了官方建议和具体的解决办法,包括修改Kotlin配置、检查@Autowired修饰符和构造函数等。
1734





