使用 Fastlane 将 Android 应用分发给测试人员

本指南介绍了如何使用 Fastlane 将 AAB build 分发给测试人员;Fastlane 是一个开源平台,可自动构建和发布 iOS 和 Android 应用。它遵循 Fastfile 中定义的简单说明。设置 Fastlane 和 Fastfile 后,您可以将 App Distribution 与您的 Fastlane 配置进行集成。

App Distribution 与 Google Play 的内部应用分享服务相集成,可处理您上传的 AAB 文件,并提供专门根据您的测试人员设备配置而优化的 APK。通过分发 AAB 文件,您可以实现以下目标:

  • 运行专门根据您的测试人员设备而优化的 APK(由 Google Play 提供)。

  • 发现并调试设备特定的问题。

  • 测试 App Bundle 功能,例如 Play Feature DeliveryPlay Asset Delivery

  • 减少测试人员的下载量。

所需权限

如需将 AAB 文件上传到 App Distribution,您必须将您的 Firebase 应用与 Google Play 中的应用相关联。您必须拥有所需的访问权限级别才能执行这些操作。

如果您没有必需的 Firebase 访问权限,可以请求 Firebase 项目所有者通过 Firebase 控制台 IAM 设置为您分配合适的角色。如果您对访问 Firebase 项目(包括查找或分配所有者)有疑问,请查看“权限设置和 Firebase 项目访问权限”常见问题解答

下表适用于将 Firebase 应用与 Google Play 中的应用相关联以及上传 AAB 文件这两个场景。

Firebase 控制台中的操作 所需的 IAM 权限 默认包含所需权限的 IAM 角色 其他必需的角色
将 Firebase 应用与 Google Play 中的应用相关联 firebase.playLinks.update 拥有下列任一角色: 管理员身份访问 Google Play 开发者帐号
将 AAB 文件上传到 App Distribution firebaseappdistro.releases.update 拥有下列任一角色: ––

准备工作

  1. 将 Firebase 添加到您的 Android 项目(如果尚未添加)。在此工作流结束时,您的 Firebase 项目中就有了一个 Firebase Android 应用。

    如果您没有使用任何其他 Firebase 产品,只需创建一个项目并注册应用。如果您决定使用其他产品,请务必完成将 Firebase 添加到您的 Android 项目中的所有步骤。

  2. 如需创建关联到 Google Play 的 Firebase 链接并上传 AAB 文件,请确保您的应用满足以下要求:

    • Google Play 中的应用和 Firebase Android 应用均使用同一软件包名称进行注册。

    • Google Play 中的应用在应用信息中心内设置,并发布到某个 Google Play 轨道(内部测试、封闭式测试、开放式测试或正式版)。

    • 该应用在 Google Play 中的审核已完成,且已发布。 如果“应用状态”列显示以下状态之一,表明您的应用已发布:内部测试(非草稿内部测试)、封闭式测试、开放式测试或正式版。

  3. 将您的 Firebase Android 应用关联至您的 Google Play 开发者帐号:

    1. 在 Firebase 控制台中,转到您的 项目设置,然后选择“集成”标签页。

    2. “Google Play”卡片中,点击关联
      如果您已有指向 Google Play 的链接,请改为点击管理

    3. 按照屏幕上的说明启用 App Distribution 集成,并选择要与 Google Play 关联的 Firebase Android 应用。

    详细了解如何关联到 Google Play

第 1 步:设置 Fastlane

  1. 安装并设置 Fastlane

  2. 如需将 App Distribution 添加到您的 Fastlane 配置中,请从您的 Android 项目的根目录运行以下命令:

    fastlane add_plugin firebase_app_distribution

    如果该命令提示您选择某个选项,请选择 Option 3: RubyGems.org

第 2 步:进行 Firebase 身份验证

您必须首先通过以下方法之一对 Firebase 项目进行身份验证,然后才能使用 Fastlane 插件。默认情况下,若未使用其他身份验证方法,Fastlane 插件会从 Firebase CLI 查找凭据。

第 3 步:设置 Fastfile 并分发应用

  1. ./fastlane/Fastfile 通道中,添加 firebase_app_distribution 代码块。请使用以下参数配置分发:
    firebase_app_distribution 参数
    app

    必填:您的应用的 Firebase 应用 ID。您可以在 Firebase 控制台的“常规设置”页面中找到应用 ID。

    app: "1:1234567890:android:0a1b2c3d4e5f67890"
    firebase_cli_token

    使用 Firebase CLI 对 CI 环境进行身份验证时输出的刷新令牌(如需了解详情,请参阅将 CLI 与 CI 系统配合使用)。

    service_credentials_file

    您的 Google 服务帐号 json 文件的路径。如需了解如何使用服务帐号凭据进行身份验证,请参见上文。

    android_artifact_type

    指定 Android 文件类型(APK 或 AAB)。

    android_artifact_path

    取代 apk_path(已弃用)。您要上传的 APK 或 AAB 文件的绝对路径。如果未指定,则 Fastlane 会根据生成文件的通道确定该文件的位置。

    release_notes
    release_notes_file

    此 build 的版本说明。

    您可以直接指定版本说明:

    release_notes: "Text of release notes"

    或者指定一个纯文本文件的路径:

    release_notes_file: "/path/to/release-notes.txt"
    testers
    testers_file

    您要邀请的测试人员的电子邮件地址。

    您可以采用以英文逗号分隔的电子邮件地址列表的形式指定测试人员:

    testers: "ali@example.com, bri@example.com, cal@example.com"

    或者,您可以指定一个纯文本文件的路径,该文件包含以英文逗号分隔的电子邮件地址列表:

    testers_file: "/path/to/testers.txt"
    groups
    groups_file

    您要邀请的测试人员群组(请参阅管理测试人员)。使用群组别名指定群组,您可以在 Firebase 控制台中查找群组别名。

    您可以采用以英文逗号分隔的列表的形式来指定群组:

    groups: "qa-team, trusted-testers"

    或者,您可以指定一个纯文本文件的路径,该文件包含以英文逗号分隔的群组名称列表:

    groups_file: "/path/to/groups.txt"
    debug

    布尔值标志。您可以将其设置为 true 以显示详细的调试输出。

platform :android do
    desc "My awesome app"
    lane :distribute do
        build_android_app(task: "bundle", ...)
        # build_android_app is a built-in fastlane action.
        release = firebase_app_distribution(
            app: "1:123456789:android:abcd1234",
            testers: "tester1@company.com, tester2@company.com",
            release_notes: "Lots of amazing new features to test out!",
            android_artifact_type: "AAB"
        )
    end
end

如需向测试人员提供此 build,请运行您的通道:

fastlane <lane>

该操作的返回值是用于表示上传版本的哈希值。 您也可以使用 lane_context[SharedValues::FIREBASE_APP_DISTRO_RELEASE] 获取此哈希值。如需详细了解此哈希值中的可用字段,请参阅 REST API 文档

在上传版本后,Fastlane 插件会输出以下链接。这些链接可帮助您管理二进制文件,并确保测试人员和其他开发者使用正确的版本:

  • 指向显示单个版本的 Firebase 控制台的链接。您可以与组织中的其他开发者分享此链接。
  • 测试人员体验(Android 原生应用)中的版本链接,可让测试人员查看版本说明并将应用安装到设备上。测试人员需要能够访问相应版本才能使用该链接。
  • 直接下载并安装应用的二进制文件(APK 或 AAB 文件)的签名链接。该链接将在 1 小时后过期。

在您分发 build 后,可在 150 天内通过 Firebase 控制台的 App Distribution 信息中心中访问该 build。当该 build 距离到期还有 30 天的时候,控制台中和测试人员的测试设备上的 build 列表中都会显示到期通知。

之前未受邀测试应用的测试人员会收到邀请其开始测试的电子邮件。当有新的 build 准备接受测试时,现有测试人员会收到电子邮件通知。如需了解如何安装测试应用,请参阅测试人员设置指南。您可以在 Firebase 控制台中监控每个测试人员的状态,以确定他们是否接受了邀请以及是否下载了应用。

(可选)如需在每次通过 App Distribution 创建新版本时自动递增 build 编号,您可以使用 firebase_app_distribution_get_latest_release 操作以及类似 increment_version_code fastlane 插件的方法。 以下代码提供了有关如何自动递增 build 编号的示例:

lane :increment_version do
  latest_release = firebase_app_distribution_get_latest_release(
    app: "<your Firebase app ID>"
  )
  increment_version_code({ version_code: latest_release[:buildVersion].to_i + 1 })
end

如需详细了解 firebase_app_distribution_get_latest_release 操作,请参阅获取应用最新版本的信息

第 4 步(可选):管理发行版本的测试人员

您可以使用 Fastfile 文件或直接运行 Fastlane 操作在项目或群组中添加测试人员,以及从项目或群组中移除测试人员。运行操作会直接替换 Fastfile 中设置的值。

将测试人员添加到 Firebase 项目后,您可以将其添加到各个版本中。从 Firebase 项目中移除的测试人员将无法再访问项目中的版本,但仍可能在一段时间内保留对这些版本的访问权限。

如果有大量测试人员,不妨考虑使用群组。

使用 Fastfile

# Use lanes to add or remove testers from a project.
lane(:add_testers) do
  firebase_app_distribution_add_testers(
    emails: "foo@google.com,bar@google.com"
    # or file: "/path/to/testers.txt"
    group_alias: "qa-team" # (Optional) add testers to this group
  )
end

lane(:remove_testers) do
  firebase_app_distribution_remove_testers(
    emails: "foo@google.com,bar@google.com"
    # or file: "/path/to/testers.txt"
    group_alias: "qa-team" # (Optional) remove testers from this group only
  )
end
# Add or remove testers with the terminal
$ fastlane add_testers
$ fastlane remove_testers

运行 Fastlane 操作

fastlane run firebase_app_distribution_create_group display_name:"QA Team" alias:"qa-team"
fastlane run firebase_app_distribution_add_testers group_alias:"qa-team" emails:"foo@google.com,bar@google.com"
fastlane run firebase_app_distribution_remove_testers group_alias:"qa-team" emails:"foo@google.com,bar@google.com"
fastlane run firebase_app_distribution_delete_group alias:"qa-team"

您还可以使用 --file="/path/to/testers.txt(而非 --emails)指定测试人员。

firebase_app_distribution_add_testersfirebase_app_distribution_remove_testers 任务也接受以下参数:

  • project_name:您的 Firebase 项目编号。
  • group_alias(可选):如果指定,则将测试人员添加到指定的群组(或从指定的群组中移除测试人员)。
  • service_credentials_file:Google 服务凭据文件的路径。
  • firebase_cli_token:Firebase CLI 的身份验证令牌。

service_credentials_filefirebase_cli_token 与上传操作使用的参数相同。

第 5 步(可选):获取有关应用最新版本的信息

您可以使用 firebase_app_distribution_get_latest_release 操作在 App Distribution 中获取有关应用最新版本的信息,包括应用版本信息、版本说明和创建时间。用例包括自动增加版本编号以及沿用上一版本中的版本说明。

该操作的返回值是用于表示最新版本的哈希值。 您也可以使用 lane_context[SharedValues::FIREBASE_APP_DISTRO_LATEST_RELEASE] 获取此哈希值。如需详细了解此哈希值中的可用字段,请参阅 REST API 文档

参数

firebase_app_distribution_get_latest_release 参数
app

必填:您的应用的 Firebase 应用 ID。您可以在 Firebase 控制台的“常规设置”页面中找到应用 ID。

app: "1:1234567890:android:0a1b2c3d4e5f67890"
firebase_cli_token

使用 Firebase CLI 对 CI 环境进行身份验证时输出的刷新令牌(如需了解详情,请参阅将 CLI 与 CI 系统配合使用)。

service_credentials_file

您的 Google 服务帐号 json 文件的路径。如需了解如何使用服务帐号凭据进行身份验证,请参见上文。

debug

布尔值标志。您可以将其设置为 true 以显示详细的调试输出。

后续步骤