使用 Gradle 將 Android 應用程式發布給測試人員


您可以使用 App Distribution Gradle 外掛程式,將 App Distribution 整合至 Android 建構程序。您可以在應用程式的 Gradle 檔案中指定測試人員和版本說明,並為應用程式的不同建構類型和變體設定發布作業。

本指南說明如何使用 App Distribution Gradle 外掛程式,將 Android App Bundle (AAB) 發布給測試人員。

App Distribution會與 Google Play 的內部應用程式分享服務整合,處理您上傳的 AAB,並提供針對測試人員裝置設定最佳化的 APK。發布 AAB 可讓您執行下列操作:

  • 執行針對測試人員裝置最佳化的 APK (由 Google Play 提供)。

  • 找出並修正特定裝置的問題。

  • 測試應用程式套件功能,例如 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:設定 Android 專案

  1. 根層級 (專案層級) 的 Gradle 檔案 (<project>/build.gradle.kts<project>/build.gradle) 中,將 App Distribution Gradle 外掛程式新增為依附元件:

    Kotlin

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

    Groovy

    plugins {
        // ...
        id 'com.android.application' version '7.3.0' apply false
    
        // Make sure that you have the Google services Gradle plugin dependency
        id 'com.google.gms.google-services' version '4.4.3' apply false
    
        // Add the dependency for the App Distribution Gradle plugin
        id 'com.google.firebase.appdistribution' version '5.1.1' 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. 如果您使用公司 Proxy 或防火牆,請新增下列 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.kts<project>/<app-module>/build.gradle) 中,新增至少一個 firebaseAppDistribution 區段,藉此設定 App Distribution

舉例來說,如要將 release 版本發布給測試人員,請按照這些操作說明執行:

Kotlin

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

android {

  // ...

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

  // ...
}

Groovy

android {

  // ...

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

  // ...
}

您可以為建構類型和變種版本設定 App Distribution

舉例來說,如要在「試用版」和「完整版」變種版本中發布 debugrelease 建構版本,請按照下列指示操作:

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 外掛程式時,才需要執行這個步驟。您可以在 google-services.json 檔案或 Firebase 控制台的「一般設定」頁面中找到應用程式 ID。build.gradle 檔案中的值會覆寫 google-services 外掛程式輸出的值。

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

服務帳戶私密金鑰 JSON 檔案的路徑。如果您使用服務帳戶驗證,則必須提供這項資訊。

artifactType

指定應用程式的檔案類型。可設為 "AAB""APK"

artifactPath

要上傳的 APK 或 AAB 檔案絕對路徑。

releaseNotesreleaseNotesFile

這個版本的版本資訊。

您可以直接指定版本說明,也可以指定純文字檔案的路徑。

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

下列發布類型屬於自動測試人員 Beta 版功能

您要將建構版本發布至的測試裝置 (請參閱「自動化測試」)。

您可以指定測試裝置,方法是以半形分號分隔裝置規格清單:

testDevices="model=shiba,version=34,locale=en,orientation=portrait;model=b0q,version=33,locale=en,orientation=portrait"

或者,您也可以指定檔案路徑,該檔案包含以半形分號分隔的裝置規格清單:

testDevicesFile="/path/to/testDevices.txt"
testUsername

自動登入時要使用的使用者名稱,用於自動化測試

testPasswordtestPasswordFile

自動登入的密碼,用於自動測試

或者,您也可以指定含有密碼的純文字檔路徑:

testPasswordFile="/path/to/testPassword.txt"
testUsernameResource

自動登入時使用的使用者名稱欄位資源名稱,適用於自動化測試

testPasswordResource

自動登入的密碼欄位資源名稱,用於自動化測試

testNonBlocking

以非同步方式執行自動化測試。前往 Firebase 控制台查看自動測試結果。

stacktrace

列印使用者例外狀況的堆疊追蹤記錄。這有助於偵錯問題。

步驟 4:將應用程式發送給測試人員

  1. 最後,如要封裝測試應用程式並邀請測試人員,請使用專案的 Gradle 包裝函式建構目標 BUILD-VARIANTappDistributionUploadBUILD-VARIANT,其中 BUILD-VARIANT 是您在上一個步驟中設定的選用產品變種版本和建構類型。如要進一步瞭解變種版本,請參閱「設定建構變數」。

    舉例來說,如要使用 release 建構變數發布應用程式,請執行下列指令:

    ./gradlew bundleRelease appDistributionUploadRelease
    

    或者,如果您使用 Google 帳戶進行驗證,且未在 Gradle 建構檔案中提供憑證,請加入 FIREBASE_TOKEN 變數:

    export FIREBASE_TOKEN=1/a1b2c3d4e5f67890
    ./gradlew --stop // Only needed for environment variable changes
    ./gradlew bundleRelease appDistributionUploadRelease
    
  2. 您也可以傳遞 --<property-name>=<property-value> 形式的指令列引數,覆寫 build.gradle 檔案中設定的值。例如:

    • 如要將偵錯版本上傳至 App Distribution,請按照下列步驟操作:

      ./gradlew bundleDebug appDistributionUploadDebug
          --artifactType="AAB"
    • 如要邀請其他測試人員或從 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 小時後失效。

發布版本後,您可以在 Firebase 控制台的 App Distribution 資訊主頁中查看版本,效期為 150 天 (五個月)。如果建構版本即將在 30 天後過期,管理中心和測試裝置的建構版本清單都會顯示過期通知。

尚未受邀測試應用程式的測試人員會收到電子郵件邀請,現有測試人員則會收到電子郵件通知,告知他們新版本已可供測試 (如需安裝測試版應用程式的操作說明,請參閱測試人員設定指南)。您可以在 Firebase 控制台中,監控每位測試人員的狀態,包括是否接受邀請及是否下載應用程式。

測試人員有 30 天的時間接受測試應用程式的邀請,邀請過期後將失效。 如果邀請即將在 5 天後到期,Firebase控制台會在版本中的測試人員旁顯示到期通知。如要續發邀請,請使用測試人員列的下拉式選單重新傳送邀請。

後續步驟