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

Activity深度链接启动异常:ADB正常Chrome崩溃,参数缺失报错

问题分析与解决方案

为什么两种启动方式行为不同?

核心原因是启动流程的差异:

  • 用ADB命令adb shell am start -d myscheme://myhost/mypath启动时,是直接调用Activity的系统启动逻辑,完全绕过了Navigation组件的DeepLink解析和Safe Args参数校验流程。只要Activity本身没有主动校验参数,就能正常启动。
  • 通过Chrome启动时,系统会触发Navigation组件对DeepLink URI的解析逻辑,此时Safe Args会严格按照导航图中定义的规则校验必填参数。因为你的URI里没有携带someRequiredArgumentHere这个必填参数,所以直接抛出参数缺失的异常。

解决方案

根据你的业务需求,选择以下任意一种方案:

  1. 补全DeepLink URI的必填参数
    如果someRequiredArgumentHere确实是业务必需的,需要修改DeepLink的格式,确保Chrome打开时携带该参数。比如:

    • 若参数是路径参数:myscheme://myhost/mypath/{someRequiredArgumentHere},调用时传入具体值如myscheme://myhost/mypath/123
    • 若参数是Query参数:myscheme://myhost/mypath?someRequiredArgumentHere=xxx
      同时要确保导航图(nav_graph.xml)中对应的目的地节点的DeepLink配置和URI格式匹配。
  2. 将参数设为非必填或添加默认值
    如果这个参数并非必须,在导航图的参数配置中:

    • 给参数添加android:defaultValue属性,指定默认值;
    • 或者去掉参数的必填标记(Safe Args中未指定app:nullable="false"的参数默认可选,若之前显式设置了必填,改为app:nullable="true")。
  3. 统一启动流程的参数校验
    为了避免两种启动方式的行为不一致,建议在DeepLinkActivity中主动通过Safe Args获取参数,比如在onCreate中调用:

    val args = DeepLinkActivityArgs.fromIntent(intent)
    // 使用args.someRequiredArgumentHere
    

    这样即使ADB直接启动Activity,也会触发参数校验,提前发现问题,保证两种启动方式的行为一致。


内容的提问来源于stack exchange,提问作者Augusto Carmo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:20:58