1.以Im插件為例 PluginEntryPlugin中增加幾個(gè)關(guān)鍵注冊(cè)類(small插件中注意要處理下)
@PluginInitalizer
@JvmField
var initalizer: IPluginInitalizer? = null
private fun doInit() {
。。。。此處省略
//Arouter 的group 注冊(cè)到map中 ,沒注冊(cè),會(huì)報(bào)group 找不到匹配的
ARouter.getInstance().inject(this)
if (initalizer != null) {
ARouter.getInstance().addPluginRouteMap(initalizer)
}
}
2.在kotlin中使用@Autowired 使用的注意
在.java文件中使用@Autowired,不允許使用private 修飾(Arouter框架需要直接調(diào)用,不允許私優(yōu)化)
在kotlin中 不加修飾符,默認(rèn)也是私優(yōu)化的,也就是內(nèi)部重寫了get ,set方法
@Autowired(name = ImConstants.EXTRA_UID)
@JvmField
var mSysUid = 0L
@Autowired(name = ImConstants.EXTRA_USER_NAME)
@JvmField
var mName: String? = null
解決辦法:加上 @JvmField ,相當(dāng)于public了,
3.調(diào)整需要傳入一個(gè)Context(非插件化項(xiàng)目,其實(shí)不傳沒問題)
沒有傳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()
}
報(bào)錯(cuò):
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)
}
}