news 2026/9/12 20:32:00

手机日志与设备调试工具

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手机日志与设备调试工具

Android / iOS 双平台日志调试工具,抓日志再也不用敲命令了

GitHub 地址:https://github.com/carterking888/phone_log_tool.git
做安卓 / iOS 测试或开发的同学大概都有这种体验:排查问题时要一边敲adb logcatadb shelllspull,一边在几十万行日志里翻关键字,换台设备还得重新来一遍。Windows 下adb pull遇到中文路径还会悄悄丢文件。

于是我用业余时间写了这个桌面端 ADB / iOS 日志与设备调试工具:连上手机点几下,日志、应用、文件全都能可视化操作。本文分享功能设计和几个踩坑点,源码结构也一并放出。

功能亮点

1. 设备管理:Android / iOS 同框

  • USB + 无线 ADB 一体管理,设备授权状态、ADB 环境自检(版本/来源/server 5037)一眼看清
  • 设备详情:型号、系统版本、内核、架构、Root 权限、电量,一键复制列号
  • iOS 通过 pymobiledevice3 接入(Windows 装 iTunes 驱动提供 usbmux 即可,免越狱)

2. 日志查看:筛选要够快、够细

  • main / system / crash / events 四缓冲区实时流,内存环形缓冲 5 万行
  • 多选筛选:级别 / PID / 标签都是多选面板;多关键字搜索:空格分隔、任一命中即显示,命中高亮
  • 暂停只停渲染不停采集,恢复一次性补齐;取消自动滚动 = 冻结当前视图,翻历史日志不怕被新日志顶走
  • 一键保存日志,操作留痕(start/stop/clear 都有操作日志联动)

3. Cocos 游戏的 JS 日志:不用连 Safari 也能抓

这是我最想做的功能。Cocos 游戏的console.log在系统日志里默认被吞,常规做法是 Mac 上连 Safari Web Inspector 抓。这个工具的做法:

  1. USB 连接后自动扫描设备侧的 V8 Inspector 调试端口(6086 等)
  2. usbmux 端口转发到本地,走 Chrome DevTools Protocol 捕获 console 输出
  3. 游戏重启自动重连(多候选地址依次握手,旧的 target id 失效就换下一个)
  4. 更进一步:「开启 INFO 日志」按钮通过调试口在游戏里远程执行cc.debug._resetDebugSetting(cc.debug.DebugMode.INFO),把被默认级别吞掉的日志动态打开——不用重打包游戏

全程纯 USB、免管理员、免 Mac。

4. 应用包管理:拖个 APK 就装

  • 应用列表按全部 / 用户 / 系统 / 三方 / 已禁用分类,存储占用统计
  • 安装 APK 支持拖拽.apk / .xapk / .apks都行(最大 2GB),覆盖 / 降级 / 授权 / 测试包四个 ADB 选项可视化勾选,安装过程实时抓日志
  • 卸载支持批量;iOS 设备的应用列表也能同步展示

5. 文件管理:绕开 ADB pull 的坑

  • 快捷目录直达,设备存储容量可视化,地址栏直接输路径跳转
  • 列表 / 网格两种视图,上传 / 新建 / 重命名 / 删除 / 批量下载
  • 私有目录(/data/data)自动 run-as 回退:debuggable 包不用 Root 就能浏览和下载
  • 下载全部走adb exec-out cat / tar流式写本地文件——这是踩坑换来的设计,见下文

踩坑记录(都是真机实测换来的)

adb pull在 Windows 下不可靠。中文远程路径会丢扩展名、带空格直接失败。所以所有下载统一走adb exec-out流式输出,目录用tar -cf -打包流式接收,字节级一致。

ls -la路径必须带尾斜杠。/sdcard是符号链接,不带斜杠只返回链接本身,永远列不出内容。

③ pywebview 的 js_api 跑在后台线程。每次调用都新建线程,高频轮询会产生大量线程和跨线程 COM 噪音——所以前端轮询做了自适应降频:有新日志 400ms 一拉,空闲降到 2s。

④ WebView2 不给 JS 真实拖拽路径。拖 APK 安装时 JS 拿到的只有文件名,必须 hook 原生NavigationStarting/DownloadStarting事件才能拿到完整路径,而且 CLR 属性访问必须回 UI 线程,否则静默硬崩。

⑤ Petite-Vue 的渲染期表达式严禁引用未挂载的全局。首渲染抛一次 ReferenceError,对应指令的 effect 就永久失效——区块从此消失且不报错,排查了很久。

⑥ PyInstaller 6 的 macOS BUNDLE 会重排目录。可执行文件在Contents/MacOS、二进制在Contents/Frameworks、数据文件在Contents/Resources,和 Windows 的_internal布局完全不同,校验脚本必须全 bundle 递归找。

⑦ 演示模式必须显式开启。早期版本"检测不到设备就自动进演示模式",结果假设备数据误导了好几次排查。后来改成:空设备就显示空列表,想看演示手动点。

验证与分发

  • jsdom 离线回归:node _dom_check.js(渲染 + 交互冒烟,99 项,无需真机)
  • 后端自测:python _backend_check.py(真机 + 演示模式双跑)
  • Windows 打包:Cython 编译 core 为 pyd + PyInstaller + UPX,附fix_and_check.bat处理目标机环境自检
  • macOS 打包:build_mac.sh自动建 venv、内置 ADB 到包内,GitHub Actions 云端出包(Windows 无法交叉编译 Mac 产物)

写在最后

这个工具的核心思路是:把高频、繁琐、易错的命令行操作收敛成点几下按钮,同时把坑在代码层面堵死(下载绕开 ADB pull、私有目录自动 run-as、日志洪流后端预过滤)。

目前支持 Android 全量功能,iOS 覆盖日志 / 应用 / 文件(媒体域),后续计划把 iOS 文件管理补齐到沙盒域。


关键词:ADB、logcat、pymobiledevice3、pywebview、Cocos、日志抓取、桌面工具

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 20:29:13

从公网直连到 XS advanced 信任链,SAP HANA 本地数据库接入 Self-Service Migration 的完整技术逻辑

做 SAP HANA Platform 本地数据库迁往 SAP HANA Cloud 时,真正容易卡住项目的地方,往往不是数据库对象能不能导出,也不是目标端实例有没有创建好,而是源数据库怎样被迁移服务稳定、安全地访问。很多团队看到 Self-Service Migration,就会下意识认为本地系统必须先部署 SAP…

作者头像 李华
网站建设 2026/9/12 20:22:50

MEMS陀螺仪在卫星姿态控制中的应用与实践

1. MEMS陀螺卫星应用技术手册概述在卫星姿态控制领域,MEMS陀螺仪正逐步取代传统机械陀螺成为主流选择。这本技术手册将系统性地介绍如何构建完整的MEMS陀螺卫星应用生态,并深入解析影响系统性能的关键指标参数。不同于实验室环境下的理想测试数据&#x…

作者头像 李华
网站建设 2026/9/12 20:21:56

气象数据质量在金融交易中的关键作用与验证方法

1. 极端天气预警中的气象数据质量陷阱在金融交易领域,极端天气事件往往带来巨大的市场波动和资产价格重估。过去十年间,我参与过多次飓风、洪水和极端气温事件期间的交易决策,最深刻的教训是:预警信号的及时性只是基础门槛&#x…

作者头像 李华