845 字
4 分钟
Gamebox:给自己做的本地 HTML 游戏启动器

Gamebox#

仓库:Chaizirancc/Gamebox 语言:Kotlin 当前版本:1.2.0-debug

为什么要做这个#

这事得从 TYPE HELP 说起。

那是 Twine 写的一个文字游戏——内容是一个被奇怪 Windows 弹窗困住的电脑模拟,玩法是”输错指令”会死,目标是把它玩出好结局。质量很高。

不想在线玩——一方面是这种”沉浸式文字游戏”被一根网线吊着总让我不安心(关掉页面就归零),另一方面我对”游戏要登录、要联网”这件事本身没好感。于是把游戏源文件扒下来塞进手机里,想着本地玩。

然后就出问题。

我用浏览器打开那个 HTML 文件,顶部状态栏黑边、底部导航栏黑边、屏幕挤成中间一条——沉浸感全没了。Twine / SugarCube 这类游戏做的”伪操作系统 UI”是按”全屏”为前提设计的,多出来几行系统 UI 直接破功。

我去 GitHub 上搜”Android 离线 HTML 游戏启动器”,没找到一个真正特化于游戏的——都是通用 WebView demo 或者带一堆花里胡哨功能的”浏览器”。

工程量也不大。一个 Activity + 一个 WebView 启动器而已。于是萌发自己做的兴趣。

它解决什么#

Gamebox 给每个游戏开一个独立的虚拟 HTTPS 来源https://g-{gameId}.gamebox.local/)。这一手解掉三个问题:

  1. 沉浸感:用沉浸式 WebView,系统导航栏全隐藏
  2. 存档隔离:每个游戏的 localStorage / sessionStorage / IndexedDB / Cookie 都按来源分开——Twine 游戏的存档不互相覆盖
  3. 兼容 HTML5 文件 API:虚拟来源是 HTTPS,能用 File API、blob URL、相对路径

打开游戏前,音量键唤出控制栏——这才是退出/调整设置/保存/导出的入口。游戏运行时,Android 的返回键和返回手势都被禁用,避免误触退出。

主要功能#

  • 通过系统文件选择器导入 .html.htm.zip,不用申请存储权限
  • 安全解压 ZIP,自动选 index.html(有多个入口让你选)
  • 游戏库支持搜索、标签、收藏、按最近游玩/占用空间排序,列表 ↔ 封面墙切换
  • 原位更新——游戏内容能替换,存档、虚拟来源、设置都保留;更新失败自动回滚
  • 逐游戏 HTTPS 联网开关(默认关)
  • SugarCube 等支持用系统文件选择器导入存档、“创建文档”导出存档
  • 屏幕常亮 + 单独亮度(退出游戏时还原系统亮度)
  • 累计游玩时长,游戏库顶部展示最近玩过的
  • WebView 渲染进程崩溃自动重建——存档不丢
  • 加载失败 / HTTP 错误 / JS 错误显示中文诊断

安全设计#

  • 每个游戏独立虚拟来源,存档互不干扰
  • 联网默认关;启用后才允许常规 HTTPS
  • file:// 和明文 HTTP 始终不允许(即使开启联网)

现状#

我自己用着,主要跑 TYPE HELP 和几个 Twine 文字冒险。最近一次更新是 7 月底,把 WebView 渲染进程崩溃的恢复路径写完——之前几次玩到一半切后台,WebView 被系统回收就掉了,存档没存上。

这个项目估计不会停。时不时就有个新的 HTML 游戏想本地玩。

Gamebox:给自己做的本地 HTML 游戏启动器
https://fuwari.vercel.app/posts/gamebox/
作者
柴子冉
发布于
2026-08-27
许可协议
CC BY-NC-SA 4.0