ARouter+Kotlin 问题汇总

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了解一下

以上。

你可能感兴趣的:(Android,kotlin)