Screengrab é um utilitário do ecossistema Fastlane para automatizar a criação de capturas de tela de aplicativos móveis para Android e iOS. Em vez de percorrer manualmente as telas em dezenas de dispositivos, o desenvolvedor executa um comando e o Screengrab captura independentemente todas as telas necessárias. De acordo com Fastlane Docs, 2026, a ferramenta suporta simultaneamente até 30 idiomas e qualquer resolução de tela definida na configuração.
Principais pontos
Screengrab é um componente do ecossistema Fastlane projetado para criação automatizada de capturas de tela de aplicativos móveis. A ferramenta surgiu em 2015 como resposta ao problema: para publicar no Google Play e App Store são necessárias de 4 a 10 capturas por idioma. Com suporte a 30 idiomas, isso significa 120–300 capturas manuais.
Um desenvolvedor inicia manualmente o aplicativo em um simulador ou dispositivo, navega até a tela desejada, faz uma captura de tela, transfere para o computador, recorta e salva na pasta correta. O procedimento se repete para cada idioma e cada orientação. De acordo com o Google Play Console, o aplicativo médio é atualizado a cada duas semanas, transformando as capturas de tela em uma rotina regular.
O Screengrab resolve o problema radicalmente: o desenvolvedor descreve cenários de teste usando um framework de UI (Espresso para Android, XCTest para iOS), e o Screengrab os executa em todos os dispositivos e idiomas necessários automaticamente. O Fastlane coordena o processo: compila o aplicativo, executa os testes, coleta as capturas e as empacota na estrutura de pastas necessária.
O resultado — cem capturas de tela em 10–15 minutos em vez de várias horas de trabalho manual. O Google recomenda atualizar as capturas a cada mudança significativa na interface, e sem automação esse conselho é frequentemente ignorado.
A arquitetura do Screengrab é construída em torno de dois componentes principais: um cliente no dispositivo (screengrab-lib) e um executor que gerencia a execução dos testes e a coleta de resultados. No Android, utiliza o framework de teste instrumentado; no iOS — XCTest.
O Fastlane chama a ação screengrab, que lê o arquivo de configuração Screengrabfile. O executor compila o APK de teste com a biblioteca screengrab-lib conectada, instala-o nos dispositivos ou emuladores conectados e executa os testes de UI marcados com anotações para capturas de tela.
# Fastfile — descrição de lane para capturas de tela
lane :screenshots do
capture_android_screenshots(
output_directory: "fastlane/metadata/android/screenshots",
locales: ["ru-RU", "en-US", "de-DE"],
devices: ["pixel_6", "pixel_tablet"],
use_tests_external_storage: true
)
end
O Screengrab cria uma hierarquia de pastas: idioma → dispositivo → capturas. A estrutura corresponde completamente aos requisitos do Google Play Console e App Store Connect. A App Store exige tamanhos estritamente definidos para cada tipo de dispositivo, e o Screengrab gera capturas exatamente de acordo com as especificações.
A ferramenta pode executar testes em paralelo em todos os dispositivos e emuladores conectados. Os emuladores Android iniciam automaticamente se não estiverem ativos. Para iOS, o Screengrab usa simuladores do Xcode.
A instalação do Screengrab consiste em duas partes: adicionar a biblioteca ao projeto e configurar o arquivo de configuração. No Android, são necessários o framework de UI Espresso e a biblioteca screengrab-lib do repositório Fastlane.
No build.gradle do módulo do aplicativo, a dependência screengrab-lib é adicionada. A biblioteca fornece a classe ScreenCapturer, que faz uma captura de tela no momento da chamada.
// build.gradle (module: app)
androidTestImplementation(
'tools.fastlane:screengrab-lib:2.1.0'
)
Um teste de UI é marcado com a anotação Screengrab.screenshot() nos pontos necessários. Cada chamada captura a tela atual e a salva com o nome especificado.
import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.locale.LocaleTestRule
class ScreenshotTest {
@get:Rule
val localeTestRule = LocaleTestRule()
@Test
fun testTakeScreenshots() {
Screengrab.screenshot("main_screen")
// Ações: tocar no botão de login
Screengrab.screenshot("login_screen")
}
}
O arquivo Screengrabfile armazena os parâmetros de execução: lista de dispositivos, idiomas, tempos limite e caminho de salvamento. O arquivo geralmente está localizado na pasta fastlane ao lado do Fastfile.
A localização é o recurso chave do Screengrab e a principal razão pela qual é mais frequentemente escolhido. A ferramenta alterna automaticamente o idioma do aplicativo antes de cada execução de teste e faz capturas em todos os idiomas especificados.
Os idiomas são definidos no Screengrabfile usando o parâmetro locales. Para cada idioma, o Screengrab reinstala o aplicativo com os recursos correspondentes e executa o ciclo completo de testes. O LocaleTestRule no Android alterna automaticamente a localidade do dispositivo.
# Screengrabfile
locales [
"ru-RU",
"en-US",
"de-DE",
"fr-FR",
"es-ES",
"ja-JP",
"ko-KR"
]
O Screengrab cria diretórios seguindo o esquema: screenshots/{locale}/{device_name}/{screenshot_name}.png. Essa estrutura corresponde diretamente aos requisitos do Google Play, permitindo o upload das capturas via Fastlane deliver com um único comando.
Para iOS, o App Store Connect espera capturas em uma estrutura plana por idioma. O Fastlane converte automaticamente a hierarquia do Screengrab no formato necessário ao publicar.
A integração com CI/CD é uma das principais vantagens do Screengrab. A ferramenta é executada a partir da linha de comando e não requer interface gráfica, tornando-a ideal para compilações em servidor.
Em um ambiente CI, é necessário iniciar um emulador Android ou simulador iOS e depois chamar a lane com as capturas. O GitHub Actions suporta cache de AVD, o que acelera execuções repetidas.
Na configuração de CI, é importante considerar as limitações de memória e tempo. Os emuladores Android exigem pelo menos 2 GB de RAM por dispositivo, e uma execução completa em 7 idiomas e 2 dispositivos leva de 20 a 40 minutos.
# Fastfile — lane para CI com tempos limite
lane :ci_screenshots do
capture_android_screenshots(
locales: ["en-US", "ru-RU"],
devices: ["pixel_6"],
clear_previous_screenshots: true,
tests_timeout: "600",
output_directory: "screenshots/ci"
)
end
Para Jenkins, é usado o passo sh com a chamada a bundle exec fastlane. Recomenda-se executar as capturas à noite ou por acionador após mesclagem na branch principal para não retardar o ciclo de desenvolvimento.
Screengrab não é a única ferramenta para automatizar capturas de tela. Existem alternativas com diferentes abordagens: ferramentas integradas do sistema operacional, plataformas comerciais e bibliotecas de capturas em código.
| Ferramenta | Plataforma | Localização | CI/CD |
|---|---|---|---|
| Screengrab | Android, iOS | Automática | Nativa |
| ADB Shell | Android | Manual | Via scripts |
| XCTest | iOS | Manual | Via xcodebuild |
| Firebase Test Lab | Android | Requer configuração | Sim |
| Appium | Multiplataforma | Manual | Via WebDriver |
ADB Shell oferece controle total, mas requer escrever scripts para cada cenário. XCTest está integrado no Xcode, mas não gerencia a localização automaticamente. O Firebase Test Lab executa testes em dispositivos reais na nuvem, oferecendo máxima cobertura, mas cobra por minuto.
O Screengrab vence pela combinação: o Fastlane gerencia todo o ciclo de vida da compilação — desde a compilação até a publicação. O Google Play aceita diretamente a estrutura de pastas do Screengrab via Fastlane deliver.
Ao trabalhar com Screengrab, os desenvolvedores frequentemente encontram vários problemas recorrentes. Conhecer os erros comuns reduz o tempo de depuração na primeira execução.
O problema ocorre quando o Screengrab faz a captura antes da renderização da tela ser concluída. A solução é adicionar um atraso Thread.sleep() antes de chamar screenshot() ou usar IdlingResource do Espresso para aguardar operações assíncronas.
A versão do screengrab-lib deve corresponder à versão do Fastlane. O Fastlane é atualizado mensalmente, e uma biblioteca antiga pode não suportar novos parâmetros de configuração. A solução é sincronizar as versões via Gemfile e gradle.properties.
Executar em 30 idiomas em 5 dispositivos pode levar mais de uma hora. A solução é dividir as execuções: uma para a loja em todos os idiomas, outra para necessidades internas em dois idiomas. O GitHub Actions permite usar estratégias de matriz para execuções paralelas.
O emulador Android requer virtualização de hardware, que nem sempre está disponível em servidores CI. O KVM deve estar ativado, caso contrário o emulador não inicia. A solução é usar imagens x86 sem aceleração GPU ou Firebase Test Lab.
Perguntas frequentes
ADB captura o que é exibido na tela no momento atual. O Screengrab se integra com testes de UI, alterna automaticamente idiomas e dispositivos e faz uma série de capturas de acordo com um cenário sem intervenção humana.
Não, o Screengrab é um componente do ecossistema Fastlane e usa sua infraestrutura para compilar, instalar e coordenar. A biblioteca screengrab-lib não funciona separadamente — o Fastlane é necessário como orquestrador.
Em um único dispositivo, uma execução em 10 idiomas leva de 15 a 25 minutos. Cada idioma requer reinstalar o aplicativo e um ciclo completo de testes de UI. A execução paralela em vários dispositivos reduz o tempo proporcionalmente.
Sim, o Screengrab suporta iOS através do XCTest e simuladores do Xcode. A configuração é semelhante ao Android: idiomas e dispositivos são adicionados, e os testes de UI em Swift são escritos usando XCTest com capturas via XCUIScreenshot.
O Screengrab não suporta modo incremental — cada execução gera um conjunto completo de capturas. Recomenda-se configurar uma lane separada para CI com uma lista limitada de idiomas para evitar sobrescrever capturas existentes da execução principal.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também