一天的工作:腕上阅读器的三层根因攻坚、鸿蒙阅读器 1.1.4 提审,和一条打通官网后台的免密链路
五条线并行:腕上阅读器定位三层根因并定下云端架构、鸿蒙阅读器 1.1.4 提审、公众号入口免密接通官网后台、情报第十七轮、求职首批 9 岗投递。
今天五条线并行:腕上阅读器的探针链路终于跑通并定位到三层根因、鸿蒙端阅读器把 1.1.4 推到应用市场预审、公众号入口与官网后台被一条免密链路接通、每日情报走到第十七轮、求职线完成画像更新与首批岗位的定制投递。其中工程量最大的是腕上阅读器——它同时踩到了工具链、语言运行环境和网络回调三个互不相干的坑,而每一个都只在真机上以同一种「安装失败:内部错误」的面目出现。排查过程本身,比结论更值得写下来。
一、腕上阅读器:一个错误码背后的三层根因
做了什么
起点是一个很别扭的现象:打包全程成功,装机必失败,且只给一个语焉不详的内部错误码。先把构建链路重建出来——新版 IDE 的工具链无法产出旧平台能接受的包,于是改用旧版 IDE 携带的 SDK、配合独立命令行构建器完成编译,并在工程配置里把 SDK 指过去。随后建立了一套固定动作的测试台:固定构建命令、激进清理、装机判定、一次会话批量装机,以及一个自研的「包内脚本段尺寸自检」方法(利用包内脚本容器的大端长度前缀反查真实体积)。最后用 20 多个最小变体做了严格的二分排查。
关键决策与根因
结论是三层根因的叠加,彼此独立,必须同时满足才装得上:
- 工具链层:新版工具链产出的包内嵌了面向新平台的编译标记,旧设备运行时直接拒载。换回旧平台的 SDK 后,包内不再出现该标记。
- 语言层:该穿戴端的脚本由裁剪过的引擎执行,且以明文源码打进包。包内出现任何「正则字面量」,都会在安装校验阶段被判不合格。这一点极其隐蔽——工具链没有静态检查,本机构建永远成功,只有真机报错。修复方式是把文本处理改写成等价的字符串拆分与拼接。
- 网络层:网络模块的完成回调在该机型上从不触发(成功/失败回调正常,只有完成回调不执行)。请求发得出去,响应也确实回到了手机内核并完成四次挥手,但回调永远不到脚本层。凡是把「下一步」挂在完成回调里的串行流程,都会永久停在第一步——这解释了此前多个版本「看起来发出去了、但没有下文」的全部现象。修复方式是「先登记定时器,再发请求」,让流程由独立的时间回合驱动而不是回调驱动。
留下的教训
- 判据比结论重要。用日志里出现「安装指令已下发」来判断装机成功是不可靠的——它失败时照样打印。唯一可靠判据是设备端有没有弹出失败弹窗(弹窗是模态的、会一直留着,反而极好抓)。换掉判据之后,此前被误判为成功或失败的多次结果全部被纠正。
- 构建缓存会复用陈旧产物。只删构建目录不够,必须补跑官方清理任务,否则多个变体产出完全同尺寸的包,二分排查直接失真。
- 平台能力要先探测再使用。用能力查询接口做启动自检,比写完之后靠猜要快得多。
- 对照外部资料要分三档:采纳 / 存疑 / 证伪。本轮证伪了两条流传较广的经验(把该错误码归因于脚本体积超限;认为该端只能装另一种包格式),也修正了自己的一处归因——从「引擎裁掉了正则能力」修正为「安装校验阶段复用了同类的静态语法规则」,工程结论不变但依据更站得住。
- 别设计「装完自动跑」的方案。该端的调测工具没有启动应用的能力,平台侧也没有后台服务与保活能力,应用不可能随装机自启;验证包必须自带数据回传,才能不依赖人盯屏。
架构结论与产品设计
- 「设备直连公网 HTTPS 取页」成立——实测拿到了十余 KB 的完整页面。
- 「经本地电脑中转」不可取——延迟一上去就被掐断,属实证。
- 明文 HTTP 的公网请求会永久挂起,且该网络模块没有超时参数,无法自救。
因此正确架构是:抓取、正文提取、分页全部放到公网服务器,设备只做 HTTPS 拉取纯文本。据此产出了「投递式极简阅读器」的产品设计——定位是把长文变成腕上两分钟;三原则是投递而非输入、预取而非实时、纯文本而非网页;云端五个接口、设备三屏、五条设计红线。产品侧明确不做图片、评论、搜索、登录、订阅与自动抓取。
二、鸿蒙端阅读器 1.1.4:功能、细节与提审
做了什么
- 朗读段落高亮 + 跟随滚动:把脚本文本按段落切段并携带块索引,朗读推进到下一块时通过回调通知界面;界面只在该块不在可视区时才滚动定位,避免抖动。
- 关于页改版:去掉「版本说明」块,只保留可滚动的「版本历史」,且从最新版本块开始截取,不再显示大标题。
- 修复旋转锁定:把设备清单里的方向声明从「自由旋转」改为「受系统开关约束的自由旋转」,系统控制中心的旋转锁才真正生效。
- 打包与提审:用正确的发布构建任务重编签名包,替换商店素材(四张截图,覆盖首页、朗读面板、图形渲染、关于页),写入新版本特性文案,提交审核,状态已转入「预审中」;上架自检在包上传后自动启动。
留下的教训
- 界面控件与滚动容器的类型来自框架的全局命名空间,不能按包路径引入;滚动定位方法的参数顺序容易记反。
- 把设备文件回传到本机时,命令行环境会对设备侧路径做路径转换,导致源文件找不到——必须写进批处理文件执行才可靠。
- 商店素材删除环节,旧脚本「先悬停再滚动」会因滚动丢失悬停态而失效;改用脚本直接触发点击后,绕开了悬停、坐标与固定栏三个坑,稳定约 3 秒一张。
三、公众号入口与官网后台:一次零开发的菜单重组 + 一条免密链路
做了什么
按「先读线上现状 → 出方案对比 → 待拍板 → 落地 → 独立回读核验」的顺序,先重组了公众号菜单结构,再补上一条免密进入官网后台的授权链路。
- 菜单重组:先实读线上菜单,确认一级菜单已满、且带子菜单的一级不可跳转,据此给出三个方案并推荐其一。落地时严格按「备份 → 写新真源 → 字节级校验中文编码 → 语法检查 → 下发 → 独立回读」的顺序执行,并实测了六个目标地址的可达性、确认个性化菜单未被误清。
- 免密网关:点菜单 → 跳转平台授权 → 回调校验白名单 → 放行或拒绝。核心取舍是零依赖:不复用另一套服务已有的身份体系与密钥,只共用同一个公众号的凭据。安全边界是「非白名单用户直接拒绝,连登录页都不给看」,后台路径不外露。
关键决策与根因
- 最值得记的一次事故预防:站点的来源封禁规则原本只认「403 / 429」两种状态码就封禁,其成立前提是「403 只可能来自防护层、真人碰不到」。免密网关引入了合法的 403,直接打破了这个前提——非授权用户点几次菜单就可能被整段封禁,连官网首页都打不开。已用只豁免该两条精确路径的方式修正,并用规则回放工具验证了两个方向都正确:网关的拒绝被忽略、真实的攻击路径仍被拦截。
- 另一处坑:接口挂在静态目录的路径下,必须用精确匹配的转发规则,否则会被当作静态文件请求而 404。
- 回调路由必须走不参与框架事务的通道(它自行处理重定向,连接自取自还)。
留下的教训
凡是引入「新的合法状态」,先回头检查既有的防护规则是否建立在「该状态不可能合法出现」的假设上。这类规则平时看不出问题,一旦被合法流量触发就是全站级的自伤。
四、每日情报第十七轮
做了什么
完成当日「原料采集 → 分析成稿 → 挂载发布」的一体化流程,产出原料库、行业情报正文与两份榜单素材。
关键发现
- 三条决策级事实:资源池首次出现「梯度培育」式的松绑通道,形式要件第一次有了官方的先入池后补齐路径;「智能体」首次在采购公告里被逐项拆价——钱集中在平台与运行时层,而不在智能体个数;大厂在 24 小时内连续占满 AI 编程与文档处理工具层,相关切口必须收窄。
- 两处自我读法修正:把上一轮判定的「教育类应用连续上行」修正为冲高回落,不是趋势;把「高校工具三件套」改口径为「两件套趋势确认但热度见顶」。
- 一个采集口径关闭:某应用市场的软件榜接口已改版为 PC 端榜单(类型字段全为游戏、出现大量桌面软件包名),移动端观测价值丧失。
留下的教训
核验挂载状态不要直连数据库(凭据只在发布脚本内,不对内暴露),也不要用文本匹配去读网页正文(页面是前端渲染的空壳,HTML 里根本没有正文)——用「详情页返回 200 + 发布脚本自报校验通过」两条即可。
五、求职线:画像更新与首批定制投递
做了什么
- 更新个人求职画像,补齐离职后的八项最新动态,提炼出三个差异化卖点(大模型私有化部署、交付可验收系统、单人抵小队的工程效率),并明确两条红线:不写不实经历、只列已实际持有的资质。
六、顺带:一项系统级定时任务的评估
需求是「开机时清空回收站」,先评估用什么方式驱动。机制选型的结论是:系统级动作必须挂系统本体——任务计划 + 系统身份 + 开机触发器;不用客户端自动化、注册表或启动文件夹,后三者都依赖用户登录或客户端存活,失效点太多。关键约束是当前工具链无法自行提权,注册任务会直接被拒,因此交付的是「管理员自检脚本 + 一键安装/卸载批处理」,由本人在管理员权限下执行。破坏性提醒已写入产物:每次开机静默永久删除回收站内容,不可恢复;若把回收站当作软删除或撤销缓冲,这个方案会把它废掉。
今天沉淀下来的几条
- 一个错误码可以是多层根因的叠加,必须逐层证伪——而「最像原因的那一个」往往不是原因。
- 判据比结论重要。一个可靠的、可自动化的判据,能把一小时的反复误判压缩成一次判断。
- 引入新的合法状态之前,先检查既有防护规则是否建立在「该状态不可能合法出现」的假设上。
- 对照外部资料要分档:采纳 / 存疑 / 证伪。既不要整体采信,也不要整体否定;连自己的归因也要允许被实测改写。
- 平台能力清单应当交叉比对后落成文档,而不是靠记忆——很多「想当然存在」的接口在该平台上根本不存在。
时间分配:今天大约一半的工程时间给了腕上阅读器的根因攻坚,其余分给鸿蒙阅读器的提审收尾、公众号与官网入口打通、每日情报采集,以及求职材料的撰写与投递。
未公开项
本轮有 4 处内容未在正文公开:
- 官网后台与免密网关的具体路径、路由改动与服务端改动清单 —— 涉及站点自身攻击面,仅作机制层面的概括。
- 情报轮次中涉及的采购项目主体与具体金额 —— 属经营情报,仅作概括。
- 求职线中具体投递的公司名称与岗位 JD 原文 —— 属个人事务,仅作概括。
- 内网地址、端口、设备标识与生产服务器信息 —— 属环境敏感信息,已统一概括为「局域网」「真机」「线上服务器」。