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

您可以使用 App Distribution Gradle 插件将 App Distribution 集成到 Android 构建过程中。利用该插件,您可以在应用的 Gradle 文件中指定测试人员和版本说明,从而针对应用的不同 build 类型和变体配置分发。

本指南介绍如何使用 App Distribution Gradle 插件将 APK 分发给测试人员。

准备工作

将 Firebase 添加到您的 Android 项目(如果尚未添加)。

如果您没有使用任何其他 Firebase 产品,只需创建一个项目并注册应用。但是,如果您决定以后使用其他产品,请务必完成上述链接页面上的所有步骤。

第 1 步:设置 Android 项目

  1. 在您的根级(项目级)Gradle 文件(<project>/build.gradle.kts<project>/build.gradle)中,将 App Distribution Gradle 插件添加为依赖项:

    Kotlin

    plugins {
        // ...
        id("com.android.application") version "7.2.0" apply false
    
        // Make sure that you have the Google services Gradle plugin dependency
        id("com.google.gms.google-services") version "4.3.15" apply false
    
        // Add the dependency for the App Distribution Gradle plugin
        id("com.google.firebase.appdistribution") version "4.0.0" apply false
    }
    

    Groovy

    plugins {
        // ...
        id 'com.android.application' version '7.2.0' apply false
    
        // Make sure that you have the Google services Gradle plugin dependency
        id 'com.google.gms.google-services' version '4.3.15' apply false
    
        // Add the dependency for the App Distribution Gradle plugin
        id 'com.google.firebase.appdistribution' version '4.0.0' apply false
    }
    
  2. 在您的模块(应用级)Gradle 文件(通常是 <project>/<app-module>/build.gradle.kts<project>/<app-module>/build.gradle)中,添加 App Distribution Gradle 插件:

    Kotlin

    plugins {
      id("com.android.application")
    
      // Make sure that you have the Google services Gradle plugin
      id("com.google.gms.google-services")
    
      // Add the App Distribution Gradle plugin
      id("com.google.firebase.appdistribution")
    }
    

    Groovy

    plugins {
      id 'com.android.application'
    
      // Make sure that you have the Google services Gradle plugin
      id 'com.google.gms.google-services'
    
      // Add the App Distribution Gradle plugin
      id 'com.google.firebase.appdistribution'
    }
    
  3. 如果您受公司代理或防火墙保护,请添加以下 Java 系统属性,以使 App Distribution 能够将您的分发上传到 Firebase:

    -Djavax.net.ssl.trustStore=/path/to/truststore -Djavax.net.ssl.trustStorePassword=password
    

第 2 步:进行 Firebase 身份验证

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

第 3 步:配置您的分发属性

模块(应用级)Gradle 文件(通常为 <project>/<app-module>/build.gradle.kts<project>/<app-module>/build.gradle),请通过添加至少 1个 firebaseAppDistribution 部分来配置 App Distribution。

例如,要将 release build 分发给测试人员,请按照以下说明操作:

Kotlin

import com.google.firebase.appdistribution.gradle.firebaseAppDistribution

android {

  // ...

  buildTypes {
      getByName("release") {
          firebaseAppDistribution {
              artifactType = "APK"
              releaseNotesFile = "/path/to/releasenotes.txt"
              testers = "ali@example.com, bri@example.com, cal@example.com"
          }
      }
  }

  // ...
}

Groovy

android {

  // ...

  buildTypes {
      release {
          firebaseAppDistribution {
              artifactType="APK"
              releaseNotesFile="/path/to/releasenotes.txt"
              testers="ali@example.com, bri@example.com, cal@example.com"
          }
      }
  }

  // ...
}

您可以针对构建类型和产品变种配置 App Distribution。

例如,如需分发采用“演示”和“完整”产品变种的 debugrelease build,请按照以下说明操作:

Kotlin

import com.google.firebase.appdistribution.gradle.firebaseAppDistribution

android {

  // ...

  buildTypes {
      getByName("debug") {...}
      getByName("release") {...}
  }

  flavorDimensions += "version"
  productFlavors {
      create("demo") {
          dimension = "version"
          firebaseAppDistribution {
              releaseNotes = "Release notes for demo version"
              testers = "demo@testers.com"
          }
      }
      create("full") {
          dimension = "version"
          firebaseAppDistribution {
              releaseNotes = "Release notes for full version"
              testers = "full@testers.com"
          }
      }
  }

  // ...
}

Groovy

android {

  // ...

  buildTypes {
      debug {...}
      release {...}
  }

  flavorDimensions "version"
  productFlavors {
      demo {
          dimension "version"
          firebaseAppDistribution {
              releaseNotes="Release notes for demo version"
              testers="demo@testers.com"
          }
      }
      full {
          dimension "version"
          firebaseAppDistribution {
              releaseNotes="Release notes for full version"
              testers="full@testers.com"
          }
      }
  }

  // ...
}

请使用以下参数配置分发:

App Distribution 构建参数
appId

您的应用的 Firebase 应用 ID。只有在您未安装 Google 服务 Gradle 插件时才需要此 ID。您可以在 google-services.json 文件中或在 Firebase 控制台的“常规设置”页面中找到此应用 ID。您的 build.gradle 文件中的值会覆盖 google-services 插件的输出值。

appId="1:1234567890:android:321abc456def7890"
serviceCredentialsFile

服务帐号私钥 JSON 文件的路径。只有在使用服务帐号身份验证时才需要此参数。

artifactType

指定应用的文件类型。可以设置为 "AAB""APK"

artifactPath

您要上传的 APK 或 AAB 文件的绝对路径。

releaseNotesreleaseNotesFile

此 build 的版本说明。

您可以直接指定版本说明,或指定一个纯文本文件的路径。

testerstestersFile

您要向其分发构建版本的测试人员的电子邮件地址。

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

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

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

testersFile="/path/to/testers.txt"
groupsgroupsFile

您要向其分发构建版本的测试人员群组(请参阅管理测试人员)。使用群组别名指定群组,您可以在 Firebase App Distribution 控制台的测试人员标签页中查找群组别名。

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

groups="qa-team, android-testers"

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

groupsFile="/path/to/tester-groups.txt"
stacktrace

输出用户异常的堆栈轨迹。这在调试问题时很有用。

第 4 步:将您的应用分发给测试人员

  1. 最后,如需封装测试应用并邀请测试人员,请使用项目的 Gradle 封装容器来构建目标 BUILD-VARIANTappDistributionUploadBUILD-VARIANT,其中 BUILD-VARIANT 是您在上一步配置的可选产品变种和 build 类型。如需详细了解产品变种,请参阅配置 build 变体

    例如,要使用 release build 变体分发您的应用,请运行以下命令:

    ./gradlew assembleRelease appDistributionUploadRelease
    

    或者,如果您已使用 Google 帐号进行身份验证并且未在 Gradle build 文件中提供凭据,请添加 FIREBASE_TOKEN 变量:

    export FIREBASE_TOKEN=1/a1b2c3d4e5f67890
    ./gradlew --stop // Only needed for environment variable changes
    ./gradlew assembleRelease appDistributionUploadRelease
    
  2. 您还可以通过传递 --<property-name>=<property-value> 形式的命令行参数来覆盖 build.gradle 文件中设置的值。例如:

    • 如需将调试 build 上传到 App Distribution,请执行以下操作:

      ./gradlew bundleDebug appDistributionUploadDebug
          --artifactType="APK"
      
    • 如需邀请其他测试人员或从 Firebase 项目中移除现有测试人员,请执行以下操作:

      ./gradlew appDistributionAddTesters
          --projectNumber=<project_number>
          --emails="anothertester@email.com, moretesters@email.com"
      ./gradlew appDistributionRemoveTesters
          --projectNumber=<project_number>
          --emails="anothertester@email.com, moretesters@email.com"
      

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

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

    appDistributionAddTestersappDistributionRemoveTesters 任务也接受以下参数:

    • projectNumber:您的 Firebase 项目编号。

    • serviceCredentialsFile:Google 服务凭据文件的路径。 此参数与上传操作使用的参数相同。

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

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

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

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

在邀请到期前,测试人员有 30 天的时间来接受测试应用的邀请。 当距离邀请到期还有 5 天的时候,Firebase 控制台会在相应版本的测试人员旁边显示到期通知。您可以使用测试人员对应行中的下拉菜单重发邀请来重新开始邀请测试人员。

后续步骤