1.以Im插件为例 PluginEntryPlugin中增加几个关键注册类(small插件中注意要处理下)
@PluginInitalizer
@JvmField
var initalizer: IPluginInitalizer? = null
private fun doInit() {
。。。。此处省略
//Arouter 的group 注册到map中 ,没注册,会报group 找不到匹配的
ARouter.getInstance().inject(this)
if (initalizer != null) {
ARouter.getInstance().addPluginRouteMap(initalizer)
}
}
2.在kotlin中使用@Autowired 使用的注意
在.java文件中使用@Autowired,不允许使用private 修饰(Arouter框架需要直接调用,不允许私优化)
在kotlin中 不加修饰符,默认也是私优化的,也就是内部重写了get ,set方法
@Autowired(name = ImConstants.EXTRA_UID)
@JvmField
var mSysUid = 0L
@Autowired(name = ImConstants.EXTRA_USER_NAME)
@JvmField
var mName: String? = null
解决办法:加上 @JvmField ,相当于public了,
3.调整需要传入一个Context(非插件化项目,其实不传没问题)
没有传context的情况下
fun toSysActivity(sysUid: Long, sysName: String?) {
val builder = ARouter.getInstance().build(ImConstants.AROUTE_SYS_ACTIVITY_PATH)
.withLong(ImConstants
.EXTRA_UID, sysUid)
sysName?.let {
builder.withString(ImConstants.EXTRA_USER_NAME, it)
}
builder..navigation()
}
报错:
2020-12-08 17:15:39.642 11479-11479/com.yy.dreamer E/ARouter::: _navigation error : java.lang.ClassCastException: com.yy.dreamer.BearApp cannot be cast to android.app.Activity[ThreadId=2 & ThreadName=main & FileName=ARouterTwo.java & ClassName=com.alibaba.android.arouter.launcher.ARouterTwo$2 & MethodName=run & LineNumber=438 ]
增加Context后,正常
fun toSysActivity(activity: Context?, sysUid: Long, sysName: String?) {
activity?.let {
val builder = ARouter.getInstance().build(ImConstants.AROUTE_SYS_ACTIVITY_PATH)
.withLong(ImConstants
.EXTRA_UID, sysUid)
sysName?.let {
builder.withString(ImConstants.EXTRA_USER_NAME, it)
}
builder.withOptionsCompat(options(it)).navigation(it)
}
}