Android 概念(面向 Web 开发者)

Peter Conn
Peter Conn
Joyce Toh
Joyce Toh

如果您是刚开始接触 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 才能声明您的网站与 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 指纹:

  1. 前往 Play 管理中心
  2. 选择您感兴趣的应用
  3. 在左侧导航菜单中的发布下,前往设置 ->应用完整性
  4. 复制相应密钥的 SHA256:

为您的签名或上传密钥检索相应的 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 工具

  1. 从 Play 商店安装 Asset Link 工具
  2. 在同一设备上,从 Google Play 商店下载您的应用,或在本地安装您的应用。
  3. 打开 Asset Link Tool 应用,系统会列出您的设备上安装的所有应用 设备(按软件包名称列出)。按您之前选择的应用 ID 过滤列表, bubblewrap init,然后点击该条目。
  4. 您将看到一个列出您应用的签名和生成的 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 中的签名一致 文件。