news 2026/9/7 18:41:47

手机端四款开发调试利器:抓包、自动化测试、蓝牙联调与书源管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手机端四款开发调试利器:抓包、自动化测试、蓝牙联调与书源管理

很多朋友隔三差五就问我,手机里到底装了哪些真正能留下来、而且越用越顺手的工具型 App。这阵子趁着有空,我把长期在用的 App 盘了一遍,发现其中有四款几乎每天都在发挥价值。它们不是那种刷一下就删的娱乐向应用,而是分别覆盖了网络请求调试、移动端自动化测试、ESP32 蓝牙联调、自定义书源阅读管理。这篇博文我就把这四款 App 一次性拆开聊透,既要讲清楚它们能做什么,也会把配置步骤、踩坑经验、常见问题全部摊开,方便你有类似需求时直接照搬。

1. 四款App的整体定位与我的选型思路

1.1 这四款App到底解决什么问题

我手机里工具类 App 不少,但真正能让我一直留在桌面上的,基本就是这几类:网络请求调试、移动端自动化、硬件蓝牙联调、自定义阅读聚合。这四个方向看起来互不相干,实际都是同一个核心逻辑在驱动:省时间。

网络请求调试类 App,解决的是“App 到底发出去什么数据、服务器回没回、回了什么”。我平时排查接口异常、开发阶段联调都靠它。没有这类工具,你只能靠服务器日志去猜,效率低得离谱。有一次同事说某个接口偶发超时,我拿抓包工具跑了一遍,立刻看到其中一排请求耗时异常,接着就定位到是 CDN 节点切换的问题,前后不到二十分钟。

移动端自动化测试类 App,解决的是“同一个操作别让我天天重复点”。不管是回归测试、批量截图,还是给新人演示操作流程,脚本把重复劳动接管掉之后,能把精力花在真正需要判断的事上。尤其到了发版前的回归阶段,几十条用例全部手点一遍,一两个小时就没了,用脚本跑十分钟就能出结果。

硬件蓝牙联调类工具,主要服务 ESP32 这类带低功耗蓝牙的开发板。传感器数据能不能收到、指令发出去对不对、广播包是否正常,都需要一个边连边看的小工具兜底。这些数据不直观,单靠串口监视器看终端打印,非常容易漏掉关键信息,尤其是时序上的问题。

自定义书源阅读器,解决的是内容聚合问题。把散落在多个站点的资讯、博客、订阅内容,用同一套规则收拢到一个 App 里阅读,维护成本比每天切换多个应用低很多。以前我早上看技术博客、看论坛、看订阅源,要开三个不同入口,现在一个阅读器全搞定,还能记录阅读进度。

1.2 选型背后的取舍

配置这四款 App 的时候,我主要遵循三个原则。

第一个原则是少装重复类型。同类工具留一个就好。抓包调试、自动化测试、蓝牙调试、阅读管理,每个方向我只选一到两款常用工具,避免贪多嚼不烂。手机上装一堆功能相似的软件,最后往往只会用其中最顺手的一款,其余都躺在内存里吃灰。

第二个原则是能配置就别用纯黑盒。定制能力是我留下它们的前提。自动化框架要有脚本入口,抓包工具要能导出会话,阅读器要能导入导出规则。黑盒工具虽然开箱省事,但出了问题往往连退路都没有。比如某些一键抓包工具界面很好看,可一旦过滤条件写死,遇到复杂链路只能干瞪眼。

第三个原则是关注活跃度。开源工具优先看更新频率,商业工具优先看官方维护节奏。有的自动化框架半年不更新,适配新系统时很容易翻车;反而更新勤快的工具更能跟上系统版本变化,遇到兼容性问题解决也更快。

四款 App 的选择不是巧合,它们分别对应了软件联调周期里的四个环节:分析网络、驱动界面、连接硬件、聚合内容。单个拆开看都是小工具,组合起来就是一个完整的工作台。下面我按使用频率逐款展开,每款都会说到原理、配置和踩坑。

2. App一:抓包调试类工具,把网络请求看得明明白白

2.1 抓包工具的工作原理

抓包工具的原理一句话就能解释清楚:在手机和服务器中间插入一个能看到双向流量的节点。

具体流程是这样的。手机发出请求时,流量并不直接发给目标服务器,而是先被引导到电脑上运行的抓包服务。抓包服务拿到请求后,记录下所有请求信息,再以自己的身份与目标服务器建立连接,拿到响应后再原样返回给手机。整个过程对用户侧无感,但对开发者和测试人员来说,所有请求字段、响应数据、耗时、状态码都暴露得清清楚楚。

很多人会问,HTTPS 加密流量也能看吗?可以。因为抓包工具在 SSL/TLS 握手阶段会出示自己签发的证书。只要手机信任了这张证书,工具的中间节点就能解密加密流量,看到完整明文。所以要让抓包真正生效,证书的安装和信任是绕不开的一步。

这里顺便提醒一下:不管是开发自己的 App,还是对接第三方接口,抓包都仅限于你有权限调试的应用。如果是别人的应用,尤其是涉及敏感数据的场景,最好先确认对方允许。合法合规的调试配合正规的授权,才能避免给自己惹麻烦。

2.2 配置要点与实测步骤

我用得最多的组合是:电脑端跑抓包服务,手机端发请求。拿最常见的配置来说,步骤大致如下。

第一步,保证手机和电脑在同一个局域网。这一步不满足,后面全都白搭,因为手机根本找不到电脑上的服务。

第二步,在电脑端启动抓包服务,记下监听端口。不同工具默认端口不一样,常见的是局域网 IP 加一个指定端口。启动成功后,服务会显示一个地址,这个地址后面要填到手机里。

第三步,手机上打开 WiFi 设置,进入当前网络的更多设置,找到手动配置项,把需要转发的目标地址填成电脑的局域网 IP 和监听端口。设置完成后,先用手机浏览器访问抓包服务提示的证书下载地址,把证书下载下来。

第四步,安装证书。Android 手机上,证书下载后需要去系统设置里安装,并勾选信任。iOS 手机则要额外一步,在“证书信任设置”里把证书设为完全信任,否则 HTTPS 流量仍然打不开。

保存配置后,重新打开目标 App 做一轮正常操作,回到抓包服务看会话列表。此时应该能看到刚才产生的所有请求。按域名、请求方法、状态码过滤,是最常用的定位手段。看到响应超时就把请求自身耗时拿出来比对,判断问题出在客户端还是服务端。

2.3 注意:证书安装与平台限制

如果抓包总是什么都看不到,别急着怀疑工具坏了,多半是证书信任或转发链路没配通。

Android 7.0 之后,系统默认不信任用户安装的证书,只信任系统证书。这在安全上是合理的,但确实给调试增加了门槛。常见解法是把调试证书放进系统证书目录,这需要 root 权限;对于可以修改源码的 App,可以在代码里显式允许用户证书;如果两边都不能动,就要处理证书固定的问题。对大多数团队场景来说,直接用可改源码的开发版 App 进行抓包调试最省事。

iOS 上容易踩的坑是只安装了证书,却忘了在设置里打开“完全信任”。证书安装完成后,设置界面会给你一个开关,必须去确认打开。否则你会发现连接都建立成功,但数据全是红色错误,抓出来的内容全是乱码,根本无法阅读。这个坑我踩过两次,每次都花快半小时才反应过来。

还有一种比较隐蔽的问题来自端口冲突。如果电脑上其他软件占用了抓包服务的端口,服务会启动失败。很多教程不会告诉你这件事,只会让你检查手机配置。我的排查顺序是固定的:先看端口是否被占用,再看手机和电脑是否互通,最后看证书是否被正确信任。三层排查下来,绝大多数问题都能找到原因。

3. App二:移动端自动化测试框架,把重复操作交给机器

3.1 从手工点点点到脚本化执行

做移动端自动化测试,我的思路并不是追求百分之百的无人工介入,而是把高频、固定、耗时的操作交给脚本,让人只处理例外情况。回归测试尤其适合脚本化,因为每轮版本都跑相同的路径,结果应该一致,如果哪次不一致,那就是产品逻辑或环境出了问题。

常见的自动化工具框架有三类。Appium 跨平台能力最强,一套 WebDriver 协议覆盖 iOS 和 Android,适合大型团队统一技术栈,但部署成本偏高。uiautomator2 面向 Android,部署简单,可靠性也不错,是我个人最常用来做快速脚本的工具。Airtest 偏图像识别,适合游戏应用或者控件树拿不全的场景。

选自动化工具之前,我会先问自己三个问题:设备是不是只有 Android?控件结构是否稳定?是否需要多台设备并行操作?答案不同,选型会差很多。如果只做 Android 的每日回归,没必要把 Appium 整套环境都搭起来;如果以后一定要做 iOS,那 Appium 的优势就真正体现出来了。不要为了技术而技术,先看业务需要什么。

3.2 一套常见的自动化用例怎么落地

我举一个最常用的例子:启动应用、登录、进入主页面、退出。做这一套用例,一方面验证基础功能是否正常,另一方面给后续更复杂的回归测试打地基。

先在电脑上装好 Python 和必要的依赖库。以 uiautomator2 举例,命令行安装完成后,手机通过 USB 连接电脑,执行一次初始化命令,工具会在手机上安装配套组件。之后脚本里只需要连接设备、启动应用、查找控件、操作控件。

下面是一段很常见的示意代码,实际项目里可以把账号密码做成外部参数,避免写死在脚本里。

import uiautomator2 as u2 d = u2.connect("设备序列号") d.app_start("com.example.sample") if d(resourceId="com.example.sample:id/agree_button").exists(timeout=3): d(resourceId="com.example.sample:id/agree_button").click() d(resourceId="com.example.sample:id/username").set_text("test_user") d(resourceId="com.example.sample:id/password").set_text("123456") d(text="登录").click() assert d(text="首页").exists(timeout=10) d.app_stop("com.example.sample")

代码本身不复杂,真正花时间的是定位控件。不同 App 的控件属性差异很大,有些页面控件没有写 resourceId,只能靠 text、className 或者相对位置去定位。更麻烦的是,部分 App 会故意对控件做动态混淆,标签字段每次启动都不一样。遇到这种情况,我一般退回坐标点击或者图像识别,先把主流程跑通再优化。

3.3 常见坑点与稳定性优化

自动化脚本最大的敌人不是工具本身,而是环境变化。系统弹窗、网络延迟、页面加载速度变化,都会让脚本莫名其妙失败。我自己跑自动化这些年,踩过的坑几乎都集中在这些细节上。

最常碰到的问题是元素等待时间不够。很多新手习惯点击后立刻找下一个元素,遇到网络慢就失败了。我的做法是统一封装一个等待函数,每次查找控件都设置显式超时,超时后再重试两到三次,而不是直接报错。别看这个改动简单,它能让用例通过率提升一大截。

弹窗处理也是一门功课。首次安装应用,系统可能弹出通知权限选择框;登录成功,App 可能弹出活动推广提示;切换到后台再回来,可能又有版本更新弹窗。这些弹窗出现的时机完全不确定,最稳妥的办法是在关键操作前后主动检查常见弹窗,用固定的控件特征去关闭,没有出现就跳过。

坐标点是最后手段,只有拿不到任何控件信息时才用。坐标脚本换个分辨率就失效,维护成本极高。我通常让坐标脚本只出现在临时截图、临时点按的辅助任务里,不进入正式回归用例。正式用例还是一定要基于控件树去做,长期性价比最高。

4. App三:ESP32蓝牙调试伴侣,硬件联网调试的好帮手

4.1 为什么要单独准备一个蓝牙调试App

做 ESP32 开发时,经常需要从手机发指令给开发板,或者看开发板上的传感器数据。如果用电脑串口监视器,人就得坐在电脑前,来回切换很不方便;如果用手机配合蓝牙调试工具,就能边操作硬件边看结果,效率高很多。所以一款好用的蓝牙调试工具,对硬件开发者来说几乎是日常必备。

ESP32 支持蓝牙 4.2,也兼容低功耗蓝牙 BLE。在 BLE 的开发模型里,设备之间通过服务 Service 和特征 Characteristic 通信。一个服务相当于一个功能模块,服务下面挂着多个特征,每个特征负责一种数据收发。调试工具的价值,就是把这个模型可视化,让人一眼看清当前设备有哪些服务、哪些特征、数据的收发格式。

我常用的调试工具形态有两种:一种是现成的通用 BLE 客户端,比如 Nordic 的 nRF Connect、LightBlue,打开就能扫描附近的蓝牙设备,适合快速看设备和数据的原生形态;另一种是针对自己项目写的简易调试界面,适合经常需要反复发送特定十六进制指令的场景,把常用指令预设成按钮,点击即发送。

4.2 蓝牙通信参数从哪几个维度设置

通用 BLE 调试工具一般都能自定义几类关键参数。第一是设备名称和广播过滤,扫描列表里设备一多,快速过滤就显得非常重要,不然很容易连接到其他同名设备上,误发指令造成混乱。

第二是服务与特征的 UUID。固件里写死了哪个 Service UUID、哪个 Characteristic UUID 负责读写,App 这边也要跟着填对。这个值不匹配,就搜不到对应的服务,更谈不上下发数据。

第三是数据格式。一般有十六进制 HEX 和 ASCII 两种。不同固件实现不一样,有的模块走 Modbus 协议,就必须用 HEX 格式看原始字节;有的模块把数据拼成 JSON,用 ASCII 阅读起来更方便。

第四是 MTU 值,它代表单包能传多少字节。默认值比较小,如果一次传输的数据比较长,需要先把 MTU 协商大,否则数据会被截断。调试工具一般能主动协商 MTU,但也要固件端配合支持。

一次典型调试中,我会按下面这个表逐项核对,缺一项就可能导致调不通。

参数项含义常见取值调试建议
设备名称广播时显示的名称自定义短名称尽量用字母数字
Service UUID服务标识16位或128位必须与固件一致
Characteristic UUID特征标识16位或128位区分读写与通知
数据格式收发数据的编码HEX / ASCII看固件侧实现
MTU单次传输数据大小23-517字节先在固件里协商
通知开关是否订阅特征通知启用/停用收不到实时数据时检查它

4.3 实际联调过程中的经验

蓝牙调试中我踩过最多次数的坑有三个,个个都很隐蔽。

第一个,连接成功但收不到数据。这种情况基本是特征通知开关没打开。BLE 设备并不会主动把数据推给手机,得先在调试工具里点一下通知订阅,手机才能持续接收。只连接却忘记订阅,屏幕上自然一片安静。不少新手在这里卡住,还以为是固件数据没发出来。

第二个,收到的十六进制数据和预期不符。这时先别怀疑固件出错,多数是大小端问题或数据类型问题。设备端发送的数据如果是小端序 Little-endian 编码,App 端按大端序 Big-endian 解出来就会错。调试工具一般能切换显示格式,但最直接的方法还是看原始字节,再把协议文档拿出来一字一句对。

第三个,连接经常掉线。BLE 为了省电,设备空闲时可能进入休眠状态。如果固件没有做好连接参数协商,手机端就会觉得链路异常。排查思路不是死磕调试工具,而是回到固件把广播间隔和连接参数调好,同时检查电源模块是否稳定。硬件问题和软件问题,最后都会表现为通信不稳定,但根子往往在底层硬件那边。

5. App四:支持自定义书源的阅读器,内容聚合的后台规则

5.1 书源的本质:一套解析规则

很多人第一次听“书源”会觉得它代表一堆内容资源,其实书源真正的主角是一套解析规则。阅读器本身只负责展示界面和管理书架,内容从哪里来、页面结构如何拆分,全由书源规则定义。

一个相对完整的书源规则,通常包含首页地址、列表页选择器、详情页选择器和正文选择器。阅读器拿到规则后,会访问内容页,根据选择器把标题、封面、正文从密密麻麻的 HTML 里抠出来,再按阅读器的排版方式展示。这个过程本质上就是一次结构化抽取。

规则的写法并不高深。如果你熟悉 CSS 选择器,看一遍规则样例基本就能上手。复杂的地方在于两点:一是不同网页结构差异很大,有的规则要加翻页处理;二是网站改版会导致旧规则失效,需要长期维护更新。所以我的经验是,书源宁少勿滥,只挑真正高频使用的内容源去建规则。

我自己使用这类 App,大多是把个人博客、技术站、RSS 订阅聚合到一起。自定义书源的价值在于,你能用一个 App 管理所有习惯阅读的内容源,而不必每天来回切换。注意,阅读器本身不生产内容,内容是否授权、是否合规,使用的人应该心里有数。只用来收藏和处理自己有权限阅读的内容,才走得长久。

5.2 自己写一条解析规则的步骤

写规则前,先找一个目标内容源,确认页面能正常访问,再观察结构。拿技术博客举例,列表页的条目结构常常是一条标题加一段摘要,每条下面有正文链接。先打开页面源码,找到标题所在的 HTML 结构,再做选择器匹配。

写规则的第一步,是确认列表页里每条内容的重复结构。第二步是写列表项选择器,把一条条文章当作一个整体容器。第三步是从容器里分别提取标题、链接和时间字段。第四步是写详情页正文选择器,指向正文所在的容器。

下面是一个极其简化的规则片段,方便理解字段含义:

{ "源名称": "我的博客源", "首页地址": "https://example.com", "列表项": ".post-item", "标题": ".post-title", "链接": ".post-title a|href", "正文": ".post-content" }

规则写完后,先在阅读器里做一次预览。大多数支持自定义规则的阅读器都有预览入口,能看到字段是否解析成功。预览正常,再保存并加入书架;预览失败,回到页面源码里核对选择器。我通常会先用电脑浏览器打开目标页面,直接在开发者工具里试 CSS 选择器,验证好了再填回 App,这样效率比反复切换 App 高很多。

5.3 使用书源的边界与注意事项

书源规则虽好,但不要指望一次建好一劳永逸。网站 HTML 结构调整、加验证码、限制访问频率,都是常见失效原因。我一般会定期检查一次规则的可用状态,把失效的源及时停用。阅读器通常会显示规则请求失败的日志,把日志调出来看,比盲改选择器高效得多。

备份规则也很重要。有些阅读器支持把规则导出成文件,我会把全部规则定期导出备份。换手机或重装 App 时直接恢复,不用重新一条条配置。我习惯在云盘里放一个书源备份目录,每月同步一次,这样即使手机丢了,配置也不至于全部清零。

内容合规方面必须多说一句:只使用自己有权限访问的内容源,不要拿书源去批量抓取无授权的站点内容。商业内容有授权关系的,该买会员还是得买会员;未经授权的大规模抓取,既破坏生态也给自己惹麻烦。工具本身是中性的,用得好是效率提升,用得不对就成了风险源头。

6. 四款App联动起来,效率远不止四倍

6.1 抓包数据怎么反过来喂给自动化脚本

四款工具拆开用,每一款的收益都有限,组合起来才真正省时间。

最典型的一组联动是抓包和自动化测试。写完自动化脚本后,发现某个页面操作总是报错,别急着改脚本。先打开抓包工具跑一遍相同流程,把接口返回的数据和状态码看清楚。问题往往出在后端接口返回了异常数据,而脚本这边还在傻等页面元素出现。我以前遇到过一次用例反复失败,查了半天前端,最后抓包一看是接口返回了一个新的错误码,后端改了逻辑没同步字段,用抓包十分钟就定位了。

反过来,做接口回归时也不需要每次都启动整个 App。抓包工具记录下来的请求结构,可以直接转化成一批简单请求脚本,在自动化框架里定时执行。接口层验证和 UI 层验证本来就可以分开,UI 层只做关键路径验证,接口层做全量回归,两者配合覆盖更全面。

6.2 硬件联调时抓包工具能帮什么忙

ESP32 这类硬件开发板上报数据到服务器时,前端需要有明确的协议。调试阶段,我会一边用蓝牙调试工具确认设备本地收发的原始数据,一边用抓包工具看云端接口接收到什么内容。两块拼起来,才能区分是设备端发错了,还是服务器端解析错了。

有一次排查传感器数据异常,我先用蓝牙调试工具确认了设备输出的字节数组,再用抓包工具看了服务器收到的 JSON,结果发现是协议文档把字段顺序写错了,设备端和服务器端都没有问题。如果只盯着一端看,很可能要排查好几个小时。蓝牙工具负责看设备侧,抓包工具负责看云端侧,两边对账才能快速定位协议问题。

6.3 书源规则的调试也能用抓包思路

书源规则失效时,我会用调试接口的方式去分析。先看页面真实请求返回的 HTML,再做选择器匹配。这个思路其实就和抓包一样:把网页当成接口,把 HTML 当成响应参数,选择器当成解析规则。掌握这种思维之后,无论是写抓包过滤规则、自动化脚本定位元素,还是调试书源规则,都能更快上手。

我甚至会在电脑调试工具里直接模拟书源请求,把返回内容和选择器结果打印出来,确认逻辑正确后再同步回手机。这样至少省去来回打开阅读器、反复刷新列表的时间,一套流程下来,书源维护成本能降低不少。四款 App 联动起来,就形成一个完整链路:分析网络请求,驱动自动化脚本,连接硬件设备,聚合内容数据。它们各自解决局部问题,组合之后就是一个很实用的小型开发工作台。

如果你刚接触这类工具,我建议不要一口气全装,先把抓包工具用熟,它几乎是所有网络调试的基础。等遇到重复点击的痛点了,再引入自动化脚本。手感上来了,再考虑蓝牙联调和阅读器书源规则。这几款 App 的配置和规则,我都会定期做好备份,换新手机后半小时就能全部恢复。工具不是越多越好,关键是到定位问题时,你能不能立刻想到该用哪一个。希望这篇拆解能帮你少走点弯路。

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

大模型时代的空间底座:镜像视界、黎阳之光、潭龙东海的AI含金量实测大模型浪潮席卷产业数字化,数字孪生、视频孪生赛道的竞争逻辑已经彻底改写。

大模型时代的空间底座:镜像视界、黎阳之光、潭龙东海的AI含金量实测 大模型浪潮席卷产业数字化,数字孪生、视频孪生赛道的竞争逻辑已经彻底改写。 过去行业比拼三维渲染精度、大屏视觉效果、沙盘逼真度;如今空间智能底座的AI原生能力、认知推…

作者头像 李华
网站建设 2026/9/7 18:40:46

玻璃钢风机选型与厂家评估指南:2026年实战避坑框架

每个做化工、做环保工程的采购,几乎都绕不开一个很实在的问题:玻璃钢风机怎么选。尤其是到了2026年,环保排放标准更严、项目交付周期更紧,风机作为废气处理系统里的核心动力设备,选得好不好直接决定整套系统能不能稳定…

作者头像 李华
网站建设 2026/9/7 18:37:55

给Linux监控软件Monitorix 3.5添加登录认证密钥

monitorix是一个不错的Linux系统监控软件。很多可能不懂E文的朋友不知道怎么给Monitorix添加登录密钥。 下面就来简单介绍下吧&#xff08;Monitorix 安装的很简单&#xff0c;不懂可以留言&#xff09;&#xff1a; 相关配置文件部分&#xff1a; <httpd_builtin>enabl…

作者头像 李华
网站建设 2026/9/7 18:37:38

LeetCode 等和矩阵分割 II:前缀和+哈希表高效解法

1. 题目理解与整体设计思路 1.1 这题到底要我们干什么 先说题意吧。题目给了一个 m 行 n 列的矩阵 grid&#xff0c;我们要判断能不能用一条水平线和一条垂直线把整个矩阵切成四个非空的子矩阵&#xff0c;并且这四个子矩阵的元素和完全相等。能切出来就返回 true&#xff0c;…

作者头像 李华
网站建设 2026/9/7 18:36:41

Docker Desktop完全指南:从安装部署到启动故障排查

Docker Desktop 这个东西&#xff0c;但凡这几年做开发的朋友应该都不陌生。你要是写后端、搞前端工程化、做数据清洗&#xff0c;或者折腾一些开源项目&#xff0c;基本绕不开它。说白了&#xff0c;它就是让你在 Windows 和 macOS 上不用开虚拟机、不用装 Linux 就能直接跑容…

作者头像 李华
网站建设 2026/9/7 18:35:43

猫抓Cat-Catch:3分钟上手,嗅探并下载任意在线视频资源

猫抓Cat-Catch&#xff1a;3分钟上手&#xff0c;嗅探并下载任意在线视频资源 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 视频页面上没有下载按…

作者头像 李华