Distribuir apps Android para testadores usando o Gradle


Para integrar o App Distribution ao processo de build do Android, use um plug-in do Gradle para App Distribution. O plug-in permite que você especifique testadores e notas de lançamento no arquivo do gradle do seu aplicativo. Assim, você pode configurar distribuições para diferentes tipos de builds e variantes do seu aplicativo.

Neste guia, descrevemos como distribuir APKs para testadores usando o plug-in do Gradle para App Distribution.

Antes de começar

Adicione o Firebase ao seu projeto para Android, caso ainda não tenha feito isso.

Caso você não use outros produtos do Firebase, basta criar um projeto e registrar seu app. Se quiser usar outros produtos, conclua todas as etapas na página vinculada acima.

Etapa 1. Configurar seu projeto do Android

  1. No arquivo Gradle no nível raiz do projeto (<project>/build.gradle.kts ou <project>/build.gradle), adicione o plug-in do Gradle para App Distribution como uma dependência:

    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.2" apply false
    
        // Add the dependency for the App Distribution Gradle plugin
        id("com.google.firebase.appdistribution") version "5.0.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.4.2' apply false
    
        // Add the dependency for the App Distribution Gradle plugin
        id 'com.google.firebase.appdistribution' version '5.0.0' apply false
    }
    
  2. No arquivo Gradle do módulo (nível do app) (geralmente <project>/<app-module>/build.gradle.kts ou <project>/<app-module>/build.gradle), adicione o plug-in do Gradle para 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 houver um proxy ou firewall corporativo ativado, adicione a seguinte propriedade do sistema Java que permite que o App Distribution faça upload das distribuições para o Firebase:

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

Etapa 2. Como autenticar com o Firebase

Antes de usar o plug-in do Gradle, primeiro faça a autenticação com seu projeto do Firebase de uma das seguintes maneiras. Por padrão, o plug-in do Gradle procura credenciais da CLI do Firebase se nenhum outro método de autenticação for usado.

Etapa 3. Configurar suas propriedades de distribuição

No arquivo Gradle do módulo (nível do app) (geralmente <project>/<app-module>/build.gradle.kts ou <project>/<app-module>/build.gradle), adicione pelo menos uma seção do firebaseAppDistribution para configurar o App Distribution.

Por exemplo, para distribuir o build release para testadores, siga estas instruções:

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

  // ...
}

É possível configurar o App Distribution para tipos de build e variações de produtos.

Por exemplo, para distribuir os builds debug e release nas variações de produto "demonstração" e "completa", siga estas instruções:

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

  // ...
}

Use os seguintes parâmetros para configurar a distribuição:

Parâmetros do build do App Distribution
appId

ID do app do Firebase do seu aplicativo. Obrigatório apenas se você não tiver instalado o plug-in Gradle dos Serviços do Google. Encontre o ID do app no arquivo google-services.json ou no console do Firebase na página Configurações gerais. O valor do arquivo build.gradle modifica o valor resultante do plug-in google-services.

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

O caminho para o arquivo JSON da chave privada da conta de serviço. Obrigatório apenas se você usar a autenticação da conta de serviço.

artifactType

Especifica o tipo de arquivo do app. Pode ser definido como "AAB" ou "APK".

artifactPath

Caminho absoluto para o arquivo AAB ou APK que você quer enviar.

releaseNotes ou releaseNotesFile

Notas da versão para este build.

É possível especificar as notas de lançamento diretamente ou o caminho para um arquivo de texto simples.

testers ou testersFile

Os endereços de e-mail dos testadores para os quais você quer distribuir builds.

É possível especificar os testadores como uma lista separada por vírgulas de endereços de e-mail:

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

Como opção, é possível especificar o caminho para um arquivo que contenha uma lista de endereços de e-mail separados por vírgulas:

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

Os grupos de testadores para os quais você quer distribuir builds (consulte Gerenciar testadores). Os grupos são especificados por aliases de grupo, que podem ser encontrados na guia Testadores no console do App Distribution do Firebase.

É possível especificar os grupos como uma lista separada por vírgulas de aliases de grupo:

groups="qa-team, android-testers"

Também é possível especificar o caminho para um arquivo que contenha uma lista separada por vírgulas de aliases de grupo:

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

Os tipos de distribuição a seguir fazem parte do recurso Beta Testador automatizado.

Os dispositivos de teste para os quais você quer distribuir builds (consulte Testes automatizados).

É possível especificar os dispositivos de teste como uma lista de especificações do dispositivo separada por ponto e vírgula:

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

Também é possível especificar o caminho para um arquivo que contenha uma lista de especificações do dispositivo separada por ponto e vírgula:

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

O nome de usuário para o login automático a ser usado durante os testes automatizados.

testPassword ou testPasswordFile

A senha para login automático que será usada durante os testes automatizados.

Se preferir, é possível especificar o caminho para um arquivo de texto simples que contenha uma senha:

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

Nome do recurso para o campo de nome de usuário para login automático que será usado durante os testes automatizados.

testPasswordResource

Nome do recurso do campo de senha para login automático que será usado durante os testes automatizados.

testNonBlocking

Execute testes automatizados de forma assíncrona. Acesse o console do Firebase para conferir os resultados do teste automático.

stacktrace

Imprime o rastreamento de pilha para exceções do usuário. Isso é útil ao depurar problemas.

Etapa 4. Distribuir seu app para os testadores

  1. Por último, para empacotar o app de teste e convidar testadores, crie os destinos BUILD-VARIANT e appDistributionUploadBUILD-VARIANT com o wrapper do Gradle do projeto, em que BUILD-VARIANT é a variação de produto opcional e o tipo de compilação que você configurou na etapa anterior. Para mais informações sobre as variações de produtos, consulte Configurar variantes de build.

    Por exemplo, para distribuir seu app usando a variante de build release, execute o seguinte comando:

    ./gradlew assembleRelease appDistributionUploadRelease
    

    Ou, se você autenticou com sua Conta do Google e não forneceu credenciais em seu arquivo de build do Gradle, inclua a variável FIREBASE_TOKEN:

    export FIREBASE_TOKEN=1/a1b2c3d4e5f67890
    ./gradlew --stop // Only needed for environment variable changes
    ./gradlew assembleRelease appDistributionUploadRelease
    
  2. Também é possível substituir os valores definidos no arquivo build.gradle transmitindo argumentos de linha de comando no formato --<property-name>=<property-value>. Por exemplo:

    • Para fazer upload de um build de depuração para o App Distribution:

      ./gradlew bundleDebug appDistributionUploadDebug
          --artifactType="APK"
      
    • Para convidar mais testadores ou remover os que já estão no projeto do 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"
      

      Depois que um testador é adicionado ao seu projeto do Firebase, ele pode ser adicionado a versões individuais. Os testadores removidos não terão mais acesso às versões do seu projeto, mas poderão manter o acesso às versões por um período.

    Também é possível especificar testadores usando --file="/path/to/testers.txt" em vez de --emails.

    As tarefas appDistributionAddTesters e appDistributionRemoveTesters também aceitam os seguintes argumentos:

    • projectNumber: o número do seu projeto do Firebase.

    • serviceCredentialsFile: o caminho para o arquivo de credenciais do serviço do Google. É o mesmo argumento usado na ação de upload.

O plug-in do Gradle gera os seguintes links após o upload da versão. Esses links ajudam a gerenciar binários e garantir que os testadores e outros desenvolvedores tenham a versão certa:

  • firebase_console_uri: um link para o console do Firebase que exibe uma única versão. Você pode compartilhar esse link com outros desenvolvedores na sua organização.
  • testing_uri: um link para a versão na experiência do testador (app nativo do Android) que permite que os testadores vejam as notas da versão e instalem o app no dispositivo. O testador precisa acessar a versão para usar o link.
  • binary_download_uri: um link assinado que faz o download e instala diretamente o binário do app (arquivo APK ou AAB). O link expira depois de uma hora.

Depois de distribuir o build, ele fica disponível no painel do App Distribution do console do Firebase por 150 dias (cinco meses). Quando faltarem 30 dias para o vencimento do build, o aviso de expiração vai aparecer no console e na lista de builds do testador no dispositivo de teste.

Os testadores que não foram convidados para testar o app recebem convites por e-mail para dar os primeiros passos, e os testadores atuais recebem notificações por e-mail informando que um novo build está pronto para ser testado. Leia o guia de configuração do testador para ver instruções sobre como instalar o app de teste. É possível monitorar o status de cada testador, por exemplo, se ele aceitou o convite e se fez o download do app no console do Firebase.

Os testadores têm 30 dias para aceitar um convite de teste do app antes que ele expire. Quando faltarem cinco dias para o vencimento do convite, um aviso de expiração vai aparecer no console do Firebase ao lado do testador em uma versão. Para renovar um convite, reenvie-o usando o menu suspenso na linha do testador.

Próximas etapas