fix: 部分场景下无法自动启动游戏 (#16422)

943a798b38 在 AdbConnectionContext::replace_cmd 的统一替换表中加入了 [PackageName],
导致 m_adb.start / m_adb.stop 在 connect 阶段就被提前替换。当调用方未通过
AsstSetInstanceOption(ClientType, ...) 设置 client_type 时(如 maa-cli 等不感知该
新选项的第三方调用方),m_conn_ctx.package_name 为空字符串,m_adb.start 中的
[PackageName] 被替换为空,后续 start_game(client_type) 内的运行时替换沦为 no-op,
最终启动命令缺失包名导致启动游戏失败。

将 [PackageName] 从统一替换表移除,恢复其作为运行时参数的语义;connect 阶段唯一
需要 [PackageName] 的位置(Androws 的 displayId 查询)改为就地显式替换。

Close #16392

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1b2c
2026-05-02 13:24:54 +08:00
committed by GitHub
parent bdffc8cd1a
commit e83e49f61b
2 changed files with 7 additions and 2 deletions

View File

@@ -1026,7 +1026,13 @@ bool asst::AdbController::connect(const std::string& adb_path, const std::string
// 按需获取display ID 信息
if (!adb_cfg.display_id.empty()) {
auto display_id_ret = call_command(m_conn_ctx.replace_cmd(adb_cfg.display_id));
// [PackageName] 不参与 replace_cmd 的统一替换(保留为运行时参数),
// 此处 displayId 查询是 connect 阶段唯一需要它的场景,就地显式替换。
auto display_id_cmd = utils::string_replace_all(
m_conn_ctx.replace_cmd(adb_cfg.display_id),
"[PackageName]",
m_conn_ctx.package_name);
auto display_id_ret = call_command(display_id_cmd);
if (!display_id_ret) {
return false;
}