如果您是刚开始接触 Android 和 Google Play 的 Web 开发者,您应该了解以下详细信息: 注意。关于这一点,已有很多资源和文档(这要归功于 Android 但在这里,我们将重点介绍一些重要概念以及这些概念与 Bubblewrap 之间的关系。
上传密钥与签名密钥
如果您打算使用 Bubblewrap 生成 Android App Bundle (AAB) 文件(注意:从 8 月开始) 2021 年,Google Play 将要求所有新应用都使用 Android App Bundle 格式 或 APK 来上传并发布到 Google Play,您需要使用签名密钥为您的应用签名。Google Google Play 为您提供了两种处理方式:
- Play 应用签名(强烈建议):Google 将管理和保护您应用的签名密钥
。它会使用该地址为您的 APK 签名以进行分发。Play 应用签名功能使用两个密钥。“应用
签名密钥”Google 将为您管理该密钥您应该保留这些
仅对你可见您可以使用上传密钥为应用签名,然后再将应用上传到 Play 管理中心。这个
如果您的上传密钥丢失或被盗,系统可以让您通过
与 Play 支持团队联系。目前,Google Play
可让您以 AAB 或 APK 格式上传应用:
<ph type="x-smartling-placeholder">
- </ph>
- Android App Bundle (AAB): 将 AAB 文件上传到 Play 管理中心后,会将 APK 的构建和生成工作推迟到 Google Play 商店。当用户下载并安装您的应用时,Google Play 会分发该应用 作为已签名的 APK 提供给他们。因此,APK 的签名也需要由 Google Play。因此,默认情况下,如果您以 AAB 格式将应用上传到 Play 管理中心 要求您使用 Play 应用签名功能
- APK:对于 APK,您可以选择选择加入 Play 应用签名计划。选择加入 Play 应用 强烈建议您使用签名,因为它可以提高签名密钥的安全性。如前所述 之前,Google Play 很快将要求所有新应用均以 AAB 格式上传, 建议您不要上传 APK
- 管理您自己的签名密钥:如果您选择自行管理密钥,而不选择加入 Play 应用计划 签名时,您对应用的签名密钥负全责。与 Play 应用签名不同 您丢失密钥就无法重置。因此,丢失应用的签名密钥意味着 也无法更新应用
在 bubblewrap init
设置过程中,当您看到“Signing key information (5/5)”(签名密钥信息 (5/5))部分时,
系统将提示您输入“Key store location”和“Key name”,或者使用默认值。通过
默认的密钥库位置是项目目录中的 android.keystore
文件,
键名为 android
。如果 Bubblewrap 在
它就会为您创建一个密码,并提示您输入密码。记下密码
因为您在构建流程 (bubblewrap build
) 中需要用到这些文件,在构建过程中,系统将使用
为您的应用签名。如果您选择加入 Play 应用签名计划,那么 Bubblewrap 的签名密钥
生成并用于为您的应用签名,该密钥就变成了“上传密钥”。无论您是选择使用
使用气泡封装生成的密钥作为您的签名或上传密钥,因此您应保护好密钥并妥善保管。
我们不建议将其提交到版本控制。而是应该限制
访问。
Digital Asset Links
需要 Digital Asset Links ���能声明您的网站与 Android 之间的关系
应用。为确保由 Bubblewrap 生成的 Android 应用正确通过验证,并作为
Trusted Web Activity(而不是 Chrome 自定义标签页),则需要将相应的键添加到
您的 assetlinks.json
文件。然后将其上传到您的网站,网址为 .well-known/assetlinks.json
(相对于根目录)。您的 assetlinks.json
文件应采用以下格式:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.your.package_name",
"sha256_cert_fingerprints": [
"XX:XX:XX:..."
]
}
}]
获取 SHA256 证书指纹
如需创建 assetlinks.json
文件,您需拥有关联的 SHA 256 证书指纹
替换为应用的签名密钥。需要注意的重要一点是
您的签名密钥和上传密钥将有所不同。请务必
尤其是当您发现自己的应用作为 Chrome 自定义标签页(使用
显示浏览器栏)。那么,您的 assetlinks.json
文件可能不包含
指纹。
在 assetlinks.json 中同时提供签名证书和上传证书的指纹会很有帮助
更轻松地在本地调试应用。如需了解详情,请参阅下文的添加更多键
了解如何在 assetlinks.json
文件中同时拥有这两个键。
可以通过几种不同的方式获取指纹,下文将对此进行详细介绍。 它们应该都为您提供相同的指纹,因此您可以自由选择最适合的方法 非常方便。
通过 Play 管理中心
您可能会拥有 1 个或 2 个密钥,具体取决于您是否选择加入 Play 应用签名计划。检索 每个密钥的相应 SHA256 指纹:
- 前往 Play 管理中心
- 选择您感兴趣的应用
- 在左侧导航菜单中的发布下,前往设置 ->应用完整性。
- 复制相应密钥的 SHA256:
签名密钥:复制“应用签名密钥证书”的 SHA256 指纹。这个 如果您从 Google Play 商店下载了该应用,则该应用的指纹将对应于您的应用 Google Play 会分发使用签名密钥签名的您的应用。
上传密钥:复制“上传密钥证书”的 SHA256 指纹。这个 指纹将与您的应用相对应,如果您在本地安装(通过 USB 通过 ADB 示例)。该 APK(在您的本地计算机上)是由 Bubblewrap 构建的,因此由 以及它为您创建的密钥(在
init
设置期间)。请注意,这可能是 签名密钥,但它实际上变成了“上传密钥”一次 您通过 Play 发布应用。
经由keytool
keytool 是一个键, 证书管理工具。您可以使用密钥工具提取 生成的 APK 或 AAB Bubblewrap。请注意,该指纹适用于本地签名密钥,如果 将应用上传到 Play 并选择加入 Play 应用签名计划后,此密钥就成为了“上传密钥”。
keytool -printcert -jarfile [path to APK or AAB] | grep SHA256
通过资产链接工具
为应用获取正确的 Digital Asset Links 文件的另一种方法是使用 Asset Link 工具:
- 从 Play 商店安装 Asset Link 工具。
- 在同一设备上,从 Google Play 商店下载您的应用,或在本地安装您的应用。
- 打开 Asset Link Tool 应用,系统会列出您的设备上安装的所有应用
设备(按软件包名称列出)。按您之前选择的应用 ID 过滤列表,
bubblewrap init
,然后点击该条目。 - 您将看到一个列出您应用的签名和生成的 Digital Asset Link 的页面。点击 使用底部的“复制”或“共享”按钮,按照自己的喜好将其导出(例如保存到 Google Keep、 通过电子邮件将其发送给自己)。
这与之前有关签名或上传密钥的原理相同。如果您是通过 Google Play 商店中,Asset Link 工具将为您提供应用签名密钥的指纹。如果 您直接从本地计算机安装了应用,那么指纹就是密钥的 已生成气泡框。
确保您的素材资源链接文件可供访问
上传完毕后,请确保您可以在浏览器中访问素材资源链接文件。
检查 https://example.com/.well-known/assetlinks.json
是否解析为您刚刚上传的文件。
基于 Jekyll 的网站
如果您的网站是由 Jekyll 生成的(例如 GitHub Pages),则需要添加一行
配置,使 .well-known
目录包含在输出中。
GitHub 帮助中提供了有关此主题的更多信息。
在网站的根目录下创建一个名为 _config.yml
的文件(如果该文件已存在,则将其添加到该文件中),然后
输入:
# Folders with dotfiles are ignored by default.
include: [.well-known]
添加更多密钥
一个 Digital Asset Link 文件可以包含多个应用,每个应用的文件可以包含多个应用 一个键。 例如,要添加第二个键,只需使用 Asset Link 工具 确定键并将其添加为第二个条目。 Chrome 中用于解析此 JSON 的代码非常严格,因此请确保您不会意外添加 额外的英文逗号。
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.your.package_name",
"sha256_cert_fingerprints": [
"XX:XX:XX:..."
]
}
},{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.your.package_name",
"sha256_cert_fingerprints": [
"XX:XX:XX:..."
]
}
}]
问题排查
Chrome 会记录 Digital Asset Links 验证失败的原因,并且您可以在
adb logcat
的 Android 设备。
如果您在 Linux/Mac 上开发,可以查看已连接设备的相关日志
替换为:
> adb logcat -v brief | grep -e OriginVerifier -e digital_asset_links
例如,如果您看到 Statement failure matching fingerprint.
消息,则应使用
Asset Link Tool 查看应用的签名,并确保其与 assetlinks.json
中的签名一致
文件。