# 华为 ALN-AL00 / HarmonyOS 4.2 营销通知工具(命令行) 限定 `ALN-AL00 4.2.0.223(C00E215R5P16)`、Android 12 / SDK 31。其他型号或版本拒绝修改通知,不套用荣耀路径。 2026-10-30 在一台本机的人工审核清单上,逐项回读确认关闭 48 个渠道、31 个候选原已由应用通知权限屏蔽。约 164 秒后的只读回查仍满足目标,清单外渠道及原权限模式未变。 计数口径:对该次 79 条候选的 `(包名, 渠道ID)` 在前后快照中逐条匹配,结束时重要级别为 0 的计 48 条;仍非 0 但所属应用原通知权限为禁止的计 31 条,剩余 `79 - 48 - 31 = 0`。原始清单和快照含个人资料,只在机主本地备份,不进入公开文件;这些计数不是新脚本的测试样本成绩。 这是路径实测记录。参数化后的新代码只做离线回归,尚未在手机上整轮重跑,不填写新脚本的真机耗时,也不宣称长期不被系统重同步。 范围是源码里的命令行工具 `tool/huawei_channels.py`。它要先人工审核清单,桌面客户端没有清单选择流程,所以不注册成机型脚本,客户端不会自动运行它(合并 PR #332 时调整:作为机型脚本时,没有清单就报失败,Mate 60 Pro 用户在客户端里每次都会多一个失败步骤)。没有验证打包版。 ## 使用 先备份和扫描,人工逐项审核候选,仅保留明确希望关闭的渠道。第三列必须是当前渠道名,第四列必须是本机显示的应用名;名称变化会要求重新审核。 ```bash python3 "tool/run.py" -s "<序列号>" backup python3 "tool/run.py" -s "<序列号>" chan-scan python3 "tool/huawei_channels.py" -s "<序列号>" verify "<审核后的清单.tsv>" python3 "tool/huawei_channels.py" -s "<序列号>" off "<审核后的清单.tsv>" python3 "tool/run.py" -s "<序列号>" finish ``` 不带清单不会选择备份里的历史应用列表。这个步骤不暂停快应用,也不修改其他广告/隐私开关;快应用仍使用独立的检测、确认及 `quickapp off/on` 流程。 ## 恢复 仅将本次确实关闭且原来开启的渠道整理成恢复清单,不要将原已关闭的渠道一并开启: ```bash python3 "tool/huawei_channels.py" -s "<序列号>" on "<本次实际关闭的清单.tsv>" python3 "tool/run.py" -s "<序列号>" finish ``` 工具保存改动前渠道、总开关、权限模式和插电常亮快照到 `backups/`。恢复命令以重新开启渠道为目标,原重要级别可据快照手动核对。恢复新代码也尚未做真机重跑。 ## 本机发现与边界 - 同一应用的多个候选在同一页连续处理,避免每个渠道都跳到原生分类页。 - 只接受已核对应用名称的 Android 应用通知页与独立、明确命名的渠道复选框;不点击应用通知总开关。 - 滚动前核对应用身份;页眉滚出屏幕后仍要求 Activity 不变。相同位置的重复节点去重,真正多解时跳过。 - 每步检查全部清单外渠道和总开关;出现差异就停止,不再声称盲点一次就已回退。 - 原已禁止通知的应用保留原状;`default → allow` 的已知副作用恢复原 `default` 并回读,其他模式差异报错。 - 华为原生页会合并类别;曾观察到进入该页后渠道旧状态重新同步。这里只报告实际回读,不保证永久关闭。 - 不关闭整个“其他/服务提醒”分类,不默认选择路况、直播或媒体发送提醒。是否包含此类功能通知必须由机主明确审核清单决定。 - 已脱敏的兼容性反馈:[Issue #330](https://github.com/rddmwmddr/android-ad-cleaner/issues/330)。 ## 离线验证 本轮新增 `tests/test_huawei_channels.py` 的 21 项设备无关回归全部通过。仓库全量回归计 406 项:404 通过、2 项按条件跳过(Windows 剪贴板、仓库外服务端契约)。macOS 测试时仅在进程内将 GUI 默认数据目录定向到临时目录,未修改 GUI 源码或用户配置。 ```bash python3 -m unittest discover -s "tests" -p "test_huawei_channels.py" -v python3 -m unittest discover -s "tests" python3 -m ruff check --select F,E9 "tool" "tests" "gui" ``` 静态检查使用仓库 CI 指定的 ruff 0.17.3。以上是本地离线结果,不代表已运行 GitHub Actions、打包或真机复跑。