# Changelog ## 2.3.0 - 重构 UserScript 启动可靠性:document-start 注册和页面提交补偿共享幂等标记,修复部分厂商 WebView 接受注册却不执行、以及脚本更新后看似突然失效的问题。 - UserScript 兼容层新增 `document-body`、显式正则 flags、相对 URL 解析、GM 默认值存在性、UTF-8 资源回退及更准确的 URL 匹配语义;生成脚本现有真实行为回归测试。 - 密码库新增默认开启的 HTTPS 自动填充与登录后保存提示;支持多账号、多步登录、延迟登录弹窗、开放 Shadow DOM、同源 iframe 和框架受控输入。 - 自动填充严格匹配主机,跳过新密码/确认密码/OTP,不覆盖非空输入、不自动提交;保存捕获要求可信用户事件、短期令牌和本机确认。 - 媒体发现加入有界实时媒体事件、Resource Timing、DOM/Shadow DOM/同源 iframe、元数据、JSON 状态和内联地址聚合,补齐无扩展名 Range 请求与 blob 去重。 - 清单检查从 HLS 扩展到 DASH 与 Smooth Streaming,显示轨道、分辨率、码率、分片、直播/点播与加密标记;DRM 与无法还原的 blob 会如实提示。 - 请求拦截热路径复用一次请求头读取,并让 UI 线程的冗余资源回调先走无分配快速门禁;三档性能模式均保留媒体识别。 - 主页、冷启动首航、脚本、密码、媒体及导航策略均通过静态和 JavaScript 行为回归;APK 为 219,605 字节。 - versionCode 升至 92、versionName 升至 `2.3.0`;applicationId 与证书 SHA-256 `80daf48c091d6174981c2a176360b42ac32463d23ddc9e5f3c95c0951e5e3da9` 不变,可直接覆盖安装。 ## 2.2.6 - 修复 2.2.5 的主页交互回归:部分 System WebView 会阻塞 `onJsPrompt()` 回调内的同步导航,导致搜索框、快捷收藏与收藏文件夹全部无响应。 - 主页命令现在先确认 prompt、退出 WebChromeClient 回调,再通过当前 WebView 的消息队列异步执行;执行前二次核验活动标签、内置主页与信任状态。 - 主页命令校验使用 WebView 的实时 `view.getUrl()`,不再依赖厂商实现可能传入不同值的回调 URL。 - 主页刷新会先清除对应 WebView 的渲染缓存,再重新生成页面,确保刷新按钮始终产生实际效果。 - 内置主页脚本改为 ES5 兼容语法;新增生成页面行为测试,覆盖搜索、网址输入、引擎切换、普通收藏和收藏文件夹。 - 普通与隐私窗口采用相同的非重入命令路径;冷启动 10% 单次恢复守卫继续保留。 - APK 为 211,413 字节;versionCode 升至 91、versionName 升至 `2.2.6`,包名和发布证书不变,可直接覆盖安装。 ## 2.2.5 - 修复 2.2.4 在部分 System WebView 上仍会冷启动停在 10% 的问题:`onPageStarted()` 只代表导航被接受,不再被误判为网络已推进。 - 内置主页使用随机令牌认证的 prompt 命令通道,搜索、网址输入、引擎切换和快捷入口不再先触发 `median://` 页面跳转。 - 首航只有进度越过 10% 后才退出守卫;450 毫秒仍停滞时,对已接受的目标执行原生 `reload()`,否则重新提交 URL。 - 恢复路径不再在同一消息内执行 `stopLoading()` 后紧接 `loadUrl()`,避免取消动作反过来吞掉补发请求。 - 首页 JavaScript 复用 DOM 查询、事件和编码操作,安全令牌从可信 meta 读取;所有首页功能与自定义能力保持不变。 - 原始 raw-DEFLATE/Stored 条目、资源和权限不变;APK 继续为 207,317 字节。 - versionCode 升至 90、versionName 升至 `2.2.5`;包名和发布证书不变,可直接覆盖安装。 ## 2.2.4 - 修复冷启动主页第一次搜索或打开快捷网站时,WebView 可能只报告约 10% 进度、吞掉主框架请求并必须手动刷新的问题。 - 主页内部命令先完成拦截,再由当前 WebView 的消息队列提交 HTTP(S) 导航,避开部分厂商 WebView 的回调重入取消行为。 - 首航守卫不再接受进度值作为成功证据,只由主框架 `onPageStarted()` 确认;无开始回调的单次兜底从 1.2 秒缩短到 450 毫秒。 - 首个 WebView 在绑定为活动标签后立即使用前台渲染优先级;站点设置热路径不再重复配置与站点无关的渲染器策略。 - UserScript 公共运行时复用 Promise、延时回调和 XHR 终止分发逻辑,保留全部 GM/GM4 API 与旧 WebView 降级能力。 - 原始 raw-DEFLATE/Stored 条目方式、六个资源文件和权限集合不变;APK 维持 207,317 字节。 - versionCode 升至 89、versionName 升至 `2.2.4`;包名和发布证书不变,可直接覆盖 2.2.3。 ## 2.2.3 - 首次导航确认改为由真实加载进度和 `onPageStarted` 共同确认;视图尚未挂载时延后补发,1.2 秒后最多执行一次安全兜底。 - WebView 状态保存加入 256 KiB Binder 上限;超限时只保留 URL 与轻量会话信息,避免恢复事务过大导致闪退。 - UserScript 主数据与最近可用副本使用原子写入;共享兼容运行时、document-start 模板和调度器减少重复解析,同时保留并扩展 GM4、Cookie、资源与 XHR 兼容能力。 - 媒体清单解析新增 HLS 变体、相对 URL、CODECS、分辨率、带宽、加密与直播/点播识别;无后缀资源继续按 MIME、DOM 和 Resource Timing 探测。 - 合并后台执行器、十六进制/字节/错误文本/安全关闭逻辑,压紧站点设置表示并优化 WebViewCompat 单来源热路径;未删除浏览器功能。 - 构建只走原有 raw-DEFLATE 路径,资源文件与 ZIP 条目方法不变,不使用 Zopfli 或替代压缩器。 - APK 为 207,317 字节,比 2.2.2 减少 4,096 字节(1.94%);versionCode 升至 88,包名与发布证书不变,可覆盖安装。 ## 2.2.2 - 冷启动门禁改为等待 WebView、本地数据、Resume、视图挂载和真实下一帧;回调执行时二次检查状态,修复 `onResume` 早于窗口挂载导致的首航丢失。 - 新增每 WebView 独立的首次网络导航确认与单次重试;覆盖外部链接、会话/系统状态恢复、新建及冻结标签、普通与隐私窗口。 - WebView 状态改存嵌套 Bundle,恢复 HTTP(S) 时先恢复联网与站点策略;厂商 WebView 只恢复历史但不启动主框架时由确认守卫补发一次。 - 离线、主页、在线页采用显式设置转换;MHTML 的网络阻断和 JavaScript 关闭不再污染同站网页,主页也会恢复图片与脚本基线。 - 启动本地存储分两条后台链并行解码,UserScript document-start 载荷移出 UI 线程;大型过滤规则继续延后到首屏空闲。 - 隐私窗口同样等待 attach + 下一帧,并加入首航确认;Cookie 清理、过滤规则、Resume 任意完成顺序均只导航一次。 - 下载唤醒锁使用有界超时与传输续租,保留长文件稳定性,同时防止异常路径无限持锁。 - 构建会在 zlib 与本机 libdeflate 候选中选择最小的可回解 raw-DEFLATE;无收益的 R8 类重打包已撤回。 - APK 为 211,413 字节,比 2.2.1 减少 4,096 字节(1.90%),比可用基线 2.1.17.3 减少 51,210 字节(19.50%)。 - versionCode 升至 87、versionName 升至 `2.2.2`;applicationId、权限集合和发布证书不变,可覆盖安装。 ## 2.2.1 - 修复冷启动首次网页可能不发起有效网络加载、必须手动刷新一次的问题:初始化阶段不再加载临时主页,启动完成只提交一个最终导航目标。 - 新增统一 HTTP(S) 导航入口,在站点策略前后显式关闭离线内容的 `blockNetworkLoads`,避免从 MHTML/主页状态继承网络阻断。 - 新增启动导航策略回归测试和静态门禁,禁止恢复“主页 → 会话/外链 → 排队输入”的多次首屏导航。 - UserScript 兼容运行时由“每个脚本复制一份”改为“每页共享一份、每脚本独立实例”,减少页面脚本解析、编译与注入体积。 - 本地权限脚本不再发起必然失败的原生 prompt;`GM.xmlHttpRequest` Promise 补齐 `abort()`、超时与中止拒绝,`GM_info` 补齐 source、更新地址和 run-at 等常用字段。 - 媒体发现新增 Smooth Streaming、双重 URL 编码、RMVB/AVI/APE 等格式,以及 Open Graph、Twitter stream、`srcset` 和更多延迟加载字段。 - 网络拦截热路径对无媒体标记的普通 JS、CSS、图片和字体执行无分配快速否定;扩展名未知、编码地址和 MIME 候选仍进入完整识别,不以删减换速度。 - 保持完整 R8 优化、资源收缩、稀疏资源表、原始 DEFLATE 与 v2 单签名;APK 为 215,509 字节,与 2.2.0 相同,比可用的 2.1.17.3 小 47,114 字节。 - versionCode 升至 86、versionName 升至 `2.2.1`;applicationId、权限集合和稳定证书保持不变,可覆盖 versionCode 85。 ## 2.2.0 - 旧版 WebView 不再跳过带 `@grant` 的脚本;无原生 document-start 桥接时自动使用同源存储、XHR、剪贴板和打开标签页降级实现。 - UserScript 兼容层新增批量值 API、资源 URL 大小写别名、`GM_cookie` / `GM.cookie`、二进制请求体、`document` 响应和现代 Promise 式 `GM.xmlHttpRequest`。 - 本地权限脚本恢复默认 frame 运行;需要浏览器桥接的权限继续限定顶层 frame,避免跨域子框架借用顶层授权。 - 元数据键改为大小写兼容,扩展本地化名称/说明选择;`@match` 的 `*.` 主机兼容裸域名,正则与 URL 匹配不再受域名大小写影响。 - 媒体发现新增无后缀 MIME/查询参数、编码 URL、HLS/DASH 清单、fMP4/TS 分片及更多音视频格式识别。 - 媒体中心按需检查 `currentSrc`、延迟加载属性、预加载链接、Performance Resource Timing、JSON-LD 和内联直链;不增加常驻 DOM 观察器。 - 分片候选限制为 24 条、总候选限制为 120 条,并优先显示清单和完整媒体,避免长视频分片淹没结果或持续占用内存。 - R8、原始 DEFLATE、单签名方案和确定性 ZIP 打包保持全部功能,APK 为 215,509 字节,比可用的 2.1.17.3 更新包减少 47,114 字节。 - versionCode 升至 85、versionName 升至 `2.2.0`;applicationId 与稳定发布证书保持不变,可从 versionCode 84 覆盖安装。 ## 2.1.16 - 收藏文件夹页新增直接删除入口、影响数量预览和明确结果反馈。 - 修复文件夹删除操作缺少可验证返回值的问题;递归删除后收藏网站可靠回到根目录。 - 用户脚本导入改为同一入口接受链接或完整代码,并自动预填剪贴板中的脚本链接。 - 扩展 Greasy Fork、Sleazy Fork、OpenUserJS 与 `.user.js` 安装链接识别,网页内点击或长按均可直接安装。 - 脚本及其依赖增加瞬时网络错误重试、渐进式超时和后台并发获取;DNS 抖动不再被误报为私网目标。 - versionCode 升至 80、versionName 升至 `2.1.16`;applicationId 与稳定发布证书保持不变。 ## 2.1.15 - 修复内置主页合法 `median://` 操作被 WebView 待跳转 URL 误判的问题;主页命令改用稳定信任标记,非主页命令静默阻止。 - 普通和隐私窗口均移除“网页无权调用浏览器内部功能”干扰提示,仍保持普通网页无法访问内部功能的安全边界。 - 移除广告过滤的全文节点扫描与 MutationObserver;网络拦截和纯 CSS 元素隐藏继续工作。 - 删除 ADPF 逐帧性能提示、强制最高刷新率、UI 主线程提权、离屏预栅格和备用 WebView 预热,避免额外线程、渲染器和内存压力。 - 过滤订阅及本地索引延迟到首屏空闲后加载,用户脚本和规则解析不再使用前台线程优先级。 - 隐私窗口也取消最长 3 秒的可选异步 WebView 启动等待;进度条更新进一步合并。 - 新增内部主页命令信任回归测试,并禁止重新加入持续 DOM 观察器和激进性能调度。 - versionCode 升至 79、versionName 升至 `2.1.15`;applicationId 与稳定发布证书保持不变。 ## 2.1.14 - 回退并彻底删除 2.1.13 的 DOM 扫描式深色兜底;该实现会遍历网页计算样式、监听动态节点并覆盖表单背景,是卡顿和 Google/主页搜索框黑块的直接原因。 - 全站深色改为 System WebView 原生渲染链路:真实 Activity 暗色主题提供 `prefers-color-scheme`,`setAlgorithmicDarkeningAllowed` 处理未提供暗色样式的网页。 - Android 13+ 直接使用框架 API;Android 8–12 通过 Chromium 官方 support-library boundary 调用相同原生设置,不打包完整 AndroidX WebKit。 - 开关仅修改 WebView 原生设置与浏览器界面主题,不执行 DOM 遍历、不注入深色 CSS、不刷新当前网页。 - 主浏览器取消最长 3 秒的异步 WebView 预启动等待,避免部分 OEM WebView 宣告支持却不回调时首个网页暂时打不开。 - 主页搜索框恢复自身透明输入层,网页输入框不再被 Median 强制着色;收藏文件夹功能保持不变。 - versionCode 升至 78、versionName 升至 `2.1.14`;applicationId 与稳定发布证书保持不变。 ## 2.1.13 - 重做网页深色链路:在 WebView 配置阶段开启原生渲染,并以 document-start 脚本在首帧前处理没有原生深色的网站。 - 移除 YouTube/媒体域名深色豁免和旧式整页 `invert/hue-rotate`;全站增量处理保留图片、视频、画布与 SVG 原色。 - 修复深色开关延迟、当前页必须重载、已打开设置面板不换色等问题;所有存活标签和浏览器界面即时同步。 - 新增多级收藏文件夹、直接自定义收藏、重命名、修改网址、移动和删除。 - 长按主页 Median Logo 可进入文件夹;文件夹也可从设置打开,并可作为快捷项与普通网站混排。 - 书签备份与加密完整备份新增文件夹结构及收藏归属,旧数据自动作为根目录收藏读取。 - 新增深色生成脚本语法/无反色/无总量上限自测与文件夹树循环、持久化、递归删除自测。 - versionCode 升至 77、versionName 升至 `2.1.13`;applicationId 与稳定发布证书保持不变。 ## 2.1.12 - 修复网页深色模式只改变浏览器外观、网页不即时变暗的问题。 - 修复网页弹窗退出或 WebView 预热后残留灰色 `about:blank` 页的问题。 - 移除用户脚本数量、体积、依赖数、存储配额与慢执行自动禁用等人为限制。 - 自定义搜索引擎升级为多条目管理,支持重命名、编辑、设默认和删除,并兼容旧设置与备份。 - 主页快捷网站优先显示本地缓存 favicon,缺失时继续显示首字母。 - 性能调度移除实时诊断页,将“网络直通”改为清晰的广告拦截选项,并加入后台网页内存释放。 - 应用图标改为轻量纯矢量“几何中线”:不对称锐角结构、石墨底与雾银线条,不使用字母或终端提示符。 - versionCode 升至 76、versionName 升至 `2.1.12`。 ## 2.1.11 - 首次 WebView 初始化接入官方异步启动边界;先绘制轻量原生品牌面,回调完成后再创建 WebView,并为异常 OEM 保留 3 秒幂等兜底。 - 书签/会话、网站策略和用户脚本三份本地状态并行后台解码;只有策略与脚本就绪后才开始恢复外部网页,不用隐私换启动速度。 - 隐私进程改为有界双线程冷启动:WebView 提供方、过滤规则和 Cookie/站点数据清理并行准备,全部完成后才允许隐私页面联网。 - 下载与离线页面索引在首屏后后台预热,避免第一次打开资料库或页面工具时同步解析记录和扫描文件。 - 主线程后台任务统一改为有界、可回收线程池;连续导航采用“最新任务优先”,密码库与过滤订阅也不再使用无界等待队列。 - 阅读模式、朗读、页面信息、TLS、媒体探测和脚本命令绑定 WebView 与导航序列;切页、切标签或退出后的过期结果不再弹窗或继续朗读。 - 本地主页按配置与快捷书签生成稳定渲染键;相同内容不再重复组装 HTML 或触发 WebView 重载。 - 移除普通浏览阶段的高性能 Wi-Fi 锁和旧式持续唤醒策略;性能档改为调度、缓存、渲染优先级与内存上限的组合策略。 - 主菜单由 18 项收敛为 12 项;浏览器设置收敛为 9 个入口,网站设置拆为兼容、内容隐私、权限、显示四组。 - Android 13+ 返回操作接入预测性返回;设置和二级面板逐层返回,最后才回网页或退出浏览器。 - 用户脚本保存改为 280 ms 后台合并写入;主页、站点与脚本持久化都避免无变化时重复序列化。 - 启动图标改为原创“有序集合 + 中位切面”符号:黑白为主体,仅中心使用琥珀附着色;不使用 M、终端提示符或 Via 图形。 - versionCode 升至 75、versionName 升至 `2.1.11`;applicationId 与稳定发布证书保持不变。 ## 2.1.10 - 浏览器设置改为单页分区结构,常用开关原地保存,移除无效的分类中转层。 - 根设置的系统返回键只收起设置;二级编辑完成后稳定回到设置,不再误退到桌面。 - 移除设置跳转中的固定 90 ms 等待,改为下一帧衔接,缩短可感知延迟。 - 站点设置改为后台合并持久化;无变化时不再重复序列化或写入。 - 后台任务队列不再在拥塞时回退到 UI 线程;网页进度改用系统单一动画通道。 - 图标改为纯 VectorDrawable 的彩色终端提示符,不再使用字母 M。 - versionCode 升至 74、versionName 升至 `2.1.10`;applicationId 保持 `com.xinyv.median.compat`。 ## 2.1.9 - 修复部分 Android/OEM 设备上标签卡片突然无法点击的问题。 - 标签切换、长按固定和关闭按钮改为直接绑定到卡片及标签对象,不再依赖 ListView 行点击分发。 - 防止关闭按钮抢占列表焦点,并强化标签页覆盖层触摸接收。 ## 2.1.8 - 保持正式包名与稳定签名,支持从 2.1.7 原地升级。 - 完成快稳优化:兼容模式、请求热路径缓存、异步脚本存储、Cookie 合并 flush、预热退避及 renderer 恢复。 ## 2.1.6 - 修复选择“自定义代码”后未保存也会把示例“我的主页”写入真实 Logo 配置的问题;取消编辑不再改变任何设置。 - 首次升级会清理 2.1.5 产生的精确冲突状态,并恢复 Median Logo,不影响真正保存过的其他自定义代码。 - 个性化主页改为标题 + 状态说明的双层条目并加入进入箭头,明确每项都可点击;主页总览不再显示“页面布局:紧凑”。 - 自定义 CSS、完整 HTML 与每次打开的说明更清楚。 - versionCode 升至 69、versionName 升至 `2.1.6`;applicationId 仍为 `com.xinyv.median.compat`。 ## 2.1.5 - 将个性化主页的 24 个平铺选项重构为 7 个清晰分区,并在设置面板上方显示本地主页效果。 - Logo 设置集中管理类型、文字、配色和排版;新增字号、字重,以及图片宽度、高度、圆角控制。 - 新增安全自定义 CSS,保留内置主页功能;CSS 经过 32 KB 边界和注入/外链校验,主页 CSP 同时禁止外部子资源。 - 完整 HTML 沙箱现在允许内联 JavaScript,但继续移除同源权限、网络连接和内部浏览器权限;外部子框架请求由 WebView 层阻断。 - HTML/CSS 编辑器改为紧凑、有底色、有边界的滚动输入区,修复代码下方出现巨大空白区域的问题。 - 新增 CustomHomeCss 独立自测,Logo 新字段和 CSS/HTML 沙箱进入配置、备份、HTML 生成及 release 构建门禁。 - versionCode 升至 68、versionName 升至 `2.1.5`;包名和发布证书不变,可直接覆盖 2.1.4。 ## 2.1.4 - “个性化主页”第二项新增“每次打开”,统一管理打开主页、自定义网页和保留上次内容三种冷启动策略。 - 自定义网页地址同时成为主页键与新建标签页目标;地址经过 HTTP(S) 严格校验,并沿用 HTTPS 优先规则。 - 个性化主页最后新增本地 HTML 编辑器,支持最多 64 KB HTML/内联 CSS、示例代码、启用/停用与删除。 - 自定义 HTML 通过无脚本、无同源权限的 iframe 沙箱展示,并禁止调用受信主页的 `median://` 内部操作;壁纸继续独立流式加载。 - 新增启动策略与 HTML 纯 Java 自测,配置完整贯通冷启动、标签页、主页键、加密备份恢复和旧设置迁移。 - versionCode 升至 67、versionName 升至 `2.1.4`;包名和发布证书不变,可直接覆盖 2.1.3。 ## 2.1.3 - 修复 WebView `DownloadListener` 的 `contentLength` 被忽略,导致下载任务初始总大小永远为零的问题。 - 下载器取得真实响应后立即发布并校正总大小,支持 Content-Length、Content-Range 及常见文件大小响应头。 - 下载记录不会再被缺少大小的普通遥测覆盖;暂停、失败、恢复和进程重投继续保留已知总大小。 - 下载中心进度条增至 6 dp,采用溢出安全的 0.1% 精度,文字明确显示百分比、已下载/总计、速度和剩余时间。 - 未知长度传输改为明确显示已下载字节及“总大小未知”,不再把不确定进度伪装成可计算进度。 - versionCode 升至 66、versionName 升至 `2.1.3`;包名和发布证书不变,可覆盖 2.1.2。 ## 2.1.2 - 移除主页文字 Logo 原先固定的负字距,新增 `-3 px` 至 `+10 px` 全局字间距设置。 - 自定义 Logo 安全语法新增 `[space=0–24]`,并保留普通空格,可逐处精确控制字母间隙。 - 新增五种渐变方向;重做极光、日落、海洋配色并加入玫瑰金渐变预设。 - 字距与渐变方向纳入配置校验、完整备份恢复、一键重置和主页 HTML 回归测试。 - versionCode 升至 65、versionName 升至 `2.1.2`;包名和发布证书不变,可覆盖 2.1.1 且不清除浏览数据。 ## 2.1.1 - 新增 Median、Google 官方配色、极光、日落、海洋渐变与自定义代码文字 Logo。 - 新增安全 Logo 标记解析器,支持逐字 `[color=#RRGGBB]` 和 2–4 色 `[gradient=#色1,#色2]`。 - Logo 编辑器内置语法说明、渐变示例和一键 Google 示例;错误标记不会保存。 - 所有自定义文字都经过 HTML 转义,颜色只接受严格十六进制值,不允许任意 HTML、CSS 或 JavaScript 注入。 - 新增 LogoMarkup 与主页 Google 配色生成回归测试。 - versionCode 升至 64、versionName 升至 `2.1.1`;包名和发布证书不变,可覆盖 2.1.0。 ## 2.1.0 - 新增完整的本地个性化主页:自定义壁纸、Logo 图片、标题、副标题、强调色、布局、时钟和模块显隐。 - 壁纸支持遮罩、模糊、填充裁剪或完整显示;搜索框支持纯色、磨砂或隐藏。 - 快捷入口支持 3–5 列、三种形状及书签管理入口。 - 图片导入在后台执行 EXIF 方向修正、尺寸约束、压缩和原子写入;主页以受信内部资源流加载图片,不产生外部请求。 - 新增 HomePageConfig 边界自测、主页 HTML 组合自测及生成 JavaScript 语法门禁。 - versionCode 升至 63、versionName 升至 `2.1.0`;包名和发布证书不变,可覆盖 2.0.2。 ## 2.0.2 - 修复主菜单及共享功能面板点击条目时出现巨大圆形波纹的问题。 - 全宽菜单行改用系统有边界点击反馈;工具栏小图标继续保留无边界反馈。 - 新增静态门禁,禁止全宽菜单行再次使用 `selectableItemBackgroundBorderless`。 - versionCode 升至 62、versionName 升至 `2.0.2`;包名和发布证书不变,可覆盖 2.0.1。 ## 2.0.1 - 修复纯数字输入(如 `12`)被当成不完整 IP 并打开 `https://12` 的问题。 - 首页搜索框和顶部地址栏统一输入分类:关键词进入当前搜索引擎,网址直接打开。 - 只有完整 HTTP(S) 地址、有效域名、合法 IPv4/IPv6 或 localhost 才按网址处理;邮箱、非 HTTP 协议、无效 IP 与普通文本保持搜索。 - 新增 OmniboxInput 纯 Java 自测并纳入静态检查与 release 构建门禁。 - versionCode 升至 61、versionName 升至 `2.0.1`;包名和发布证书不变,可覆盖 2.0.0。 ## 2.0.0 - 全面重构标签页资源调度:列表行回收、热 WebView 硬上限、冷状态分档上限、后台释放备用渲染器,并修复固定标签可绕过内存限制的问题。 - 延后过滤器启动任务只在前台执行;WebView 预热合并为单个可取消任务,脚本安装与更新不再临时创建裸线程。 - BrowserDataStore 增加会话等值判断和 dirty 写盘,避免页面完成、切标签及退后台反复保存相同快照。 - 用户脚本匹配、GM 值与外观过滤结果采用有界缓存;超大 CSS/过程规则不进入缓存,避免以速度换取不可控内存。 - 新增统一 WebView 安全策略,普通与隐私窗口共同关闭文件访问、跨文件来源访问和混合内容。 - 修复隐私窗口二次打开可能重复设置数据目录而失败、Cookie 清理回调缺失导致白屏、退后台仍运行及销毁不完整等问题。 - 标签页总览改为 BaseAdapter/ListView 回收;64 标签场景不再预先构造整页卡片树。 - 下载服务队列限制为 48 个等待任务,队列过载返回明确错误;进程被系统终止时可重投并从持久化游标恢复。 - 下载实时遥测在进程内更新,持久索引改为 5 秒合并写入,终态立即保存,减少大下载列表下的 JSON 序列化与锁竞争。 - 保留 1.7.3 的内部单连接下载和经典通用媒体发现,不恢复 YouTube 专用临时媒体逻辑。 - versionCode 升至 60、versionName 升至 `2.0.0`;包名和发布证书不变。 ## 1.7.3 - 移除每个新任务开始前的 1 字节 Range 探测,直接用真实下载响应建立文件、元数据与断点状态。 - 断点请求从原始 URL 重新解析重定向;无效 Content-Range、资源校验值变化及服务器拒绝 Range 时安全从头下载。 - 暂停/取消会断开当前连接,修复网络阻塞时按钮长期无反馈;恢复操作立即更新页面状态并持续轮询。 - 重定向逐跳保存响应 Cookie,跨源目标只读取目标域 Cookie,提升登录/CDN 下载兼容性且不泄漏来源凭据。 - DownloadStore 使用锁保护的进程缓存,消除每秒全量 JSON 重解析;下载线程允许空闲回收。 - 前台服务被系统拒绝时记录明确失败状态;保持 1.7.2 的经典通用嗅探,不加入任何 YouTube 特判。 - versionCode 升至 53,包名与发布证书保持不变。 ## 1.7.2 - 功能基线回退到 1.5.1 的通用媒体发现,移除后续所有 YouTube 专用嗅探、播放器数据解析、`videoplayback`、itag 和 SABR 试验代码。 - 保留并整理轻量下载中心:回收列表行、仅活动任务定时刷新、批量删除旧记录,失败任务统一提供普通重试。 - 下载器增加实时 Cookie 刷新、跨源 Origin Referer、重复任务抑制和可测试的 HTTP 重试策略。 - 暂停/取消现在可立即命中尚在队列中的任务;进程被系统结束后,遗留活动状态会转成可继续的暂停任务。 - 401/403/404/410/416 等明确错误快速失败;只对 408/425/429、5xx 和网络异常退避重试。 - applicationId 与发布证书不变,versionCode 升至 52,可直接覆盖此前 1.7.1 试验版。 ## 1.5.1 - 禁用所有新任务的 Android DownloadManager 路径,统一使用 Median 内部下载器。 - 内部下载固定为单连接、64–128 KB 缓冲和最多 2 个任务,不再主动分段。 - 仅在中断续传时发送 Range;服务器不支持时自动从头重试。 - 下载中心移除“系统任务”“兼容兜底”和性能档选择,改为真实字节、速度、剩余时间和直接操作。 - 修复系统遗留记录始终显示 0 B:升级后未完成系统任务自动迁移,已完成任务读取真实大小并保持可打开。 - 保留最终响应文件名/MIME 修正、APK 结构识别、Cookie/UA/同源 Referer、OEM 公共目录失败保底。 ## 1.5.0 - 普通文件改为 Android DownloadManager 优先,交由系统处理断点、网络切换、重试、通知和重启恢复。 - 修正公共下载目录参数,统一保存到 `Download/Median`;同名任务自动编号。 - 下载任务传递 User-Agent、Cookie 与同源 Referer,提升登录态和防盗链资源兼容性。 - 通用二进制链接改走最终响应元数据探测,并保留 APK 文件结构识别,避免 `.apk` 误存为 `.bin`。 - 兼容下载限制为最多 6 连接、16 MB 预算和 2 个工作任务;分段被拒绝时自动降级单连接。 - 系统任务失败后可在下载中心一键“兼容重试”,并保留原任务的请求上下文与网络约束。 ## 1.4.3 - MediaStore 无法创建 APK 项目时,自动回退至应用下载区并返回可授权的只读 content URI。 - 新增严格限制路径的下载 ContentProvider,保证兜底文件可以打开、分享和交给系统安装器。 ## 1.4.2 - 分段服务器返回非 206 或错误 Content-Range 时自动清空分段状态并降级单连接。 - 综合最终 URL、Content-Disposition、Content-Type 与 APK ZIP 结构修正文件名和 MIME。 - 下载中心打开/分享增加 URI 授权、明确反馈和 APK 安装来源授权入口。 ## 1.4.1 - 恢复兼容版 applicationId `com.xinyv.median.compat`,版本号提升至 43。 - 建立新的稳定签名更新链;旧测试签名安装需备份数据后进行一次重装。 ## 1.4.0 - 首次启动显示一次官方渠道提示;同一信息可在“浏览器设置 → 关于 Median”再次查看。 - 500 KB 定位修正为“兼容性预算”,不再追求 180 KB 极限数字。 - WebView 兼容层新增提供方版本缓存失效、异常分类、OEM 旧特征别名与 UI 线程检查。 - 增加严格来源规则验证;不支持安全 document-start 时继续默认拒绝高权限脚本。 - 关于页新增 WebView 兼容诊断、复制报告和无网络 document-start 顺序自测。 - 500 KiB 仅作为发行目标提示,超过时输出告警而不是把正常构建标记为失败。 ## 1.4.0 lightweight optimization pass - Moved filter compilation and subscription work off the first-render window. - Lazily initializes downloads, offline pages, reader/TTS, script values, and the password vault. - Keeps one renderer in standard mode on typical devices and limits WebView prewarming to performance mode. - Reduced request-path allocations and locking in media sniffing and ad-block matching. - Reuses rule-match scratch state, performs one cosmetic-rule assembly per page, and removes dark-mode reflection. - Lets idle worker threads time out and tightens the 500 KiB R8/size gate. - Centralized optional feature lifecycle in `BrowserServices`. ## 1.4.0 500 KB RC1 - 将用户脚本 document-start 路径改为聚焦版 AndroidX WebKit 兼容源码,保留 `WebViewCompat`、`WebViewFeature` 与 `ScriptHandler` API 形状。 - 按 AndroidX/Chromium support-library boundary 协议调用 System WebView,不打包无关 WebKit API、AndroidX Core、Lifecycle、VersionedParcelable 或 Kotlin 运行时。 - WebView provider 更新后按包名与版本重新建立兼容快照;不支持时继续 fail closed。 - 增加可重复的 `tools/build_500kb_apk.sh`,构建后报告 500 KiB 发行目标;超过目标只告警,不制造与运行无关的构建失败。 - versionCode 更新为 42,versionName 更新为 `1.4.0`。 ## 1.4.0 release candidate - 建立标准 Gradle/Android App Bundle/R8/Lint/JUnit/GitHub Actions 发布工程,目标 API 36。 - 发布签名改为环境变量注入,删除自动生成弱口令开发证书的路径。 - 用户脚本权限默认拒绝,增加 document-start 安全桥接、来源与权限复核、隐藏菜单回调和旧 WebView 安全降级。 - 用户脚本网络请求逐跳执行 `@connect`、协议、私网和响应体限制,阻止重定向绕过及凭据泄露。 - 下载器与过滤订阅改为手动重定向;跨源时剥离 Cookie 与认证头。 - 分段与断点续传验证 `Content-Range`,下载文件名清除控制字符和双向文本伪装字符。 - 摄像头、麦克风和定位权限绑定完整 HTTPS 来源,授权期间切页或端口变化会自动失效。 - 普通与隐私地址输入、备份导入统一拒绝畸形或带 URL 凭据的网络地址。 - 离线页面关闭 JavaScript 与网络访问,常规网页关闭 content 访问。 - 隐私窗口在无法建立独立 WebView 数据目录时直接拒绝启动。 - 增加 Android 15+ 前台下载超时安全暂停。 - 增加自适应图标、边到边窗口适配、动态版本显示和应用内隐私说明。 - 增加隐私、数据安全、发布、竞争验收、安全报告和第三方声明文档。 ## 1.3.5 omni preview - 移除地址栏右侧独立下载按钮,恢复更完整的地址栏空间。 - 下载中心保留在右下角“三个点”浏览器主菜单中,作为一级入口。 - 下载中心仍由独立 `DownloadCenterActivity` 承载,不属于页面工具,也不依赖当前网页。 - 版本号更新为 `1.3.5-omni-preview`,versionCode 更新为 38。 ## 1.3.4 omni preview - 从“页面工具”中移除旧的下载中心入口。 - 在浏览器主菜单增加一级“下载中心”入口。 - 保留地址栏独立下载按钮,下载中心继续由单独 Activity 承载。