在使用 ARouter 并且是多Module的时候,直接运行可能没有错,在打包的时候会报类似下面的错误:
com.android.tools.r8.errors.CompilationError: Program type already present: com.alibaba.android.arouter.routes.ARouter$$Group$$messageCenter
其实就是后面的包名重复了,这些类文件都是 ARouter 根据配置自动生成的,
分析:目前有两种情况会导致这种报错
1.可能是手误将 A module 引用的路由指向了 B module 比如:
ps:代码是用kotlin写的
//订单模块
class OrderCenter{
companion object {
const val PATH_ORDER_CONFIRM = "/orderCenter/confirm"
}
}
//消息模块
class MessageCenter{
companion object {
const val PATH_MESSAGE_PUSH = "/messageCenter/push"
const val PATH_MESSAGE_ORDER = "/messageCenter/order"
}
}
OrderDetailActivity 其实是在订单模块下面的,但是这里引用了 “MessageCenter” 下面的路由,这就会造成订单模块下面自动生成的包名也包含 messageCenter 所以就会造成包名重复
@Route(path = RouterPath.MessageCenter.PATH_MESSAGE_ORDER)
class OrderDetailActivity{}
2.自己定义的路由模块名称和源码里面的冲突了比如:
”/arouter/test” arouter不能用,源码中已经用了这个
网友评论