You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Несколько Android-устройств разделяются: device_proxy enable даёт каждому устройству свой порт на ПК (pc_port в ответе, закреплён за serial, все порты — device_ports в proxy_status; запоминаются 32 устройства, новое вытесняет то, которое включали давнее всех). Телефон по-прежнему смотрит на 127.0.0.1 и порт прокси, а adb reverse ведёт его на его порт ПК. Устройство, подключённое прежней версией, держит adb reverse на общий порт: его запросы идут без устройства, а status отвечает ready: false и pc_port: null с подсказкой, что у устройства ещё нет своего порта, — повторить enable.
Каждый запрос в истории несёт device — serial устройства; у запросов самого ПК и устройств, подключённых на общий порт руками, — null. Фильтр device есть у list_flows, wait_for_flow и wait_for_event; list_events и wait_for_event с device отказывают по потоку другого устройства; check_connection с serial считает трафик и отказы только этого устройства; монитор фильтрует по устройству.
Правило с полем device (add_rule, update_rule) подменяет ответы только этому устройству; без него — всем устройствам и ПК, как раньше. Ответ add_rule подсказывает, если у устройства ещё нет своего порта или правило без device при нескольких устройствах. Перенос правила с одного устройства на другое снимает его с уже открытых потоков и соединений, ответ, который правило cut ещё не оборвало, не обрывается; правило без device, суженное до одного устройства, действует на новые запросы, а открытые потоки и соединения остальных держит до их закрытия; снятие device открытое не трогает.
clear_flows с device чистит историю одного устройства, delete_rule с all: true и device удаляет только правила этого устройства (HTTP: DELETE /api/flows?device=<serial> и DELETE /api/rules?device=<serial>; другие параметры и тело у них теперь — отказ 400). Пустой device — отказ, а не «все устройства».
При нескольких устройствах — всегда передавать serial в device_proxy и device в чтение истории и правила: иначе видны чужие запросы, а правило меняет ответы чужому устройству (скилл, раздел «Несколько устройств»).
Пауза на время Charles снимает и возвращает прокси каждому устройству на его порт.
Совет при зависшем adb — adb -s <serial> reconnect вместо adb kill-server, который рвёт связь со всеми устройствами.
wait_for_flow и wait_for_event ждут не дольше 55 секунд, по умолчанию 50: клиент MCP обрывает вызов примерно через 60 секунд с ошибкой «The operation timed out», и ответ «ничего не пришло» до него не доходил. Больше 55 — отказ, он называет предел; то же у HTTP /api/flows/wait и /api/events/wait. Ждать дольше — повторить вызов с курсором из ответа timed_out: у wait_for_flow — since_seq = last_seq, у wait_for_event с flow — тот же flow и since_n; тогда запрос или событие, пришедшие между вызовами, не теряются. Без flow события между вызовами видны только в list_events.