#1321·Airtest

ADB.push() 通过扩展名错误解析文件/目录,导致 minicap 安装失败

作者: dlstjd0237创建于 2026年4月20日更新于 2026年4月20日

删除任何后续部分,如果没有关于的详细信息 描述错误 一个清晰且简洁的错误描述。或者粘贴以下追踪信息。 ADB.push(local, remote) 根据扩展决定文件与目录,导致路径解析错误。 重现 案例 1。推送没有扩展名的文件(例如可执行二进制文件) 远程没有扩展名 → 被误解为目录 → 文件被复制到错误位置。 案例 2。目录名包含 .(例如 /sdcard/com.test.app/files) 将其视为具有扩展名 → 目录被误解为文件 → 推送失败。 案例 3。本地是目录,但远程具有扩展名(例如 push("./logs", "/sdcard/backup.zip")) 被误解为文件 → 内部的 rm / mv 目标路径混乱。 案例 4。推送后未复制目录内容 shell glob(*) 在从 tmp 到最终路径移动时未按预期扩展 → 文件到达 tmp,但没有到达最终目的地。 预期行为 目标类型由实际路径状态决定,而不是扩展名。文件和目录最终完好无损地位于指定的远程路径。 Python 版本: python3.9 airtest 版本: 1.4.3 其他上下文 相关 PR:之前曾报告和修复过相同问题,见 AirtestProject/Airtest#1288 — "Fix adb.push fail to push no extension file (cause minicap installation failure)"。该 PR 将之前混乱的文件/文件夹处理逻辑分离出来。 疑似回退点:提交 a9722c4 ("fix: push bug") 似乎有效地修复了 PR #1288。它将 os.path.isfile(local) 改为 os.path.isfile(remote),但 remote 是 Android 设备路径(例如 /sdcard/...),在本地文件系统中不存在,因此检查总是返回 False。因此,#1288 的修复被绕过,原始无扩展名文件处理错误又回来了。

内容来源: AirtestProject/Airtest