Distribuire app per Android ai tester tramite Gradle


Puoi integrare App Distribution nel processo di build di Android utilizzando il plug-in Gradle App Distribution. Il plug-in ti consente di specificare i tester e le note di rilascio nel file Gradle della tua app, in modo da poter configurare le distribuzioni per diversi tipi di build e varianti della tua app.

Questa guida descrive come distribuire Android App Bundle (AAB) ai tester utilizzando il plug-in Gradle App Distribution.

App Distribution si integra con il servizio di condivisione interna delle app di Google Play per elaborare gli AAB che carichi e pubblicare APK ottimizzati per le configurazioni dei dispositivi dei tuoi tester. La distribuzione degli AAB ti consente di:

  • Esegui APK ottimizzati (pubblicati da Google Play) per i dispositivi dei tuoi tester.

  • Scopri ed esegui il debug di problemi specifici dei dispositivi.

  • Testa le funzionalità degli app bundle, come Play Feature Delivery e Play Asset Delivery.

  • Riduci le dimensioni dei download per i tester.

Autorizzazioni obbligatorie

Per caricare gli AAB su App Distribution, devi collegare la tua app Firebase a un'app in Google Play. Devi disporre del livello di accesso richiesto per eseguire queste azioni.

Se non disponi dell'accesso Firebase necessario, puoi chiedere a un Project Owner di un progetto Firebase di assegnarti il ruolo applicabile utilizzando le impostazioni IAM della console Firebase. Se hai domande sull'accesso al tuo progetto Firebase, ad esempio su come trovare o assegnare un proprietario, consulta le domande frequenti su autorizzazioni e accesso ai progetti Firebase.

La seguente tabella si applica al collegamento di un'app Firebase a un'app in Google Play, nonché al caricamento di AAB.

Azione nella console Firebase Autorizzazione IAM richiesta Ruoli IAM che includono le autorizzazioni richieste per impostazione predefinita Ruoli aggiuntivi richiesti
Collega un'app Firebase a un'app in Google Play firebase.playLinks.update Uno dei seguenti ruoli: Accesso a un account sviluppatore Google Play come amministratore
Carica gli AAB su App Distribution firebaseappdistro.releases.update Uno dei seguenti ruoli: ––

Prima di iniziare

  1. Se non l'hai già fatto, aggiungi Firebase al tuo progetto Android. Al termine di questo workflow, avrai un'app Firebase per Android nel tuo progetto Firebase.

    Se non utilizzi altri prodotti Firebase, devi solo creare un progetto e registrare la tua app. Se decidi di utilizzare altri prodotti, assicurati di completare tutti i passaggi descritti in Aggiungi Firebase al tuo progetto Android.

  2. Apri la pagina App Distribution della console Firebase. Seleziona il tuo progetto Firebase quando richiesto, seleziona la tua app utilizzando il selettore di app e fai clic su Inizia.

  3. Per creare un collegamento da Firebase a Google Play e caricare AAB, assicurati che la tua app soddisfi i seguenti requisiti:

    • L'app in Google Play e l'app Firebase per Android vengono registrate entrambe con lo stesso nome di pacchetto.

    • L'app in Google Play viene configurata nella dashboard dell'app e distribuita a uno dei canali Google Play (test interno, chiuso, aperto o produzione).

    • La revisione dell'app in Google Play è stata completata e l'app pubblicata. L'app viene pubblicata se la colonna Stato app mostra uno dei seguenti stati: test interno (non test interno in bozza), test chiuso, test aperto o produzione.

  4. Collega l'app per Android Firebase al tuo account sviluppatore Google Play:

    1. Nella console Firebase, vai alle Impostazioni progetto, quindi seleziona la scheda Integrazioni.

    2. Nella scheda Google Play, fai clic su Collega.
      Se hai già dei collegamenti a Google Play, fai clic su Gestisci.

    3. Segui le istruzioni sullo schermo per attivare l'integrazione di App Distribution e selezionare le app Firebase per Android da collegare a Google Play.

    Scopri di più sul collegamento a Google Play.

Passaggio 1: Configura il progetto Android

  1. Nel file Gradle a livello di directory principale (a livello di progetto) (<project>/build.gradle.kts o <project>/build.gradle), aggiungi il plug-in Gradle App Distribution come dipendenza:

    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.5.0" apply false
    
        // Add the dependency for the App Distribution Gradle plugin
        id("com.google.firebase.appdistribution") version "5.3.0" 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.5.0' apply false
    
        // Add the dependency for the App Distribution Gradle plugin
        id 'com.google.firebase.appdistribution' version '5.3.0' apply false
    }
  2. Nel file Gradle del modulo (a livello di app) (di solito <project>/<app-module>/build.gradle.kts o <project>/<app-module>/build.gradle), aggiungi il plug-in Gradle App Distribution:

    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. Se utilizzi un proxy o un firewall aziendale, aggiungi la seguente proprietà di sistema Java che consente a App Distribution di caricare le tue distribuzioni su Firebase:

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

Passaggio 2: Autenticati con Firebase

Prima di poter utilizzare il plug-in Gradle, devi autenticarti con il tuo progetto Firebase in uno dei seguenti modi. Per impostazione predefinita, il plug-in Gradle cerca le credenziali dall'interfaccia a riga di comando Firebase se non viene utilizzato un altro metodo di autenticazione.

Passaggio 3: Configura le proprietà di distribuzione

Nel file Gradle del modulo (a livello di app) (solitamente <project>/<app-module>/build.gradle.kts o <project>/<app-module>/build.gradle), configura App Distribution aggiungendo almeno una sezione firebaseAppDistribution.

Ad esempio, per distribuire la build release ai tester, segui queste istruzioni:

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

  // ...
}

Puoi configurare App Distribution per tipi di build e versioni prodotto.

Ad esempio, per distribuire build debug e release nelle versioni prodotto "demo" e "full", segui queste istruzioni:

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

  // ...
}

Utilizza i seguenti parametri per configurare la distribuzione:

App Distribution Parametri di build
appId

L'ID app Firebase della tua app. Obbligatorio solo se non hai installato il plug-in Gradle dei servizi Google. Puoi trovare l'ID app nel file google-services.json o nella console Firebase nella pagina Impostazioni generali. Il valore nel file build.gradle esegue l'override del valore restituito dal plug-in google-services.

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

Il percorso del file JSON della chiave privata del service account. Obbligatorio solo se utilizzi l'autenticazione del service account.

artifactType

Specifica il tipo di file dell'app. Può essere impostato su "AAB" o "APK".

artifactPath

Il percorso assoluto del file APK o AAB che vuoi caricare.

releaseNotes o releaseNotesFile

Note di rilascio per questa build.

Puoi specificare le note di rilascio direttamente o il percorso di un file di testo normale.

testers o testersFile

Gli indirizzi email dei tester a cui vuoi distribuire le build.

Puoi specificare i tester come elenco separato da virgole di indirizzi email:

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

In alternativa, puoi specificare il percorso di un file contenente un elenco di indirizzi email separati da virgole:

testersFile="/path/to/testers.txt"
groups o groupsFile

I gruppi di tester a cui vuoi distribuire le build (consulta Gestisci i tester). I gruppi vengono specificati utilizzando gli alias dei gruppi, che puoi trovare nella scheda Tester della console Firebase App Distribution.

Puoi specificare i gruppi come elenco di alias di gruppo separati da virgole:

groups="qa-team, android-testers"

In alternativa, puoi specificare il percorso di un file contenente un elenco separato da virgole di alias di gruppo:

groupsFile="/path/to/tester-groups.txt"
testDevices o testDevicesFile

I dispositivi di test su cui vuoi eseguire i test dell'agente App Testing.

Puoi specificare i dispositivi di test come un elenco di specifiche dei dispositivi separati da punto e virgola:

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

In alternativa, puoi specificare il percorso di un file contenente un elenco di specifiche del dispositivo separate da punti e virgola:

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

Il nome utente per l'accesso automatico da utilizzare durante i test dell'agente App Testing.

testPassword o testPasswordFile

La password per l'accesso automatico da utilizzare durante i test dell'agente App Testing.

In alternativa, puoi specificare il percorso di un file di testo normale contenente una password:

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

Nome della risorsa per il campo del nome utente per l'accesso automatico da utilizzare durante i test dell'agente App Testing.

testPasswordResource

Nome della risorsa per il campo della password per l'accesso automatico da utilizzare durante i test dell'agente App Testing.

testNonBlocking

Se impostato durante l'esecuzione dei test dell'agente App Testing, il comando avvierà i test e poi restituirà immediatamente il risultato anziché attendere il completamento. Per visualizzare i risultati del test, visita la console Firebase. Se questo flag non è impostato, il comando verrà bloccato fino al completamento dei test e uscirà con un codice di errore se uno dei test non va a buon fine.

resultsBucket

Un bucket Google Cloud Storage (GCS) personalizzato in cui vengono archiviati i risultati dei test. Se il campo viene lasciato vuoto, verrà utilizzato il bucket predefinito. Il bucket deve essere di proprietà di un progetto con fatturazione abilitata e la specifica di un bucket comporta addebiti di fatturazione per lo spazio di archiviazione utilizzato.

stacktrace

Stampa l'analisi dello stack per le eccezioni degli utenti. Questo è utile per il debug dei problemi.

Passaggio 4: Distribuisci l'app ai tester

  1. Infine, per pacchettizzare l'app di test e invitare i tester, crea i target BUILD-VARIANT e appDistributionUploadBUILD-VARIANT con il wrapper Gradle del progetto, dove BUILD-VARIANT è la versione prodotto e il tipo di build facoltativi che hai configurato nel passaggio precedente. Per saperne di più sulle versioni prodotto, consulta Configura le varianti di build.

    Ad esempio, per distribuire la tua app utilizzando la variante di compilazione release, esegui il seguente comando:

    ./gradlew bundleRelease appDistributionUploadRelease
    

    In alternativa, se hai eseguito l'autenticazione con il tuo Account Google e non hai fornito le credenziali nel file di build Gradle, includi la variabile FIREBASE_TOKEN:

    export FIREBASE_TOKEN=1/a1b2c3d4e5f67890
    ./gradlew --stop // Only needed for environment variable changes
    ./gradlew bundleRelease appDistributionUploadRelease
    
  2. Puoi anche eseguire l'override dei valori impostati nel file build.gradle passando argomenti della riga di comando nel formato --<property-name>=<property-value>. Ad esempio:

    • Per caricare una build di debug su App Distribution:

      ./gradlew bundleDebug appDistributionUploadDebug
          --artifactType="AAB"
    • Per invitare altri tester o rimuovere quelli esistenti dal tuo progetto 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"

      Una volta aggiunto un tester al tuo progetto Firebase, puoi aggiungerlo alle singole release. I tester rimossi non avranno più accesso alle release del tuo progetto, ma potrebbero comunque mantenere l'accesso alle tue release per un periodo di tempo.

    Puoi anche specificare i tester utilizzando --file="/path/to/testers.txt" anziché --emails.

    Le attività appDistributionAddTesters e appDistributionRemoveTesters accettano anche i seguenti argomenti:

    • projectNumber: il numero del tuo progetto Firebase.

    • serviceCredentialsFile: il percorso del file delle credenziali del servizio Google. Questo è lo stesso argomento utilizzato dall'azione di caricamento.

Il plug-in Gradle genera i seguenti link dopo il caricamento della release. Questi link ti aiutano a gestire i file binari e ad assicurarti che i tester e gli altri sviluppatori abbiano la release corretta:

  • firebase_console_uri: un link alla console Firebase che mostra una singola release. Puoi condividere questo link con altri sviluppatori della tua organizzazione.
  • testing_uri: un link alla release nell'esperienza del tester (app per Android integrata) che consente ai tester di visualizzare le note di rilascio e installare l'app sul proprio dispositivo. Il tester deve avere accesso alla release per poter utilizzare il link.
  • binary_download_uri: un link firmato che scarica e installa direttamente il file binario dell'app (file APK o AAB). Il link scade dopo un'ora.

Una volta distribuita, la build diventa disponibile nella dashboard App Distribution della console Firebase per 150 giorni (cinque mesi). Quando mancano 30 giorni alla scadenza della build, viene visualizzato un avviso di scadenza sia nella console sia nell'elenco delle build del tester sul suo dispositivo di test.

I tester che non sono stati invitati a testare l'app ricevono inviti via email per iniziare, mentre i tester esistenti ricevono notifiche via email che li informano che una nuova build è pronta per il test (leggi la guida alla configurazione dei tester per istruzioni su come installare l'app di test). Puoi monitorare lo stato di ogni tester, ovvero se ha accettato l'invito e se ha scaricato l'app, nella console Firebase.

I tester hanno 30 giorni di tempo per accettare un invito a testare l'app prima che scada. Quando mancano 5 giorni alla scadenza di un invito, nella console Firebase viene visualizzato un avviso di scadenza accanto al tester di una release. Un invito può essere rinnovato inviandolo di nuovo tramite il menu a discesa nella riga del tester.

Passaggi successivi