Screengrab — это утилита из экосистемы Fastlane для автоматизации создания скриншотов мобильных приложений под Android и iOS. Вместо ручного пролистывания экранов на десятках устройств разработчик запускает одну команду, и Screengrab самостоятельно делает снимки всех нужных экранов. По данным Fastlane Docs, 2026, инструмент поддерживает одновременно до 30 языков и любые разрешения экранов, заданные в конфигурации.
Главное
Screengrab — это компонент экосистемы Fastlane, предназначенный для автоматизированного создания скриншотов мобильных приложений. Инструмент появился в 2015 году как ответ на проблему: для публикации в Google Play и App Store требуется от 4 до 10 скриншотов на каждый язык. При поддержке 30 языков это 120–300 снимков вручную.
Разработчик вручную запускает приложение на симуляторе или устройстве, пролистывает до нужного экрана, делает снимок экрана, переносит его на компьютер, обрезает и сохраняет в нужную папку. Процедура повторяется для каждого языка и каждой ориентации. По данным Google Play Console, среднее приложение обновляется раз в две недели, что превращает скриншоты в регулярную рутину.
Screengrab решает проблему кардинально: разработчик описывает сценарии тестов на UI-фреймворке (Espresso для Android, XCTest для iOS), а Screengrab запускает их на всех нужных устройствах и языках автоматически. Fastlane координирует процесс: собирает билд, запускает тесты, собирает скриншоты и упаковывает их в нужную структуру папок.
Результат — сотня скриншотов за 10–15 минут вместо нескольких часов ручной работы. Google рекомендует обновлять скриншоты при каждом значительном изменении интерфейса, и без автоматизации этот совет часто игнорируется.
Архитектура Screengrab построена вокруг двух ключевых компонентов: клиента на устройстве (screengrab-lib) и раннера, который управляет запуском тестов и сбором результатов. На Android используется инструментальный тестовый фреймворк, на iOS — XCTest.
Fastlane вызывает action screengrab, который читает конфигурационный файл Screengrabfile. Раннер собирает тестовый APK с подключённой библиотекой screengrab-lib, устанавливает его на подключённые устройства или эмуляторы и запускает UI-тесты, помеченные аннотациями для скриншотов.
# Fastfile — описание lane для скриншотов
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
Screengrab создаёт иерархию папок: язык → устройство → скриншоты. Структура полностью совпадает с требованиями Google Play Console и App Store Connect. App Store требует строго определённые размеры для каждого типа устройства, и Screengrab генерирует снимки точно под спецификации.
Инструмент умеет запускать тесты параллельно на всех подключённых устройствах и эмуляторах. Эмуляторы Android запускаются автоматически, если они не активны. Для iOS Screengrab использует симуляторы Xcode.
Установка Screengrab состоит из двух частей: добавление библиотеки в проект и настройка конфигурационного файла. На Android необходим UI-фреймворк Espresso и библиотека screengrab-lib из репозитория Fastlane.
В build.gradle модуля приложения добавляется зависимость screengrab-lib. Библиотека предоставляет класс ScreenCapturer, который делает снимок экрана в момент вызова.
// build.gradle (module: app)
androidTestImplementation(
'tools.fastlane:screengrab-lib:2.1.0'
)
UI-тест помечается аннотацией Screengrab.screenshot() в нужных точках. Каждый вызов делает снимок текущего экрана и сохраняет его с указанным именем.
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")
// Действия: нажать на кнопку входа
Screengrab.screenshot("login_screen")
}
}
Файл Screengrabfile хранит параметры запуска: список устройств, языки, тайм-ауты и путь для сохранения. Файл обычно располагается в папке fastlane рядом с Fastfile.
Локализация — ключевая возможность Screengrab, ради которой его чаще всего выбирают. Инструмент автоматически переключает язык приложения перед каждым прогоном тестов и делает снимки на всех указанных языках.
Языки задаются в Screengrabfile параметром locales. Для каждого языка Screengrab переустанавливает приложение с соответствующими ресурсами и запускает полный цикл тестов. LocaleTestRule на Android автоматически переключает локаль устройства.
# Screengrabfile
locales [
"ru-RU",
"en-US",
"de-DE",
"fr-FR",
"es-ES",
"ja-JP",
"ko-KR"
]
Screengrab создаёт директории по схеме: screenshots/{locale}/{device_name}/{screenshot_name}.png. Эта структура напрямую совпадает с требованиями Google Play, что позволяет загружать скриншоты через Fastlane deliver одной командой.
Для iOS App Store Connect ожидает скриншоты в плоской структуре по языкам. Fastlane автоматически конвертирует иерархию Screengrab в нужный формат при публикации.
CI/CD интеграция — одно из главных преимуществ Screengrab. Инструмент запускается из командной строки и не требует графического интерфейса, что делает его идеальным для серверных сборок.
В CI-окружении необходимо запустить эмулятор Android или симулятор iOS, после чего вызвать lane с скриншотами. GitHub Actions поддерживает кэширование AVD, что ускоряет повторные запуски.
В CI-конфигурации важно учитывать ограничения по памяти и времени. Эмуляторам Android требуется минимум 2 ГБ ОЗУ на устройство, а полный прогон на 7 языках и 2 устройствах занимает 20–40 минут.
# Fastfile — lane для CI с тайм-аутами
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
Для Jenkins используется шаг sh с вызовом bundle exec fastlane. Рекомендуется запускать скриншоты ночью или по триггеру после мержа в основную ветку, чтобы не замедлять цикл разработки.
Screengrab — не единственный инструмент для автоматизации скриншотов. Существуют альтернативы с разными подходами: встроенные средства ОС, коммерческие платформы и библиотеки для скриншотов в коде.
| Инструмент | Платформа | Локализация | CI/CD |
|---|---|---|---|
| Screengrab | Android, iOS | Авто | Нативно |
| ADB Shell | Android | Ручная | Через скрипты |
| XCTest | iOS | Ручная | Через xcodebuild |
| Firebase Test Lab | Android | Требует настройки | Да |
| Appium | Кроссплатформа | Ручная | Через WebDriver |
ADB Shell даёт полный контроль, но требует написания скриптов для каждого сценария. XCTest встроен в Xcode, но не управляет локализацией автоматически. Firebase Test Lab запускает тесты на реальных устройствах в облаке, что даёт максимальное покрытие, но требует оплаты за каждую минуту.
Screengrab выигрывает за счёт связки: Fastlane управляет всем жизненным циклом сборки — от компиляции до публикации. Google Play напрямую принимает структуру папок Screengrab через Fastlane deliver.
При работе с Screengrab разработчики чаще всего сталкиваются с несколькими повторяющимися проблемами. Знание типовых ошибок сокращает время отладки при первом запуске.
Проблема возникает, когда Screengrab делает снимок до завершения рендеринга экрана. Решение — добавить задержку Thread.sleep() перед вызовом screenshot() или использовать IdlingResource из Espresso для ожидания асинхронных операций.
Screengrab-lib должна соответствовать версии Fastlane. Fastlane обновляется ежемесячно, и старая библиотека может не поддерживать новые параметры конфигурации. Решение — синхронизировать версии через Gemfile и gradle.properties.
Запуск на 30 языках на 5 устройствах может занимать более часа. Решение — разделить прогоны: один для магазина на всех языках, другой для внутренних нужд на двух языках. GitHub Actions позволяет использовать матрицу стратегий для параллельных запусков.
Эмулятор Android требует аппаратной виртуализации, которая не всегда доступна на CI-серверах. KVM должен быть включён, иначе эмулятор не запускается. Решение — использовать x86-образы без GPU-ускорения или Firebase Test Lab.
Часто задаваемые вопросы
ADB делает снимок того, что отображается на экране в текущий момент. Screengrab интегрируется с UI-тестами, автоматически переключает языки, устройства и делает серию снимков по сценарию без участия человека.
Нет, Screengrab является компонентом экосистемы Fastlane и использует его инфраструктуру для сборки, установки и координации. Отдельно библиотека screengrab-lib не запускается — необходим Fastlane как оркестратор.
На одном устройстве прогон на 10 языках занимает 15–25 минут. Каждый язык требует переустановки приложения и полного цикла UI-тестов. Параллельный запуск на нескольких устройствах сокращает время пропорционально.
Да, Screengrab поддерживает iOS через XCTest и симуляторы Xcode. Конфигурация аналогична Android: добавляются языки, устройства, а UI-тесты на Swift пишутся с использованием XCTest и снимков через XCUIScreenshot.
Screengrab не поддерживаетный режим — каждый запуск генерирует полный набор скриншотов. Рекомендуется настроить отдельный lane для CI с ограниченным списком языков, чтобы не перезаписывать существующие снимки из основного прогона.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также