使用Navigation Components遇深层链接多目标问题,清单合并失败
核心原因
导航图中存在两个或多个Destination配置了完全一致的深层链接URL/规则,Navigation插件自动生成Manifest的<intent-filter>时,重复的规则触发了合并冲突。
修复步骤
检查所有导航图的深层链接配置
打开所有相关的nav_graph.xml文件,逐个核对每个<deepLink>标签的app:uri属性值,找出重复的链接(比如两个Fragment都配置了app:uri="https://yourapp.com/detail")。调整重复的深层链接规则
- 若为误配置:直接删除其中一个多余的深层链接。
- 若业务需要多个页面响应同一链接:通过动态深层链接处理实现,不要在导航图中重复配置。具体做法:
- 仅在导航图中保留一个主Destination的深层链接。
- 在该Destination对应的页面(如Fragment)中,获取深层链接参数,根据参数动态导航到其他目标页面。
- 示例代码(Kotlin):
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val deepLinkUri = arguments?.getParcelable<Uri>(NavController.KEY_DEEP_LINK_URI) deepLinkUri?.let { uri -> val targetId = when(uri.getQueryParameter("type")) { "A" -> R.id.fragment_a "B" -> R.id.fragment_b else -> R.id.default_fragment } findNavController().navigate(targetId) } }
彻底清理并重新构建
执行Build > Clean Project,再执行Build > Rebuild Project;若仍有问题,手动删除项目根目录和模块下的build文件夹后重新构建。验证Manifest合并结果
修复后,打开Tools > App Inspection > Merged Manifest,检查<intent-filter>是否仅包含一组对应深层链接的规则,确认无冲突。
内容的提问来源于stack exchange,提问作者ritesh singh
相关产品推荐
相关产品推荐

