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) и runner, който управлява стартирането на тестове и събирането на резултати. На Android се използва инструментална тестова рамка, на iOS — XCTest.
Fastlane извиква действието screengrab, което чете конфигурационния файл Screengrabfile. Runner-ът компилира тестов 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 (модул: 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 GB RAM на устройство, а пълното стартиране на 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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също