Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

使用 Gradle 將 Android 應用分發給測試人員

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

您可以使用 App Distribution Gradle 插件將 App Distribution 集成到您的 Android 構建過程中。該插件允許您在應用程序的build.gradle文件中指定測試人員和發行說明,讓您為應用程序的不同構建類型和變體配置分發。

本指南介紹瞭如何使用 App Distribution Gradle 插件將 APK 分發給測試人員。

在你開始之前

如果您還沒有,請將 Firebase 添加到您的 Android 項目中。

如果您不使用任何其他 Firebase 產品,則只需創建一個項目並註冊您的應用程序。但是,如果您決定將來使用其他產品,請務必完成上面鏈接頁面上的所有步驟。

步驟 1. 設置您的 Android 項目

  1. 在您的根級別(項目級別) Gradle 文件( <project>/build.gradle<project>/build.gradle.kts )中,將 App Distribution Gradle 插件添加為 buildscript 依賴項:

    時髦的

    buildscript {
      repositories {
        // Make sure that you have the following two repositories
        google()  // Google's Maven repository
        mavenCentral()  // Maven Central repository
      }
    
      dependencies {
          ...
          classpath 'com.android.tools.build:gradle:7.2.0'
    
          // Make sure that you have the Google services Gradle plugin dependency
          classpath 'com.google.gms:google-services:4.3.15'
    
          // Add the dependency for the App Distribution Gradle plugin
          classpath 'com.google.firebase:firebase-appdistribution-gradle:3.2.0'
      }
    }
    

    科特林

    buildscript {
      repositories {
        // Make sure that you have the following two repositories
        google()  // Google's Maven repository
        mavenCentral()  // Maven Central repository
      }
    
      dependencies {
          ...
          classpath("com.android.tools.build:gradle:7.2.0")
    
          // Make sure that you have the Google services Gradle plugin dependency
          classpath("com.google.gms:google-services:4.3.15")
    
          // Add the dependency for the App Distribution Gradle plugin
          classpath("com.google.firebase:firebase-appdistribution-gradle:3.2.0")
      }
    }
    
  2. 在您的模塊(應用程序級) Gradle 文件(通常是<project>/<app-module>/build.gradle<project>/<app-module>/build.gradle.kts中,添加 App Distribution Gradle 插件:

    時髦的

    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'
    }
    

    科特林

    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 進行身份驗證

在使用 Gradle 插件之前,您必須先通過以下方式之一對您的 Firebase 項目進行身份驗證。默認情況下,如果沒有使用其他身份驗證方法,Gradle 插件會從 Firebase CLI 中查找憑據。

第 3 步。配置您的分發屬性

在您的模塊(應用程序級) Gradle 文件(通常是<project>/<app-module>/build.gradle<project>/<app-module>/build.gradle.kts中,通過至少添加配置 App Distribution一個firebaseAppDistribution部分。

例如,要將release版本分發給測試人員,請遵循以下說明:

時髦的

android {

  // ...

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

  // ...
}

科特林

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

android {

  // ...

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

  // ...
}

您可以為構建類型和產品風格配置 App Distribution。

例如,要分發“演示”和“完整”產品風格的debugrelease版本,請遵循以下說明:

時髦的

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"
          }
      }
  }

  // ...
}

科特林

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"
          }
      }
  }

  // ...
}

使用以下參數配置分發:

應用分發構建參數
appId

您應用的 Firebase 應用 ID。僅當您沒有安裝 Google Services Gradle 插件時才需要。您可以在google-services.json文件或 Firebase 控制台的常規設置頁面中找到應用程序 ID。 build.gradle文件中的值會覆蓋google-services插件輸出的值。

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

您的服務帳戶私鑰 JSON 文件的路徑。僅當您使用服務帳戶身份驗證時才需要。

artifactType

指定應用程序的文件類型。可以設置為"AAB""APK"

artifactPath

您要上傳的 APK 或 AAB 文件的絕對路徑。

releaseNotesreleaseNotesFile

此版本的發行說明。

您可以直接指定發行說明或純文本文件的路徑。

testers或測試人員testersFile

您要將構建分發到的測試人員的電子郵件地址。

您可以將測試人員指定為以逗號分隔的電子郵件地址列表:

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-VARIANTappDistributionUpload BUILD-VARIANT ,其中BUILD-VARIANT是您在上一步中配置的可選產品風格和構建類型。有關產品風格的更多信息,請參閱配置構建變體

    例如,要使用release構建變體分發您的應用程序,請運行以下命令:

    ./gradlew assembleRelease appDistributionUploadRelease
    

    或者,如果您使用Google 帳戶進行身份驗證但未在 Gradle 構建文件中提供憑據,請包含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文件中設置的值。例如:

    • 要將調試版本上傳到 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 文件)的簽名鏈接。該鏈接將在一小時後過期。

分發構建後,它會在 Firebase 控制台的 App Distribution 儀表板中可用 150 天(五個月)。當構建距離到期還有 30 天時,控制台和測試人員在其測試設備上的構建列表中都會顯示到期通知。

未受邀測試應用程序的測試人員會收到開始測試的電子郵件邀請,而現有測試人員會收到新版本已準備好測試的電子郵件通知(有關如何安裝測試應用程序的說明,請閱讀測試人員設置指南)。您可以在 Firebase 控制台中監控每個測試人員的狀態——他們是否接受了邀請以及是否下載了應用程序。

測試人員有 30 天的時間接受邀請,在邀請到期前測試該應用。當邀請還有 5 天到期時,Firebase 控制台中發布的測試人員旁邊會顯示到期通知。可以使用測試人員行上的下拉菜單重新發送邀請來續訂邀請。

下一步