---
name: exeify-web2exe
description: "把网页打包成 Windows exe 的技能。当用户想把「一个本地 HTML/CSS/JS 网页文件夹」或「一个在线网址」打包成可双击运行、免安装的独立 Windows .exe（用系统自带 WebView2 渲染，终端用户无需装任何东西）时使用；可设置窗口标题/尺寸/全屏、程序图标、启动页、源码保护等；还能**同时输出安卓 APK**（把同一个网页做成安卓 App，免 Android SDK）。仅 Windows 运行打包器。 | Use when the user wants to package a website — a local HTML/CSS/JS folder or an online URL — into a standalone, double-click-to-run Windows .exe (rendered via the system WebView2, no install for end users); supports window title/size/fullscreen, app icon, splash screen, and source protection; can also output an Android APK from the same website (no Android SDK needed). Packer runs on Windows only. | 触发/Triggers: 打包成exe、网页打包、网页转exe、把网址做成桌面程序、把文件夹做成exe、package website to exe、turn HTML folder into a desktop app、website to exe、网页转apk、打包成安卓app、把网页做成安卓应用、website to apk、web to android app。"
license: Apache-2.0
compatibility: "Windows only. The bundled exeify.exe is a Windows executable; packed apps rely on WebView2, which is built into Windows 10/11. Not usable on macOS or Linux."
---

# Exeify 网页打包器（把网页/网址打包成 Windows exe）

用 **Exeify** 把「一个本地网页目录」或「一个在线网址」打包成一个**双击即运行的 Windows `.exe`**。
产物用系统自带的 WebView2 渲染，终端用户无需安装任何东西。

## 前置检查
1. **仅 Windows 可用**。若当前不是 Windows，直接告诉用户此 skill 只能在 Windows 上运行，停止。
2. **定位 exeify.exe**：它**打包在本 skill 的目录里**（与本 `SKILL.md` 同一个文件夹，文件名 `exeify.exe`）。
   - 解析路径的可靠方式：取本 SKILL.md 所在目录，拼上 `exeify.exe`。在 Claude Code 里可用变量
     `${CLAUDE_SKILL_DIR}\exeify.exe`；其它环境用本文件所在目录的绝对路径。
   - **若该文件不存在**（未随 skill 一起分发）：从
     https://github.com/44886/Exeify/releases/latest 下载最新的 `exeify-*-windows-x64.exe`，
     重命名为 `exeify.exe` 放到本 skill 目录后再用。

## 检查 Exeify 是否有新版（可选、非阻塞；exe 已随 skill 内置，离线照常用）
> exeify.exe **始终随本 skill 一起分发**，离线即可打包，此检查纯属锦上添花。
1. 取**已安装版本**：运行 `exeify.exe version`（打印形如 `0.4.1` 后立即退出）。
2. 取**最新版本**：`GET https://api.github.com/repos/44886/Exeify/releases/latest`
   （带 header `User-Agent: exeify-skill`），读 `tag_name`（形如 `v0.4.2`）。
3. 若最新版**更高**：
   - 先一句话告知：「Exeify 有新版 `<tag>`（当前 `<installed>`）」。
   - **征得用户同意后**，从该 release 下载 `exeify-*-windows-x64.exe`，覆盖本 skill 目录里的
     `exeify.exe`（即 `${CLAUDE_SKILL_DIR}\exeify.exe`）；之后的打包即用新版。用户不同意就继续用内置版。
- **访问不畅时**（不少中国大陆用户无法顺畅访问 GitHub）：检查或下载失败就**静默跳过**，
  直接用**已内置**的 `exeify.exe` 正常打包——不依赖网络、不影响出包。
- 别为此反复联网或刷屏，每次会话最多做一次。

## 向用户问清这些（缺就问，别乱猜）
- **源**（二选一）：要打包的**本地网页目录**（含 index.html 的文件夹）**或**一个**在线网址**（http/https）。
- **输出路径**：产物 `.exe` 存哪、叫什么（默认可放在源目录旁，如 `app.exe`）。
- 可选：窗口标题、窗口尺寸、是否**全屏/最大化**、程序**图标**、**启动图**、是否关闭**源码保护**（默认开）。
- **不用主动追问名字**：不给 `--title` 时会自动读入口页的 `<title>` 当窗口标题 / 安卓应用名；用户明确说了名字再传 `--title`。

## 调用方式
命名参数 CLI（推荐，能力全）。可输出 **Windows exe** 和/或 **安卓 APK**：
```
exeify.exe pack --local <目录> [--entry index.html] --out <app.exe> [--apk <app.apk>] [选项...]
exeify.exe pack --url <网址>   --out <app.exe> [--apk <app.apk>] [选项...]
```
参数表：

| 参数 | 说明 | 默认 |
|---|---|---|
| `--local <目录>` / `--url <网址>` | 源，二选一必填 | — |
| `--out <路径.exe>` | 输出 Windows exe（.exe 结尾） | 见下 |
| `--apk <路径.apk>` | 输出安卓 APK（.apk 结尾）；应用名=--title、图标=--icon、启动图=--splash、全屏=--window fullscreen 自动复用，包名自动生成 | 见下 |
| `--entry <文件>` | 本地入口文件（仅 --local）；exe 与 APK 都按它当首页 | index.html |
| `--title <文字>` | 窗口标题 / 安卓应用名 | **自动取入口页的 `<title>`**，取不到才用 App |
| `--width <数字>` / `--height <数字>` | 窗口宽 / 高 | 1024 / 720 |
| `--window <模式>` | 启动状态 normal\|maximized\|fullscreen | normal |
| `--no-resizable` | 禁止缩放窗口 | 允许 |
| `--icon <路径>` | 窗口与 exe 图标（.ico/.png） | 默认图标 |
| `--splash <图片>` | 启动图（.png/.jpg），消除白屏 | 无 |
| `--splash-bg <#rrggbb>` | 启动图背景色 | #0f172a |
| `--splash-sec <秒>` | 启动图最少显示秒数 | 1.5 |
| `--no-protect` | 关闭源码保护（默认加密内嵌资源+禁用查看源码） | 开启 |

- `--out` 与 `--apk` **至少给一个**，可**同时给**（一次同时产出 exe + apk）。
- 安卓 APK **免 Android SDK 本地生成**；产物依赖系统自带的 Android System WebView（**Android 7+**）；安装需在手机开"未知来源"。用内置密钥签名，适合侧载/内部分发。
- 安卓壳的取页规则与 exe 内置服务器一致：精确路径 → 目录下 `index.html` → **无扩展名的前端路由回退到入口页**，都落空才显示站内 404 页（**v0.7.1 起**；更早版本打的 APK 遇到这类路径会报 `net::ERR_NAME_NOT_RESOLVED`，需用新版重新打包）。
- 安卓壳没有原生标题栏，并自动避让状态栏/导航栏（**v0.7.2 起**）；`--window fullscreen` 则铺满全屏。
- 安卓壳支持网页 `<input type="file">` 上传图片/视频、拍照/录像及 `getUserMedia()` 摄像头调用；首次使用按系统提示授予相机/麦克风权限。

用 `exeify.exe pack --help` 可随时打印完整用法。

## 执行与结果判定
1. 拼好命令后用 Bash/PowerShell 运行（路径含空格要加引号）。
2. **成功**：标准输出打印一行 `OK: <输出路径>`，返回码 0。→ 告诉用户产物路径、可双击运行；提醒需 Windows 10+（自带 WebView2）。
3. **失败**：stderr 打印 `失败: <原因>`，返回码 1（打包错误）或 2（用法/参数错误）。→ 把原因转述给用户并修正参数重试。
4. 运行后**确认输出 .exe / .apk 文件确实生成**（检查文件存在与大小），再向用户报告成功。
5. 没给 `--title` 时产物名字来自网页 `<title>`：报告时顺带说一句取到的名字，用户不满意可加 `--title` 重打。

## 例子
- 本地目录、名字自动取网页 `<title>`、一次同时出 exe + 安卓 APK：
  `exeify.exe pack --local "D:\site" --out "D:\site\app.exe" --apk "D:\site\app.apk"`
- 本地目录、全屏、带图标、指定名字：
  `exeify.exe pack --local "D:\site" --out "D:\site\app.exe" --title "我的应用" --window fullscreen --icon "D:\logo.ico"`
- 入口页不叫 index.html（例如 `dist/index.html`）：
  `exeify.exe pack --local "D:\site" --entry "dist/index.html" --out "D:\app.exe" --apk "D:\app.apk"`
- 在线网址、固定尺寸、关源码保护（便于调试）：
  `exeify.exe pack --url https://example.com --out "D:\demo.exe" --width 1280 --height 800 --no-protect`

## 说明与边界
- 产物依赖 Windows 自带的 WebView2（Win10/11 通常已内置）。
- 产物会把 WebView2 用户数据保存到 `%LOCALAPPDATA%\exeify\<exe文件名>`，正常关闭后 cookies、localStorage、IndexedDB 等可跨次启动保留；网站设置为 session cookie 或主动清理登录态时，仍按网站自身规则执行。
- 源码保护是「提高门槛」而非绝对加密（详见 Exeify 项目说明）。
- 本地目录会被完整打包进 exe（离线自包含）；网址模式需联网。
- 项目主页：https://github.com/44886/Exeify
