Скриншоты приложения являются важной частью презентации приложения, поскольку с их помощью пользователь сможет понять, как приложение выглядит и какие функции оно выполняет. Очень часто скриншоты помогают убедить потенциального пользователя скачать и установить себе приложение. Однако если приложение локализовано на большое количество языков, создание скриншотов может оказаться весьма трудоемкой задачей, поскольку придётся выполнять одни и те же операции раз за разом для каждой локали.
Инструменты fastlane помогают автоматизировать этот процесс, используя для этого утилиту под названием screengrab. Screengrab создаёт скриншоты для разных типов устройств и локалей, использующихся в приложении.
Примечание: разработчики на данный момент не реализовали поддержку fastlane на Windows, поэтому нет никаких гарантий, что на этой ОС screengrab будет работать корректно. По этой причине в примере ниже будет использоваться дистрибутив Linux.
Преимущества использования screengrab:
- Экономия времени при создании десятков скриншотов для каждого языка.
- Можно наглядно увидеть, как приложение выглядит на разных языках.
- Обновление скриншотов при изменении дизайна.
- Полная интеграция с fastlane.
Screengrab использует возможности встроенных тестов Android в сочетании с Espresso для взаимодействия с приложением. Таким образом, при настройке screengrab нужно будет создать UI-тест с помощью Espresso для того, чтобы утилита смогла выполнять свою работу. При создании новых проектов в Android Studio все средства для использования Espresso уже добавлены в проект.
Перед тем, как начать использовать в своём проекте screengrab, нужно установить Rubygems, которая представляет собой систему управления пакетами, позволяющую устанавливать программы и библиотеки, написанные на Ruby. Для этого воспользуется следующей командой.
Для Fedora:
Для Ubuntu:
Теперь можно установить screengrab с помощью команды gem.
После этого начнётся скачивания и установка инструментов fastlane (учтите, что это может занять некоторое время).
После того, как установка будет завершена, можно будет перейти к настройке проекта. Для этого запустим Android Studio, в файле build.gradle модуля приложения нужно добавить следующую зависимость в блок dependencies.
Кроме того, нужны зависимости, с помощью которых будут создаваться тесты в приложении.
Espresso входит в состав библиотеки поддержки, с его помощью можно быстро и удобно внедрять тесты в свой проект. Также в этом же файле нужно добавить следующую строку в блок defaultConfig.
Синхронизируем проект, чтобы добавить зависимости. Далее нужно добавить несколько специальных разрешений в файл AndroidManifest.xml, которые нужны для работы screengrab. Чтобы эти разрешения не попали в релизную сборку приложения, можно создать ещё один файл AndroidManifest.xml и разместить его по следующему пути: src/debug/AndroidManifest.xml. В этом файле нужно указать разрешения, представленные ниже.
Примечание: начиная с версии Android 4.2 уровень защиты разрешения android.permission.CHANGE_CONFIGURATION был изменён с “dangerous” на “system|signature|development“. Это означает, что приложение должно быть подписано ключом подписи прошивки, либо располагаться в системном разделе устройства. С помощью ADB можно выдать это разрешение, введя команду:
Теперь настало время создать тест, который будет перемещаться по экранам приложения и делать скриншоты. Для этого открыть любой класс (например. MainActivity) и нажать комбинацию Cltr + Shift + T, после чего выбрать Create new test. Появится диалоговое окно, в котором будет предложено ввести название теста, указать пакет и выбрать методы (если необходимо). В поле Testing Library лучше нужно также выбрать JUnit4.
После этого Android Studio предложит выбрать папку, где будет находиться тест.
Здесь при написании кода для теста важны два момента:
- Для автоматической смены локалей нужно будет добавить следующее правило:
- Для того, чтобы сделать скриншот с помощью screengrab, нужно воспользоваться следующим методом:
Этот метод будет сохранять скриншот в память устройства, затем после выполнения теста screengrab заберёт скриншоты из хранилища.
Не будем вдаваться в подробности написания теста, поэтому ниже будет показан пример теста для одного из наших приложений “Звуки выстрелов”
Чтобы проверить, корректно ли работает тест, можно запустить его, нажав правой кнопкой мыши на класс теста и выбрав Run. Если что-то пойдёт не так, Android Studio вернёт ошибку при выполнении теста.
Теперь, когда тест готов, можно перейти к подготовке screengrab. Для этого в папке с файлами приложения (по умолчанию папка называется <корневая папка проекта>/app/) создать новую папку, назвав её fastlane. Внутри неё создадим файл без какого-либо расширения и назовём его Screengrabfile. Он будет служить конфигурационным файлом для screengrab, в котором можно задать различные параметры. Screengrab перед началом работы будет подхватывать данные из этого файла, избавив тем самым от их ввода при каждом старте. В этой же папке после выполнения работы будут сохраняться сделанные скриншоты.
В нём можно задать такие параметры как:
- Список локалей, для которых необходимо сделать скриншоты.
- Пути до APK-файлов с приложением.
Напишем конфигурацию для нашего приложения, в результате получилось следующее:
Как нетрудно догадаться, locales перечисляет все языки, для которых нужно сделать скриншоты. Строка clear_previous_screenshots true удаляет скриншоты, выполненные при предыдущем запуске, из папки. tests_apk_path и app_apk_path задают пути для APK-файла.
В этой же папке создадим ещё один файл без расширения и назовём его Appfile. В нём нужно добавить следующую строку.
Это необязательно, но избавляет от необходимости каждый раз вводить имя пакета при запуске screengrab.
Теперь осталось дело за малым.
Нужно создать APK-файл с тестом, для этого в Andorid Studio на вкладке Terminal нужно ввести следующую команду.
Примечание: если у вас в приложении несколько вариантов сборки, либо у вас создана отдельная ветка для тестов, вы можете воспользоваться следующей командой, чтобы собрать конкретный вариант.
Например, если flavor задан “screengrab”, а тип сборки – debug, то команда будет иметь вид:
Затем в терминале Linux нужно перейти в директорию, где была создана папка fastlane, после чего ввести команду.
При этом эмулятор или устройство должно быть подключено и готово к запуску теста. Screengrab подхватит настройки, которые мы задали в файлах Screengrabgile и Appfile, после чего начнёт прогонять тесты на всех локалях, делая при этом скриншоты. В зависимости от того, как много вам нужно сделать скриншотов и насколько большим оказался тест, это может занять некоторое время.
Как только работа завершится, на экране появится уведомление об успешном сохранении скриншотов вместе с их количеством. Сохранённые скриншоты можно будет найти в папке, где был запущен fastlane screengrab (в нашем случае, в папке fastlane), в ней появится новая папка metadata/android/, в которой по локалям будут распределны все сделанные скриншоты.
Теперь всё что осталось это добавить получившиеся скриншоты в Google Play и обновить приложение. Таким образом, благодаря screengrab можно автоматизировать такой утомительный процесс, как создание скриношотов.