Как стать автором
Обновить
908.06
Яндекс
Как мы делаем Яндекс

Делюсь небольшим, но полезным плагином: Deeplink Helper для Android Studio

Время на прочтение3 мин
Количество просмотров6.1K
DRY. Don’t Repeat Yourself. Принцип, призывающий разработчика не дублировать код. DRY часто можно распространить шире, не только на код. Сегодня расскажу о личном проекте, который уже помог мне и другим разработчикам избавиться от последовательности рутинных действий при разработке и отладке приложений для Android. И не просто расскажу — а ещё и поделюсь этим инструментом и его исходным кодом.

Рассмотрим проблему на примере нашего продукта. Яндекс.Маркет — приложение большое, но стандартное с точки зрения разработки. Оно состоит из множества связанных между собой экранов с различными состояниями. Разработчик, создавая функциональность, часто имеет дело с экранами, до которых можно добраться только после множества действий в интерфейсе приложения. Пользовательские сценарии порой состоят из десятков действий, и все их нужно воспроизводить при отладке или проверке приложения. Согласитесь, это даже звучит больно.

Если при работе над приложением вы хотите уменьшить количество таких действий и переключений фокуса с IDE на Android-устройство, то прошу под кат.

Мысль автоматизировать рутинные действия в интерфейсе приложения появилась у меня при работе над задачей, которая при отладке требовала регулярно повторять примерно следующий сценарий (в скобках перечислены действия):

  • переключиться на регион A (профиль → регион → набрать название города);
  • добавить в корзину товар X (поиск → набрать название товара → в корзину);
  • переключиться на регион B (профиль → регион → набрать название города);
  • добавить в корзину товар Y (поиск → набрать название товара → в корзину);
  • перейти на экран корзины.

Около двадцати действий с приложением — и это без учёта ввода текста. Чтобы автоматизировать сценарий, я решил использовать диплинки.

Напомню, что диплинк — это специальным образом сформированный URI. Чтобы приложение его поддерживало, нужно зарегистрировать схему URI в манифесте приложения и реализовать логику обработки. Более подробная документация тут. Как правило, диплинки используются, чтобы открывать приложение на определённом экране после клика на сайте или в рассылке. Для тестирования диплинков в Android можно имитировать переход по диплинку через ADB-команду.

На тот момент в нашем приложении уже поддерживался ряд диплинков, но покрывали они только часть необходимой мне функциональности. Поэтому для описанного выше сценария создали два новых диплинка: переключение региона и добавление товара в корзину. Такие диплинки необходимы только для отладки и тестирования, поэтому мы называем их отладочными, они недоступны пользователям в релизной сборке. Логика обработки стандартных диплинков — это действия, связанные с навигацией внутри приложения. Отладочные диплинки, как правило, оперируют с логикой, не связанной с UI.

Несмотря на то что создавать диплинки просто, управлять ими через ADB крайне неудобно. Нужно каждый раз искать в истории терминала команду с определёнными параметрами, вспоминая соответствие параметров и результата. Вот эту проблему я и решил с помощью плагина для Android Studio.

Чем плагин лучше приложения:

  • нет необходимости тянуть за собой ADB или искать его в системе: в IDE есть API для работы с ADB;
  • не нужно переключаться между окном IDE и приложения;
  • плагин, в отличие от приложений, легко распространять (у каждой ОС свой источник доверенного ПО).

В итоге за несколько вечеров родилась первая версия плагина Deeplink Helper, позволяющая отправлять диплинки на устройство. Диплинки при этом могут быть с аргументом или без. Им можно задавать читабельное название. После выполнения каждая команда попадает в лог, он же сценарий. Можно сохранить его, открыть в другой IDE, поделиться им с командой. При этом команды из сценария можно выполнять как по одной, так и все подряд.

image

Таким образом получается автоматизировать целые сценарии. Я редко пользуюсь выполнением сценариев полностью, за раз. Как правило, удобнее поочерёдно выполнять команды. Сценариями особенно трудновоспроизводимых случаев можно делиться с тестировщиками. Экономим их время.

В какой-то момент возникла потребность добавить в плагин возможность выполнения произвольных ADB-команд. И это было сделано. И конечно же, помимо диплинков, можно добавлять произвольные ADB/shell-команды. Задаётся это всё в едином конфигурационном файле формата JSON, в котором следует указать packageName приложения. Также доступно редактирование конфигурации, туда можно добавить и свои диплинки, и полезные ADB-команды (примеры тут).

Я чаще всего использую такие сценарии, состоящие только из ADB-команд:

  • переподключить устройство к Charles: (ADB reverse, выключить Wi-Fi, включить Wi-Fi);
  • очистить данные приложения;
  • открыть приложение.

Эти команды уже есть в конфигурационном файле по умолчанию.

Плагин продолжает разрабатываться. Например, пока нельзя выбрать из нескольких подключённых устройств, обрабатываются диплинки не более чем с одним аргументом. Если вам интересно присоединиться к доработке Deeplink Helper, присылайте пул-реквесты на гитхабе. Сам плагин можно скачать тут.

Надеюсь, этот простой инструмент сэкономит время и вам. Уверен, существуют альтернативные варианты решения этой проблемы — буду рад обсудить их в комментариях.
Теги:
Хабы:
Всего голосов 10: ↑10 и ↓0+10
Комментарии2

Публикации

Информация

Сайт
www.ya.ru
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия