惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
博客园 - 【当耐特】
月光博客
月光博客
Vercel News
Vercel News
D
Docker
I
InfoQ
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 叶小钗
MongoDB | Blog
MongoDB | Blog
GbyAI
GbyAI
有赞技术团队
有赞技术团队
雷峰网
雷峰网
博客园 - 聂微东
小众软件
小众软件
Y
Y Combinator Blog
腾讯CDC
L
LangChain Blog
The GitHub Blog
The GitHub Blog
宝玉的分享
宝玉的分享
Stack Overflow Blog
Stack Overflow Blog
大猫的无限游戏
大猫的无限游戏
T
The Blog of Author Tim Ferriss

慕雪的寒舍

【Linux】腾讯云服务器被攻击后,我是怎么排查挖矿木马的 【Agent】Multica使用心得 【AI】叙界S3备份需求,多Agent赛马 【Nginx】使用OpenResty Lua拦截Artalk广告昵称 【AI】给Codex加上rm防误删Hook 【AI】渐进式披露能省Token,但要管住Agent Loop 【Mac】修改Mac的hostname,告别局域网IP乱入 【随笔】招商银行visa金卡申请和绑定海外谷歌账户支付 【工具】用AI随手写博客 【Appium】安装 xcuitest 驱动时 npm install 报错的解决方法 【2026】新年快乐! 【Mac】解决MacBook WiFi玄学问题“连上WiFI但是没网络”的折腾经历 【AI】智谱AutoGLM部署教程:AutoDL云服务器+本地PhoneAgent配置 【Agent.10】OpenAI接口输出格式约束(response_format) 【Agent.09】LangChain里面使用MCP工具 【Hexo】简单记录如何在服务器上部署hexo-friend-article 【ConfyUI】在MacBook上用ConfyUI部署阿里Z-Image最新开源模型 【AI】AI老是喜欢写总结文档,咋办? 【Agent.08】LangChain的第一个Demo:从零开始构建Agent 【Mac】MacBookPro无法连接第2个外接显示器问题解决 【Mac】为Mac配置基本开发环境 【Agent.07】什么是Agent?从Chat到ReAct的AI进化之路 【Agent.06】使用openai sdk实现多轮对话 【Agent.05】OpenAI接口Function Calling工具调用详解 【MCP】无敌了,chrome-devtools-mcp杀死浏览器AI自动化的比赛! 【随笔】本地部署AI的现状和AI本地部署的价值
【测开】adb shell am start 启动跳链时 & 符号被截断的解决方法
慕雪年华 · 2026-04-24 · via 慕雪的寒舍

本文部分内容由 AI 辅助生成,请结合实际情况判断参考。

用 adb 起跳链测试,链接带 & 参数时命令被截断——记录一下正确写法。

1.起因

最近在做 deeplink 跳转的测试,需要用 adb 直接拉起一个带参数的跳链,类似这样:

1
adb shell am start -d "myapp://home?from=test&tab=2" -a android.intent.action.VIEW

结果 App 收到的参数不对,一看日志,发现 tab=2 整个都没有传进去,跳链在 & 那里就断了。

然后我想着,这是 shell 特殊字符的问题,加个单引号把跳链包起来不就完了:

1
adb shell am start -d 'myapp://home?from=test&tab=2' -a android.intent.action.VIEW

还是不行,照样截断。

2.原因

这里有两层 shell 在处理命令:

  1. 本机的 shell(你的终端,zsh/bash)
  2. 设备上的 shell(adb 连进去之后的 Android shell)

adb shell 后面跟的命令,会先经过本机 shell 解析一遍,再传给设备 shell 执行。& 在 shell 里是后台运行的特殊符号,本机 shell 一看到它就直接把命令切断了,压根轮不到设备那边去处理。

只把跳链用单引号包起来,保护的只是跳链这个字符串,而 adb shell 本身的参数传递还是经过了本机 shell 的解析,所以没用。

3.解决

有两种方式可以解决这个问题。

方式一:单引号包住整个命令,跳链改用双引号

1
2
3
4
5

adb shell am start -d 'myapp://home?from=test&tab=2' -a android.intent.action.VIEW


adb shell 'am start -d "myapp://home?from=test&tab=2" -a android.intent.action.VIEW'

这样本机 shell 看到外层的单引号,会把里面的内容原封不动地整体传给 adb shell& 就不会被截断了。设备上的 shell 收到完整命令之后,再去解析里面的双引号和参数,一切正常。

方式二:echo 管道传给 adb shell

1
echo 'am start -d "myapp://home?from=test&tab=2" -a android.intent.action.VIEW' | adb shell

echo 把命令字符串原样输出,通过管道 | 直接送进 adb shell 的标准输入执行,本机 shell 只负责跑 echo,不会再去解析后面的内容,& 自然也就安全了。

两种方式效果一样,方式二在命令特别长的时候可读性稍好一点,随喜好选用。

The end

这个坑比较隐蔽,因为报错不明显——App 不会崩,只是参数悄悄丢了,定位起来挺费劲的。以后只要跳链里带 &,直接按正确写法来就行了。

有问题欢迎评论区交流!