You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Navigation同目的地多相似deepLink匹配异常是什么原因?

问题原因

该问题是对Navigation组件deepLink的匹配优先级和占位符默认匹配规则理解不到位导致的,不属于配置语法错误:

  • Navigation组件的deepLink占位符{param}默认是贪婪匹配模式,可以匹配包含斜杠/在内的任意字符,并非默认只匹配单段路径
  • 同一目标页面配置多个deepLink时,匹配逻辑为「命中第一个符合规则的deepLink后直接停止匹配」,你当前将单参数的最短路径deeplink放在最前面,所有更长的路径都会被它优先拦截,完整路径内容都会被赋值给first参数
解决方案

可以任选以下一种方式修复,也可以同时使用增强兼容性:

方案1:调整deepLink排列顺序

将路径最长的deepLink放在最前面,最短的放在最后面,保证长路径优先匹配对应参数数量的规则:

<!-- 3参数最长路径优先匹配 -->
<deepLink
    android:id="@+id/deeplink_three"
    app:uri="https://example.com/{first}/{second}/{third}/" />
<!-- 2参数路径次之 -->
<deepLink
    android:id="@+id/deeplink_two"
    app:uri="https://example.com/{first}/{second}/" />
<!-- 1参数最短路径放最后 -->
<deepLink
    android:id="@+id/deeplink_one"
    app:uri="https://example.com/{first}/" />

方案2:给占位符添加单段路径限制(更稳妥)

给每个占位符增加正则限制[^/]+,强制限定每个占位符只能匹配不包含斜杠的单段路径,从根源避免贪婪匹配跨段的问题:

<deepLink
    android:id="@+id/deeplink_one"
    app:uri="https://example.com/{first:[^/]+}/" />

<deepLink
    android:id="@+id/deeplink_two"
    app:uri="https://example.com/{first:[^/]+}/{second:[^/]+}/" />

<deepLink
    android:id="@+id/deeplink_three"
    app:uri="https://example.com/{first:[^/]+}/{second:[^/]+}/{third:[^/]+}/" />

修改后即可得到符合预期的匹配结果:

  • 访问https://example.com/item1/:first="item1",second=null,third=null
  • 访问https://example.com/item1/item2/:first="item1",second="item2",third=null
  • 访问https://example.com/item1/item2/item3/:first="item1",second="item2",third="item3"

内容的提问来源于stack exchange,提问作者imany apk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:24:03