# 构建与发布 ## 本地开发 > 环境要求:Node.js ≥ 20、pnpm ≥ 9、Rust stable;Windows 需 10 1809+ 与 WebView2 Runtime。 ```bash pnpm install # 安装依赖 pnpm tauri dev # 启动开发环境 pnpm tauri build # 构建生产安装包 ``` 桌面图标修改 `src-tauri/icons/icon-source.svg` 后执行 `pnpm generate:icons`,再执行 `pnpm verify:ico` 校验。画板和笔身保留不透明底色,仅图案外部透明;ICO 首层使用 256px,避免当前 Tauri 将 16px 首层放大为任务栏图标。Linux 默认使用 512px PNG。macOS 的 `icon.icns` / `icon-macos.png` 与安卓的 `icon-android.png` 使用独立底板和安全区,不由该命令覆盖。 在浏览器中预览移动端界面(无需安卓环境,IPC 为内存模拟): ```bash TAURI_ENV_PLATFORM=android pnpm vite --port 1437 # 打开 http://127.0.0.1:1437/?mock=1 ,用开发者工具切换到手机尺寸 ``` ## 发布流程 推送 `v*` 标签会自动构建 Windows EXE、安卓 APK、macOS DMG(Apple Silicon / Intel)、Linux DEB / AppImage 与 Docker 多架构镜像,并上传到同一个 Release。 - 三段正式版本(如 `v0.6.1`)上传后还会自动更新 Homebrew Tap,并向 `microsoft/winget-pkgs` 提交更新 PR(须等官方合并)。 - 预发布标签(如 `v0.6.1-beta.1`)只构建发布,不更新软件源,也不覆盖 `latest` 镜像。 - macOS / Linux 包由 **macOS and Linux packages** 工作流生成,手动运行时可在 Actions Artifacts 下载。 - 官方插件由 **Official plugins** 工作流手动发布到 `plugins` Release,版本在 `plugins/versions.json` 中独立维护;Release 说明按插件目录自动重写。 - 字体包推送 `fonts-vX.Y.Z` 标签发布为预发布 Release,不影响应用更新检查。 ## 仓库 Secrets | Secret | 用途 | | --- | --- | | `PACKAGE_PUBLISH_TOKEN` | 触发 `CrazyFigure/homebrew-tap` 工作流,并向 `microsoft/winget-pkgs` 提交 PR(含维护 `CrazyFigure/winget-pkgs` 分支) | | `DOCKERHUB_USERNAME` / `DOCKERHUB_TOKEN` | 推送 `crazyfigure/noteboard` 镜像(令牌需写权限) | | `ANDROID_KEYSTORE_BASE64` | keystore 文件的 Base64 内容 | | `ANDROID_KEYSTORE_PASSWORD` | keystore 密码 | | `ANDROID_KEY_ALIAS` | 密钥别名 | | `ANDROID_KEY_PASSWORD` | 密钥密码(留空时与 keystore 密码相同) | 未配置安卓签名时使用 debug 签名,可安装但升级需卸载重装。 ```bash # 生成 keystore(请妥善保管,丢失后无法以相同签名升级) keytool -genkeypair -v -keystore noteboard.jks -keyalg RSA -keysize 2048 -validity 36500 -alias noteboard # 转为 Base64 后粘贴到 ANDROID_KEYSTORE_BASE64 base64 -w 0 noteboard.jks # Linux / Git Bash # PowerShell: [Convert]::ToBase64String([IO.File]::ReadAllBytes("noteboard.jks")) ``` ## 安卓工程 `src-tauri/gen/android` 不入库,由 CI 执行 `tauri android init` 生成,再经 `scripts/patch-android.mjs` 注入原生桥接(`src-tauri/android`)、存储权限、“用其他应用打开 / 分享到 NoteBoard”与签名配置。