@bubblewrap/cli

中文文档
1.27.0发布于 2026/10/10Apache-2.0近 30 天下载 7.1万

从网络宣言生成 TWA 项目的 CLI 工具

中文使用文档
文档目录37 节
  1. 所需资源
  2. 建立环境
  3. 集装箱
  4. 快速启动指南
  5. 安装泡泡包装
  6. 启动一个 Android 项目
  7. 建造Android项目
  8. 图标
  9. init
  10. build
  11. update
  12. validate
  13. install
  14. help
  15. doctor
  16. updateConfig
  17. merge
  18. fingerprint
  19. 子命令 :
  20. play
  21. 子命令
  22. twa-manifest.json 参考文献
  23. 特征
  24. 阿尔法依赖
  25. 签名KeyInfo
  26. 指纹
  27. 礼宾管理员
  28. 文件处理器
  29. 发射手
  30. 手动建立环境
  31. 获得Java开发工具包(JDK) 17.
  32. 获取 Android 命令行工具
  33. 告诉 Bubblewrap JDK 和 Android 命令行工具在哪里
  34. 更新 JDK 和 / 或 Android 命令行工具的位置 .
  35. 捐款
  36. 许可证
  37. 免责声明

泡泡包装 CLI

Node CI Status

Bubblewrap 是帮助开发者创建的命令行界面( CLI) a Android应用项目,使用 受托网络活动(TWA)。 。 。 .

所需资源

建立环境

当首次运行 Bubblewrap 时, 它会自动下载和安装 外部依赖性。 这是推荐的设置,但有可能 手动设置环境。 。 。 .

集装箱

作为直接用节点(Node.js)运行您机器上的cli的替代方案,您可以使用此功能 预装了 Cli 和所有依赖性 。 使用 CL 运行 docker run --rm -ti ghcr.io/googlechromelabs/bubblewrap:latest [cmd] 就像你平常一样 使用情况 bubblewrap [cmd]。 。 。 .

快速启动指南

安装泡泡包装

npm i -g @bubblewrap/cli

: 警告: 警告: 别用 sudo npm i -g @bubblewrap/cli 安装泡泡包装。 使用 npm 命令为 sudo 应避免造成不同种类的问题(见e/cn.4/sub.2/2000/l.48) 这里 财务报告和审定财务报表 这里) (中文(简体) ).

启动一个 Android 项目

从已有的 Web 声明生成一个 Android 项目:

bubblewrap init --manifest https://my-twa.com/manifest.json

当启动项目时, Bubblewrap 将下载《网络宣言》, 请您确认 用于构建Android工程的数值.

它还会要求您提供生成签名密钥所需的细节,用于签名 在上传到 Play Store 之前应用 .

:grey exclaim:尽管我们推荐了 Bubblewrap 用于建造和生成一个签名 APK, 来自 init 命令是一个正常的Android工程,可以打开 并使用 Android 工作室请参考 文档 用于构建和签名 使用Android Studio的应用程序.

建造Android项目

bubblewrap build

在首次构建项目时,需要安装Android Build Tools. 该工具将引用构建工具的安装过程. 确保阅读和接受 许可协议在程序前。 此进程将在 directory/decompressed android CLI 软件包的根目录.

由于建设步骤,该工具将生成一个签名APK(app-release-signed.apk(中文(简体) ) 用于测试应用程序和已签名的 AppBundle(./app-release-bundle.aab这可以是 上传到游戏存储器。您还需要向 验证您的域 。 这个 TWA 快速启动指南 解释如何提取生成信息所需的信息.

图标

Overview of bubblewrap commands

上图显示(在黑框中)哪些命令作为输入或输出各种文件(以白色椭圆)而产生. 指向文件的箭头指"创建或修改",指向命令的箭头指"被用做输入".

init

用法 :

从网络宣言中初始化一个信任的网络活动Android项目. 输入脚本 分析 Web 显示并生成Android 项目的默认值。 这个 将提示用户确认或输入无法生成的值.

bubblewrap init --manifest="<web-manifest-url>" [--directory="<path-to-output-location>"] [--chromeosonly] [--metaquest]

选项 :

  • --directory: 生成工程的路径。 当前目录的默认值 .
  • --chromeosonly:此旗下指定了只用于Chrome OS的构建,并阻止非Chrome OS设备安装应用.
  • --metaquest: 此旗帜指定构建将兼容Meta Quest设备.
  • --alphaDependencies: 启用依赖于即将到来的Android 库版本的特性 用于信任的网络活动或仍然不稳定的网络活动.

build

将项目构建为最终的APK,可以上传到Play Store.

命令会向用户询问它们存储密钥密码. 或者,用户可以设置 密码为 environtic 变量, 允许运行 build 作为持续整合的一部分. 设定 BUBBLEWRAP_KEYSTORE_PASSWORD 密钥存储密码和 BUBBLEWRAP_KEY_PASSWORD 作为密钥密码.

用法 :

bubblewrap build [--skipPwaValidation] [--skipSigning] [--manifest="<path-twa-manifest>"] [--signingKeyPath="<path-to-signing-key>"] [--signingKeyAlias="<key-alias>"]

选项 :

  • --skipPwaValidation:跳过将包裹的PWA与质量标准进行验证.
  • --skipSigning:跳过已建APK和App Bundle的签名. 其他与签名相关的旗帜在使用时会被忽略.
  • --signingKeyPath: 用于签名已建APK和App Bundle的密钥托尔路径 。 覆盖签名 Key. path 指定于 twa-manifest.json。 。 。 .
  • --signingKeyAlias: 键名. 签名 twa-manifest.json。 。 。 .
  • --manifest: 客户端应当查找的目录 twa-manifest.json。 。 。 .

update

重生成 Android 项目文件 twa-manifest.json 文档.

: 警告: 警告: Bubblewrap不期望生成的Android项目会使用 外出编辑. 手动添加到Android项目的任何文件将被删除或覆盖 何时 update 执行。 变动至 twa-manifest.json 被保留下来.

用法 :

bubblewrap update [--appVersionName="<version-string>"] [--skipVersionUpgrade] [--manifest="<path-twa-manifest>"]

选项 :

  • --appVersionName: 升级时使用版本名. 如果 --skipVersionUpgrade 已使用.
  • --skipVersionUpgrade: 跳过升级 appVersion 财务报告和审定财务报表 appVersionCode。 。 。 .
  • --manifest: 客户端应当查找的目录 twa-manifest.json。 。 。 .

validate

验证PWA再次验证在信任的网络活动中使用的质量标准.

用法 :

bubblewrap validate --url=[pwa-url]

install

将输出命令中生成的应用程序安装到连接用于调试的设备上 .

用法 :

bubblewrap install [--apkFile="/path-to-apk/apkfile.apk"]

选项 :

  • --apkFile:要安装的APK文件路径. 默认为 ./app-release-signed.apk。 。 。 .
  • --verbose:打印正在执行的adb命令.

help

显示命令和选项列表.

用法 :

bubblewrap help

doctor

验证 jdk 和 AndroidSdk 位于您配置指定的路径 他们必定是遵循正道的.

用法 :

bubblewrap doctor

updateConfig

设置 jdk 或 AndroidSdk 到给定路径的路径 .

用法 :

bubblewrap updateConfig  --jdkPath="/path-to-jdk" --androidSdkPath="/path-to-androidSdk"

选项 :

  • --jdkPath:设置jdk路径到给定路径.
  • --androidSdkPath:设置AndroidSdk给定的路径.

merge

将用户的网络显示合并到他们的twaManifest.json.

用法 :

bubblewrap merge --ignore [fields-list]

选项 :

  • --appVersionName: 升级时使用版本名. 如果 --skipVersionUpgrade 已使用.
  • --skipVersionUpgrade: 跳过升级 appVersion 财务报告和审定财务报表 appVersionCode。 。 。 .
  • --ignore:忽略列表中的所有字段。 接受所有可能字段 在《网络宣言》中.

fingerprint

管理用于生成用于网络应用程序的数字资产链接文件的指纹列表.

用法 :

bubblewrap fingerprint [subcommand]

全球旗帜 :

  • --manifest=<manifest>: 信任的网络活动配置路径 。',

子命令 :

add

在工程配置中添加指纹.

用法 :

bubblewrap fingerprint add [SHA-256 fingerprint] <flags>

其它旗帜 :

  • --name=<name>:可选设置名来帮助识别指纹. 名字已经打印 与指纹一起使用 list 子命令 .

remove

从工程配置中删除指纹.

用法 :

bubblewrap fingerprint remove [SHA-256 fingerprint] <flags>

list

列出项目配置中的指纹.

用法 :

bubblewrap fingerprint list <flags>

从工程配置生成一个资产链接文件

用法 :

bubblewrap fingerprint generateAssetLinks <flags>

旗帜 :

  • --output=<filename>: 从何处装入工程配置的路径.

play

管理您的 Google 游戏项目的文物 .

用法 :

bubblewrap play [subcommand]

说明数字 : 这些功能需要有一个服务账户文件才能正确工作. 请看 此文档 设立服务账户.

全局旗 (可以适用于所有特性命令):

  • --serviceAccountFile: 将服务账户json文件位置设置在 twa - manifest 中 .
  • --manifest: 指定当前目录中未使用的显示文件.

子命令

publish

向 Play Store 提供捆绑的发布 .

用法 :

bubblewrap play publish --serviceAccountFile="/path/to/service/account.json" --track="beta" --appBundleLocation="/home/appBundle.aab"

选项 :

  • --track: 将预建文件发布到 Google Play Store 指定音轨(默认为内部音轨).
  • --appBundleLocation:指定上传到Google Play的应用程序位置(默认为当前目录).

retain

:警告:这是一个实验性特征.

用法 :

bubblewrap play retain --add=86

选项 :

  • --add:指定要保存的捆绑以放出(如果只放出一款Chrome OS,这只能是Android捆绑).
  • --remove: 如果不再相关, 删除指定的捆绑 .
  • --list:在 twa-manifest.json 中显示已保留捆绑的列表,而非从游戏中保留的内容.

versionCheck

用法 :

bubblewrap play versionCheck --serviceAccountFile="/path/to/service/account.json"  --targetDirectory="/home/my/app/dir"

选项 :

  • --targetDirectory: 版本检查应运行的目录(默认为当前目录)。 这应该是你的气泡包工程目录.

twa-manifest.json 参考文献

这个 twa-manifest.json 文件以 init 已昏迷并包含配置 安卓应用.

运行后想要更改应用程序配置的开发者 init 可以通过 编辑此文件然后运行 update 命令.

字段 :

名称类型需求说明
额外信任的奥里金斯字符串 []虚假由开发商拥有并被"数字资产链接"验证的额外起源列表. 用户在浏览应用程序内部的出处时会保持全屏模式.
字母阿尔法依赖虚假允许Android应用程序使用依赖性的α版本. 默认为 false。 。 。 .
应用程序字符串虚假versionName android应用软件。 检查 Android 文档 详细情况.
应用程序代码编号虚假versionCode android应用软件。 检查 Android 文档 详细情况.
背景颜色字符串真实喷出屏幕背景所用的颜色 .
显示'standalone' | 'fullscreen' | 'fullscreen-sticky'虚假初始数据 显示模式 android应用软件. fullscreen-sticky 对应于Android的: 隐形粘贴默认为 standalone。 。 。 .
启用通知布尔真实设定为 true 允许通知代表团.
启用SiteSettingsShortcut布尔虚假向应用程序启动器中的站点设置添加快捷键。 默认为 true。 。 。 .
倒置类型'customtabs' | 'webview'虚假当用户设备上没有支持信任的Web活动的浏览器时使用的倒置策略. 默认为 'customtabs'。 。 。 .
特性特征虚假启用Android应用程序中的可选特性。 读取 特征 详细情况.
指纹指纹[虚假用于生成"数字资产链接"文件的指纹列表. 读取 指纹 详细情况.
生成器App字符串虚假用于生成Android项目的工具的标识符 。 泡泡包装的使用 bubblewrap-cli。只能由生成程序修改.
东道主字符串真实将在信任的网络活动中打开的源 .
图标Url字符串真实应用程序启动器和喷出屏幕所用的图标的完整 URL 。 必须是至少512x512px.
是 ChromeOS 仅此而已布尔虚假生成只针对ChromeOS设备的应用程序. 默认为 false。 。 。 .
是 Meta 查询布尔虚假生成一个兼容Meta Quest设备的应用程序. 默认为 false。 。 。 .
发射器Name字符串虚假在Android发射器上显示的Android应用程序的简称
可掩码IconUrl字符串虚假当设备支持时,可遮掩图标所用的图标的完整 URL .
单色IconUrl字符串虚假完整 URL 到单色图标, 当显示通知时使用 .
名称字符串真实Android应用程序的名称,安装在Android设备时显示在平地上.
导航颜色字符串真实导航栏所用的颜色 .
导航颜色字符串虚假设备处于暗模式时用于导航栏的颜色. 默认为 #000000。 。 。 .
导航 分块颜色字符串虚假导航条分隔符所用的颜色 。 默认为 #000000。 。 。 .
导航 Divider 颜色字符串虚假当设备为暗模式时用于导航条分隔器的颜色. 默认为 #000000。 。 。 .
方向'default' | 'any' | 'natural' | 'landscape' | 'portrait' | 'portrait-primary' | 'portrait-secondary' | 'landscape-primary' | 'landscape-secondary'虚假初始方向用于启动Android应用. 默认为 'default'。 。 。 .
软件包编号字符串真实这个 应用程序编号 用于输出Android应用程序.
保留 套装阵列虚假这些是您在发布新捆绑时想要保留的应用程序捆绑的捆绑.
服务账户JsonFile字符串虚假Play Store服务了账户信息. 设立指南
共享目标共享目标虚假网络共享目标 应用程序的配置 .
快捷键快捷键信息[虚假快捷键 应用程序的配置 .
签名键签名KeyInfo真实用于签名Android应用程序的签名密钥和别名. 读取 签名KeyInfo 详细情况.
飞出时间编号真实喷出屏幕的持续时间淡出动画 .
启动Url字符串真实TWA的起步路径. 必须是相对于域.
主题颜色字符串真实状态栏所用的颜色 .
主题颜色字符串真实暗状态栏所用的颜色 .
网络管理字符串虚假PWA网络宣言的完整URL. 要求应用程序与Chrome OS和Meta Quest设备兼容.
全部扩展Url字符串虚假浏览器认为在应用程序内的导航范围. 如果用户在范围外导航,则返回浏览器标签或窗口内的普通网页. 必须是完整的 URL 。 仅由 Meta Quest 设备要求和使用 .
薄荷丝克Version编号虚假最低限度 Android API 级别 用于应用程序运行。 默认为 23,如果 isMetaQuest 实值 true,以及 19 否则.
操作程序礼宾管理员[虚假清单 协议处理器 由应用程序支持.
文件处理器文件处理器[虚假清单 文件汉德尔斯 由应用程序支持.
启动手提电脑模式字符串虚假启动( h) 客户端 模式 该应用程序.

特征

开发者可以在他们的Android应用中启用额外的功能. 一些特性可能包括应用程序中更多的依赖性并增加二进制大小.

名称类型需求增加二进制大小说明
应用程序飞行器应用飞行器配置虚假真实读取 应用飞行器配置 详细情况.
第一个运行旗第一跑道旗舰虚假虚假读取 第一跑道旗舰 详细情况.
代表团代表团配置虚假真实读取 代表团配置 详细情况.
播放比灵播放比尔林配置虚假真实读取 播放比尔林配置 详细情况.

应用飞行器配置

启用 应用飞行器 SDK 在Android应用程序中。 包括额外的库并不符合Chrome OS.

名称类型需求说明
应用程序飞行器布尔真实应用飞行器识别码.
启用布尔真实设定为 true 以启用特性.

代表团配置

向Android系统代表位置权限对话框,而不是显示浏览器对话框. 当应用程序请求定位许可时被推荐,但默认无法启用,因为它包含了应用程序中的额外依赖性.

名称类型需求说明
启用布尔真实设定为 true 以启用特性.

播放比尔林配置

启用应用程序中的 Play Billing 集成并允许网络应用程序到 使用数字货物 API 接收付款。包括Android应用中的额外依赖性.

名称类型需求说明
启用布尔真实设定为 true 以启用特性.

第一跑道旗舰

启动应用程序时添加额外的查询参数,显示应用程序是否首次运行.

名称类型需求说明
启用布尔真实设定为 true 以启用特性.
查询参数Name字符串真实用于将首个运行信息附加到 start-url。 。 。 .

阿尔法依赖

名称类型需求说明
启用布尔虚假设定为 true 允许应用程序使用 alpha 版本 android-browser-helper。 。 。 .

签名KeyInfo

关于文件系统位置和用于签名Android应用程序的别名的信息.

名称类型需求说明
路径字符串真实本地文件系统中的密钥文件路径
别名字符串真实用于在密钥托里签名的密钥的别名

指纹

申请的签名指纹信息. 用于生成 assetlinks.json 文件,并由 fingerprint 命令.

名称类型需求说明
名称字符串虚假指纹的可选名称.
价值字符串真实指纹的SHA-256值.

礼宾管理员

为申请注册的礼宾处理员名单. 这些条目可能并不完全符合网页上最初的内容,因为这些条目已经正常化并经过验证 这些 规则。 如果一个webmanifest条目出于任何原因(无效协议,错误的目标url,丢失"%s"令牌)是不正确的,将会被忽略并打印出警告. 见 这里 欲了解更多关于《议定书》处理器规格的信息。 支持协议的完整列表是 这里。 。 。 .

名称类型需求说明
协议字符串真实登记的数据方案(例如:. bitcoin, (中文(简体) ), irc, (中文(简体) ), web+coffee) (中文(简体) ).
url 密码字符串真实将自定义数据方案转换回 http(s) 链接的公式,必须包含“%s” , 并且与 Web 显示文件来源相同 。 示例 https://test.com/?target=%s

文件处理器

为应用程序注册的文件处理器列表 。 这些条目可能并不完全符合网页上的最初内容。 如果一个webmanifest条目因任何原因不正确,将会被忽略并打印出警告. 见 这里 关于文件处理的更多信息 这里 用于文件 handlers webmanifest spec.

名称类型需求说明
动作Url字符串真实如果文件处理器发射时匹配相应的 MIME 类型, 要导航的 URL
mIME 类型字符串 []真实文件处理器的 MIME 类型列表

发射手

字符串,指定应用程序在启动时要加载的上下文 。 可能的值有:"自动","焦点-存在","navigate-存在","navigate-new"等. 见 启动( h) 更多信息.

手动建立环境

获得Java开发工具包(JDK) 17.

Android命令行工具需要JDK的正确版本来运行. 防止版本 与已经安装的 JDK 版本相冲突, Bubblewrap 使用可以解析的 JDK 一个单独的文件夹.

下载与您的操作系统兼容的 JDK 17 版本 收养 在自己的文件夹中提取它.

: 警告: 警告: 使用低于17的版本将无法编译项目和更高 版本与Android命令行工具不相容.

获取 Android 命令行工具

下载与您的操作系统兼容的Android命令行工具 https://developer.android.com/studio#命令-行-工具-只限。 。 。 . 创建文件夹并提取下载的文件到其中 。 这将进一步安装AndroidSdk和Android SDK管理器而无需安装整个Android IDE.

告诉 Bubblewrap JDK 和 Android 命令行工具在哪里

运行时 bubblewrap 它将首次询问它在哪里能找到 JDK 和 Android 命令 线上工具。 所以,注意双方被解压的地点.

为确保您注意到正确的位置, 请检查每个目录是否包含以下文件 :

  • 打开 窗口 财务报告和审定财务报表 链接,对 打开 JDK 路径应当包含 bin, (中文(简体) ), include , (中文(简体) ),lib等 (中文(简体) ). 打开 麦克OS, (中文(简体) ), 目录应包含 Contents 子目录.
  • 这个 AndroidSDK 软件 路径应当包含 tools 应该有 bin, (中文(简体) ), cli

更新 JDK 和 / 或 Android 命令行工具的位置 .

如果 JDK 或 Android 命令行工具的位置设置错误路径或 如果它们的位置在初始配置后有所改变,则其中任何一个的位置都可以 通过编辑配置文件来更改 ${USER_HOME}/.bubblewrap/config.json。 。 。 .

样本配置.json

{
  "jdkPath":"\\user\\home\\bubblewrap-user\\open-jdk",
  "androidSdkPath":"\\user\\home\\bubblewrap-user\\android-cli"
 }

(注:确保你没有 spaces 在机器人SdkPath。 检查 此链接 详细情况。 )

捐款

见 捐款 为了更多.

许可证

见 自由主义 为了更多.

免责声明

这不是谷歌的产品.

版本与发布记录

@bubblewrap/cli 共发布 76 个版本,首次发布于 2020/03/11;过去 12 个月发布了 3 个版本。

版本发布日期距今
1.27.0latest2026/10/1030 天前
1.26.02026/10/091 个月前
1.25.02026/07/313 个月前
1.24.12025/09/291.1 年前
1.24.02025/09/251.1 年前
1.23.02025/06/251.4 年前

其他发布通道:canary → 1.14.0-alpha.3。

关于 @bubblewrap/cli 的常见问题

@bubblewrap/cli 是什么?

从网络宣言生成 TWA 项目的 CLI 工具

如何安装 @bubblewrap/cli?

在项目目录运行 npm install @bubblewrap/cli,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 bubblewrap,可以用 npx bubblewrap 直接运行。

@bubblewrap/cli 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/bubblewrap__cli 是否存在。

@bubblewrap/cli 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@bubblewrap/cli 可以商用吗?

@bubblewrap/cli 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@bubblewrap/cli 的下载量有多少?

根据 npm 官方下载统计,@bubblewrap/cli 在 2026/10/09 – 2026/11/07 这 30 天内被下载 71,186 次,日均约 2,373 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bubblewrap/cli 还在维护吗?

最新版本 1.27.0 发布于 2026/10/10(30 天前);至今共发布 76 个版本,其中过去 12 个月发布了 3 个;首次发布于 2020/03/11。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。