qnet 中文文档 下载 App

adb 动态更新参数:am broadcast 与全量更新语义

弱网运行中要换档位,不必停止再启动:一条广播指令就能原地改参数。这是 adb 接口里效率最高的一条,也是最容易踩语义坑的一条。

指令结构

adb shell am broadcast -a "qnet.boradcast.drive" --include-stopped-packages {--[类型] [key] [value]} com.tencent.qnet

官方示例:原地切换为 TCP/UDP 100% 丢包

adb shell am broadcast -a "qnet.boradcast.drive" --include-stopped-packages --es "command" "update" --ei "in_rate" 100 --ei "out_rate" 100 --ei "protocol" 3 com.tencent.qnet

指令回执 Broadcast completed: result=0 即已送达;随后弱网立即按新参数执行,悬浮窗读数与被测应用表现会同步变化。

全量更新语义:没写的参数一律归默认

官方注意事项原文:更新弱网参数是全量更新,参数中没有设置的参数会被直接设置为默认值。

这意味着上面示例切换到 100% 丢包的同时,把延迟、带宽等所有未提及参数全部清零归默认。想在丢包基础上保留 200ms 延迟,正确写法是把两者都写上:

adb shell am broadcast -a "qnet.boradcast.drive" --include-stopped-packages --es "command" "update" --ei "in_rate" 100 --ei "out_rate" 100 --ei "in_delay" 200 --ei "out_delay" 200 --ei "protocol" 3 com.tencent.qnet

梯度遍历的标准写法

参数化跑延迟梯度时,每次更新都带全量参数,循环体形如:

for delay in 100 300 500:
    adb shell am broadcast -a "qnet.boradcast.drive" --include-stopped-packages \
      --es "command" "update" --ei "in_delay" {delay} --ei "out_delay" {delay} com.tencent.qnet

梯度间切换零停顿,比重新启动进程快得多,适合极限遍历场景。

更新不生效的排查顺序

  1. 回执是不是 Broadcast completed(没回执说明进程不在,弱网早已消失,先重新启动);
  2. 是否遗漏了 command=update(缺 command 的广播等于没说要求);
  3. 是否被全量语义「顺手」清掉了别的参数——把你以为还生效的参数也显式写上。

更新只改参数,不改变生范围与抓包状态;要改被测应用要重新走启动指令,见adb 启动弱网。