Skip to content

Repository files navigation

AnyPWA icon

AnyPWA

面向 HarmonyOS PC/2-in-1 的原生网页应用管理器
把任意 HTTP/HTTPS 链接整理成可独立启动、独立配置的桌面网页应用

Release AppGallery License HarmonyOS API Device

AnyPWA 使用 ArkTS 和 ArkWeb 构建。你可以添加普通网站、PWA 入口、局域网服务或直接提供 Web App Manifest;每项配置都可以拥有自己的名称、图标、窗口模式、UA、导航范围和网页权限策略。

AnyPWA 已在华为应用市场正式上架:前往 AppGallery 获取 AnyPWA

Important

AnyPWA 是网页应用管理器和 PWA 配置容器,不是完整的系统级 PWA 安装器。网页应用仍运行在 AnyPWA 的 ArkWeb/Bundle 中,不会变成独立 HAP。当前运行环境不支持 Service Worker,因此不提供依赖它的离线冷启动、Web Push、后台同步和缓存更新生命周期。

功能概览

应用管理

  • 添加任意 HTTP/HTTPS 链接、域名、局域网地址或 Manifest JSON 地址。
  • 搜索、编辑和删除网页应用。
  • 为每个应用读取网页图标,或通过系统图片选择器设置自定义图标。
  • 名称或图标发生变化时,可同步重建桌面快捷方式。
  • 应用名称在主页卡片中最多显示两行,超出部分省略。
  • 新建邮件、Microsoft、Google、Apple 等跨域登录服务时,自动推荐“任意匹配(任意源)”链接策略。
  • 帮助页、FAQ、配置示例和动态使用提示内置于应用。
  • 主页右下角可选择跟随系统、浅色、深色或强制深色主题;选择会持久保存,并同步传递给网页。普通深色尊重 prefers-color-scheme,强制深色则会请求 ArkWeb 转换未适配网页。

独立窗口与桌面体验

  • 每次启动都创建独立的多实例 UIAbility 窗口,多个网页应用可以同时运行。
  • 桌面快捷方式冷启动或热启动时直接进入目标网页应用,不经过管理主页。
  • 默认使用非沉浸式窗口并隐藏 AnyPWA 链接状态栏,只保留系统原生标题栏。
  • 可为每个应用启用纯网页沉浸模式,或在非沉浸模式下重新显示返回、加载状态和 URL。
  • target="_blank"window.open() 会创建新的受管网页窗口,不覆盖原窗口。
  • 网页媒体全屏时隐藏应用内工具栏;返回操作优先退出网页全屏。
  • PC/2-in-1 窗口会使用应用级名称和图标;系统支持 Desktop Extension Kit 时,同一网页应用的多个窗口会归入同一个快捷栏分组,不同网页应用仍保持独立。能力不可用时自动回退到系统默认分组。

PWA 与 Manifest

主动点击“检测 PWA”时,AnyPWA 按以下顺序发现配置:

  1. 使用当前应用 UA 和已有 Cookie 请求静态 HTML,读取 <link rel="manifest">
  2. 静态页面未声明 Manifest 时,在受限临时 ArkWeb 中加载页面并读取渲染后的 DOM。
  3. 对少数已验证站点使用精确主机兼容规则,例如 Outlook。
  4. 用户仍可把 .json.webmanifest 地址直接粘贴到链接框中。

动态检测窗口会拒绝设备权限、文件选择、HTTP 身份验证、JavaScript 弹窗和新窗口请求,并允许随时取消。检测与应用运行使用同一种 PC、手机或 HarmonyOS UA,避免因站点返回不同页面而误判。

已处理的 Manifest 成员包括:

  • nameshort_namedescriptionid
  • start_urlscope
  • displaydisplay_overrideorientation
  • theme_colorbackground_color
  • iconsscreenshotscategories
  • shortcuts
  • protocol_handlersfile_handlersshare_target
  • launch_handlerhandle_links

相对 URL 以 Manifest URL 为基准解析;start_url: "." 会落在 Manifest 所在目录。跨源 start_url、scope 和 id 会按安全回退规则处理,Manifest JSON 本身不会被误存为应用启动页。

导航与网页登录

每个应用可以选择:

模式 行为
精确匹配 PWA 遵守 Manifest scope;普通网页严格匹配协议、主机和端口,范围外链接交给系统浏览器
自定义匹配 完整 URL 包含指定文字时留在 ArkWeb,忽略大小写
任意匹配 所有 HTTP/HTTPS 跳转都留在应用窗口,适合 Google、Microsoft 等跨域登录流程

AnyPWA 会为每个网页应用归档其访问来源和 Session Cookie,并在重新打开窗口前恢复会话。任意匹配模式下,该应用内部访问过的来源会被归入同一个会话档案。

受 ArkWeb API 限制,这不是 Chromium 风格的完整 Profile 隔离:持久 Cookie、DOM Storage、IndexedDB、缓存等仍可能在同一 AnyPWA Bundle 的相同来源之间共享。

网页能力

以下能力可以按应用开关:

  • 系统剪贴板读取与写入
  • 相机和麦克风
  • 位置
  • 运动与方向传感器
  • 屏幕共享
  • 文件/文件夹选择与上传
  • 文件下载

敏感能力还会按“网页应用 + origin + 能力”向用户确认,可仅允许当前窗口或长期允许,并可从应用菜单重置。非安全网页来源不会获得设备权限。

navigator.clipboard.readText()writeText() 通过原生桥连接 HarmonyOS 系统剪贴板;富文本 read()/write() 保留 ArkWeb 原生行为。系统剪贴板读取需要 ohos.permission.READ_PASTEBOARD ACL。

支持范围

项目 当前状态
设备 HarmonyOS PC/2-in-1
最低系统 API API 23;API 23 上桌面图标的查询、自动更新和移除需手动完成
默认网页 UA PC
普通 HTTP/HTTPS 网站 支持
Web App Manifest 支持读取和应用主要配置
多窗口 支持,同一应用也可打开多个窗口
桌面快捷方式 支持,使用 AppGallery Kit Pin Shortcut 并由系统确认
Service Worker 当前 ArkWeb 环境不可用
离线 PWA / Web Push / 后台同步 不支持
独立 HAP、独立 Bundle 或独立系统权限 不支持,所有网页应用仍属于 AnyPWA
系统级动态协议/文件/分享处理器注册 不支持;协议处理目前只覆盖应用内导航

使用示例

普通网站或可自动识别的 PWA

  1. 点击主页右上角“+”。
  2. 输入正常访问入口,例如 https://github.com/
  3. 选择 PC、手机或 HarmonyOS 网页标识。
  4. 点击“检测 PWA”。
  5. 检查名称、启动地址、scope、显示模式和图标后保存。

需要跨域登录的服务

  1. 先按正常网址创建应用。
  2. 把“应用内链接匹配”设置为“任意匹配”。
  3. 打开应用并完成 Google、Microsoft 等跨域登录。
  4. 返回管理页再次编辑并检测;AnyPWA 会复用已有网页登录状态。

Outlook

  • 个人 Microsoft 账户入口:https://outlook.live.com/mail/
  • 工作或学校账户入口:https://outlook.office.com/mail/

Outlook 的初始 HTML 通常不直接声明 Manifest。AnyPWA 会尝试动态检测和精确兼容路径。若站点以后调整,可手动输入:

  • 个人账户:https://outlook.live.com/mail/manifests/pwa.json
  • 工作或学校账户:https://outlook.office.com/mail/manifests/pwa.json

更多步骤见应用内“配置示例”和上架与签名手册

构建

环境要求

  • 支持 HarmonyOS API 24 或更高 SDK 的 DevEco Studio
  • 工程 Hvigor 开发态配置版本 6.1.1
  • Node.js(DevEco Studio 已自带)
  • HarmonyOS PC/2-in-1 设备或模拟器
  • com.anypwa.shwstone 匹配的调试/发布签名

当前工程可使用 DevEco Studio 配套的 API 26 SDK 编译,targetSdkVersion 为 API 24, compatibleSdkVersion 为 API 23。API 23 支持创建桌面图标;查询、自动更新和移除桌面图标使用 API 24 接口,因此在 API 23 上会显示明确的手动操作提示。

安装依赖

使用 DevEco Studio 打开项目后同步依赖,或在配置好 OHPM 的终端中运行:

ohpm install

配置签名

根目录的真实 build-profile.json5、证书、Profile 和密码不会进入 Git。首次检出后:

  1. build-profile.template.json5 复制为 build-profile.json5
  2. 在 DevEco Studio 的 File > Project Structure > Project > Signing Configs 中配置签名。
  3. 确认签名 Profile 的 Bundle 为 com.anypwa.shwstone

项目声明了受限权限 ohos.permission.READ_PASTEBOARD。要安装原始配置构建的 HAP,调试或发布 Profile 必须已经获批该 ACL,否则安装会报:

9568289 / install failed due to grant request permissions failed
PermissionName: ohos.permission.READ_PASTEBOARD

完整流程见签名与上架操作手册。请勿提交 .p12.cer.p7b、密码或可复用签名材料。

编译调试 HAP

DEVECO_SDK_HOME=/Applications/DevEco-Studio.app/Contents/sdk \
  /Applications/DevEco-Studio.app/Contents/tools/hvigor/bin/hvigorw \
  --no-daemon --mode module -p product=default assembleHap

输出文件:

entry/build/default/outputs/default/AnyPWA.hap

校验包清单

/Applications/DevEco-Studio.app/Contents/tools/node/bin/node \
  scripts/verify-package.mjs \
  entry/build/default/outputs/default/AnyPWA.hap

校验器会读取最终包内清单,检查版本、Bundle、权限、设备类型和构建模式。它不能替代 AGC 签名、兼容性、隐私或上架校验。

测试

编译包含 Manifest、scope、origin、动态检测解析、窗口默认值和安全上下文断言的测试 HAP:

DEVECO_SDK_HOME=/Applications/DevEco-Studio.app/Contents/sdk \
  /Applications/DevEco-Studio.app/Contents/tools/hvigor/bin/hvigorw \
  --no-daemon --mode module -p module=entry@ohosTest assembleHap

运行 GitHub PWA 在线契约测试:

node scripts/test-github-pwa.mjs

动态 ArkWeb、窗口管理、桌面快捷方式、剪贴板、权限、登录和文件能力必须在 HarmonyOS PC/2-in-1 上验证;编译成功不代表这些运行时能力已端到端通过。

项目结构

AnyPWA/
├── AppScope/                         # Bundle、版本和全局图标
├── entry/src/main/ets/
│   ├── entryability/                 # 管理窗口与网页多实例窗口 Ability
│   ├── model/                        # 应用、Manifest、能力模型
│   ├── pages/                        # 管理主页、浏览器、帮助和配置教程
│   ├── services/                     # 存储、Manifest、快捷方式、剪贴板等服务
│   └── utils/                        # URL、scope、UA、Cookie 和匹配规则
├── entry/src/test/                   # ArkTS 单元断言
├── design/                           # AnyPWA 图标源文件
├── docs/                             # PWA 计划与发布文档
├── scripts/                          # 包校验和在线契约测试
├── CHANGELOG.md                      # 版本变更记录
├── LICENSE                           # Apache License 2.0
└── THIRD_PARTY_NOTICES.md            # 第三方材料归属

获取与安装

面向普通用户的正式版本通过华为应用市场分发:

GitHub v1.2.0 Release 提供对应版本的源码归档和变更说明,不提供可直接安装的 HAP。HarmonyOS 应用需要与设备及授权能力匹配的签名,开发者也可以使用自己的证书和包含 ohos.permission.READ_PASTEBOARD ACL 的 Profile 从源码构建。

已知限制

  • 当前 ArkWeb 环境不提供 Service Worker API。
  • 网页应用不是独立 Bundle,窗口分组、卸载、系统权限和数据 Profile 仍属于 AnyPWA。
  • ArkWeb 没有公开按 Web 组件动态创建独立持久化 Profile 的 API,相同来源的数据可能共享。
  • OAuth、支付或会议页面若依赖特殊 window.opener、DRM、企业策略或浏览器扩展,可能无法完全兼容。
  • 桌面快捷方式依赖 AppGallery Kit、系统服务、网络/时间环境和用户确认。
  • Manifest 扩展成员可以被识别,但不等于 HarmonyOS 已注册对应的系统级处理能力。

更完整的能力评估与后续方向见 PWA_SUPPORT_PLAN.md

参与贡献

欢迎提交 Issue 和 Pull Request。提交前建议:

  1. 说明目标 HarmonyOS/API/设备环境。
  2. 对 Manifest、URL、scope、UA 或存储逻辑补充可复现样例和测试。
  3. 至少完成主 HAP 与测试 HAP 编译。
  4. 不提交签名、ACL Profile、账号 Cookie、私钥、密码或用户网站数据。
  5. 明确区分“静态检查/编译通过”和“已在真实 HarmonyOS 设备验证”。

除非另有明确说明,向本仓库提交的贡献将按 Apache License 2.0 授权。

许可证

AnyPWA 自有代码和资源采用 Apache License 2.0 开源。该协议允许使用、修改和再分发,并包含明确的专利授权条款;分发时须遵守许可证中的保留声明等条件。

项目包含的 Font Awesome Free circle-question SVG 采用 CC BY 4.0,归属与修改说明见 THIRD_PARTY_NOTICES.md

Copyright 2026 ShwStone.

About

HarmonyOS PC/2-in-1 native web app and PWA manager

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages