Repository navigation
Releases
Releases · SenZh/hermes-android
v1.9.0
[1.9.0] - 2026-10-27
自 v1.8.1 起共计 61 个提交、32 个源码文件变更(+2724 / −121 行)。
新增功能 (New Features)
- 图片手势查看器 (Image Viewer):全面替换原静态
expo-image组件。支持 1x–5x 双指捏合缩放(带 0.7x 橡皮筋阻尼回弹)、单指拖动平移(按解码像素与视口溢出精确夹取边界,杜绝拖出黑底)、双击切换预设倍率(1x / 2.5x),以及单击唤起沉浸式透明全屏 Modal(遮蔽系统状态栏与标题栏,拦截系统返回键)。图片按原始长宽比自适应铺满可用视口,彻底移除原aspectRatio: 1造成的无效留白。 - 全屏文档查看器 (Document Viewer):聊天上下文中的文件附件直接唤起全屏查看器。支持原生 Markdown 富文本渲染、超宽表格独立横向平移、跨段落连续长按文本选区复制、语法高亮代码块(集成单键复制),并自动将服务端输出的
MEDIA:路径指令转换为可直接打开的交互式卡片。 - 后台自动更新机制与版本弹窗 (Auto-Updater & Version Modal):应用启动及后台按 1 小时轮询调度检索 GitHub Releases 最新资产。侧边栏底部停靠区新增版本入口,当检测到新版本时动态切换为向上更新角标;点击唤起独立版本弹窗,展示当前构建信息、更新日志摘要及手动检查更新指令。
- 存储访问框架物理落盘管道 (SAF Download Pipeline):重构文件落盘机制,通过原生
FileChannel直接将流式数据写入用户选定的 SAF 目录。引入前置目录选择器、实时吞吐速率/字节进度计算、同名冲突防御(支持原子性覆盖与自动重命名序列),并持久化真实文档 URI,使已完成任务在回访时直接呈现为「打开文件」与「打开所在目录」。 - 国产定制系统后台保活引导 (Vendor-ROM Keep-Alive):「关于」页新增保活配置板块,针对国内主流发行版(小米 HyperOS、华为/荣耀 EMUI/MagicOS、OPPO ColorOS、vivo OriginOS、三星 OneUI)进行适配。集成运行时
PowerManager.isIgnoringBatteryOptimizations真实状态探活与豁免请求,并按厂商签名精准路由至各系统自启动配置 Activity,未知机型优雅回落至应用详情页。 - 系统级文件调度分发 (Native File Dispatch):基于原生
ACTION_VIEW封装openFile接口,赋予FLAG_GRANT_READ_URI_PERMISSION,结合严格 MIME 类型推导将.apk资产直接分发至系统安装器;封装openFolder并实现四级平滑降级(MIME_TYPE_DIR隐式约束 -> DocumentsUI 显式调用 -> 厂商定制文件管理器 ->OPEN_DOCUMENT_TREE),防止系统默认意图被通用浏览应用抢占。
体验优化与界面重排 (Improvements)
- 全局导航紧凑化:废弃侧边栏底部双行常驻版本条,压缩提炼为 5 键紧凑底部停靠栏(会话列表、Agent 配置、自动化任务、系统设置、版本与更新)。
- 输入面板栅格重整 (Composer Layout):重构输入框底部功能区,左侧固化模型规格切换甲板,右侧紧密停靠智能审批盾牌,将附件、语音及投递按钮统一收敛至 24×24 规格,消除键盘弹出时的视口抖动;独立解耦子代理运行状态胶囊,防止布局挤压。
- 消息元数据单行压缩 (Message Metrics):将单轮推理耗时(分秒格式)与 Token 吞吐生成速率(tps)合流至消息底部操作栏,全路径约束为单行显示并配置
flexShrink弹性收缩,彻底解决小屏设备上的截断与非预期换行。 - 审批安全盾三态化:重构工具调用授权控制(全自动批准 / 需用户确认 / 全部阻断),以状态色区分并移除多余展开折叠箭头。
- 超宽数据表格横向滑动:富文本渲染中提取超宽表格并套用独立横向滚动容器,保留多列完整数据结构,避免文字纵向堆叠变形。
- 跨段落自由文本选区:引入全局选择模态层,支持跨气泡、跨段落拖拽选区并保留原生剪贴板交互。
- 多语言完整性覆盖 (i18n):全量补齐中文资源键,将推理强度及新增界面文本完全本地化,并在 CI 管道中加入自动化校验门禁(
check-i18n)。 - 前台唤醒状态探活:监听
AppState前台变更,恢复聚焦时自动执行网关心跳并重新校准通知服务活跃度。
缺陷修复 (Bug Fixes)
- 下载链路堆内存溢出 (OOM Fix):根治针对大文件(如 82MB 安装包)在 JS 运行时内触发
.base64()导致瞬间申请 227MB 连续内存并抛出OutOfMemoryError的崩溃问题。重构为私有缓存落盘后经由底层通道直写 SAF,二进制数据完全不经过 JS 堆内存。 - SAF 虚拟子路径解析失效:修复此前以
new File(treeUri, name)方式构造目标时,因 AOSPgetTreeDocumentId仅截取根标识、直接丢弃后续路径段,导致目标文件被解析为所选目录本身、覆盖写直接抛错或清空整目录的致命缺陷;改为复制至目录对象后由系统生成凭据并回查认领真实 URI。 - 跨应用分享协议崩溃:废弃此前依赖
expo-sharing的打开机制,彻底解决其底层源码硬编码要求file://协议从而在面对 SAFcontent://协议时抛出IllegalArgumentException的系统异常。 - 通用意图拦截异常:解决此前无类型广播
Linking.openURL(treeUri)导致部分机型系统过滤表命中 Google 等通用浏览应用、弹出跨应用请求授权提示的问题。 - 前台服务 5 秒超时崩溃:解决 Android 14+ 下因未及时提升前台而抛出的
ForegroundServiceDidNotStartInTimeException。在onStartCommand首行强制执行startForeground(),增加通知渠道前置校验,并在启动生命周期窗口内以带 TTL 的状态标记延后处理停止请求,避免被系统记账拦截。 - 应用包可见性声明 (Package Visibility):针对 targetSdk >= 30 规范,在
AndroidManifest.xml中补全<queries>标签,声明各厂商文件管理器与自启动包名,避免resolveActivity在高版本安卓上因权限隔离恒定返回 null 导致降级链断裂。 - 系统安装器权限补全:在应用清单及
app.json中补齐REQUEST_INSTALL_PACKAGES声明,确保 APK 资产可被系统 PackageInstaller 正常接管。 - 构建版本号单一真源 (Build Version SSOT):修复此前因
android/目录被.gitignore忽略导致在 Gradle 中手动修改版本号在 CIprebuild阶段被反复覆写、安装包versionCode长期被锁定在 13 的问题;统一将app.json确立为构建版本号的唯一源头。 - 排他性维护锁异常:修复删除历史会话时调用离线
bulk-delete接口与在线网关持有独占锁冲突(Exclusive maintenance refused)的问题,改走在线长连接 RPC 事务。 - 模型提供商过滤异常:修复未配置鉴权凭证的模型提供商依然混入选择器列表的问题。
- Reanimated UI 线程崩溃:解决因 worklet 函数默认参数引用模块级常量而在 UI 线程求值抛出
Property 'RUBBER_BAND_FLOOR' doesn't exist导致手势初次触摸直接闪退的问题,将纯计算函数收敛为自包含字面量,并建立对应变异测试防线。