Open source
Development for Android
July 2017 18

Отлаживаем Android-приложение с помощью браузера

Бывали ли у вас ситуации, когда ваше приложение работало некорректно у отдельно взятого тестировщика или на отдельно взятом устройстве? Кажется, что с такой ситуацией так или иначе знаком каждый разработчик. И найти причину проблемы порой может быть достаточно сложно из-за сложности получения информации: нет возможности снять логи, заглянуть в БД или Shared Preferences приложения и т.д. Некоторые из этих проблем можно решить просто попросив тестировщика зайти в браузер.

Именно для этого и была начата разработка библиотеки Ultra Debugger. На данный момент она позволяет:

  • Отлеживать состояния приложения с помощью метода saveValue(Context context, String key, Object value). Можно посмотреть, работает ли прямо сейчас сервис, последнее высчитанное значение и т.д.
  • Писать логи с помощью метода addLog(Context context, String text[, Throwable throwable]).
  • Просматривать и редактировать Shared Preferences.
  • Просматривать и редактировать записи в SQLite.
  • Просматривать файлы, в том числе файлы в папке приложения.
  • Просматривать значения полей в текущем активити.
  • Вызывать методы в текущем активити.

Сама библиотека построена на модулях. За счет этого, при желании можно отключить ненужный функционал, а также расширять его путем добавления новых модулей.

Разработчику

Интеграция библиотеки очень проста:

  1. Прописываем зависимости:

    debugCompile 'ru.bartwell:ultradebugger:1.3'
    compile 'ru.bartwell:ultradebugger.wrapper:1.3'

    Как мы видим, основная зависимость подключается только для debug-сборок. При необходимости, можно подключать ее только для определенных flavor.

    Отдельно подключаем wrapper. Это необязательно, мы можем вызывать методы библиотеки напрямую, но тогда могут возникнуть сложности при отключении библиотеки для релизных сборок. Он представляет собой обертку, которая вызывает методы библиотеки используя рефлексию. Да, рефлексия непроизводительна, но для debug-сборок это кажется не таким критичным.

  2. В классе Application инициализируем библиотеку:

    @Override
    public void onCreate() {
    	super.onCreate();
    	// Wrapper будет работать только в debug-сборках
    	UltraDebuggerWrapper.setEnabled(BuildConfig.DEBUG);
    	// Необязательный второй параметр указывает порт для веб-интерфейса
     	UltraDebuggerWrapper.start(this, 8090);
    }

    BuildConfig.DEBUG может быть заменен например на BuildConfig.FLAVOR.equals(«dev»).

  3. При необходимости добавьте логи и сохраните нужные значения:

    UltraDebuggerWrapper.saveValue(context, «SomeValue», 12345);
    UltraDebuggerWrapper.addLog(context, «Some event»);

При запуске приложения в логи будет выведена строка содержащая ссылку на веб-интерфейс. Ссылка формируется из IP-адреса смартфона и номера порта указанного при вызове метода start(). При желании IP-адрес смартфона и номер порта можно получить с помощью методов UltraDebuggerWrapper.getIp() и UltraDebuggerWrapper.getPort() и вывести их в виде Toast или диалогового окна.

Тестировщику

Использовать библиотеку тестировщику тоже довольно просто. Нужно просто подключить смартфон и компьютер к одной WiFi-сети, набрать IP-адрес смартфона и порт в браузере (например, 192.168.0.33:8090). Может потребоваться разблокировать смартфон и запустить приложение. После этого откроется меню подключенных модулей и с помощью перехода по ссылкам можно будет получить необходимую информацию. Вот так выглядит например просмотр файлов:

image
Да, WEB-интерфейс выглядит по-спартански :) Но нужную информацию при этом получить вполне позволяет.

Заключение

Определенно здесь есть плацдарм для доработок. Можно наращивать количество модулей, можно улучшить UI и UX веб-интерфейса, добавить тесты и поработать над качеством кода. Конечно, это все — прямая обязанность автора библиотеки. Но если вдруг Ultra Debugger покажется вам полезным и у вас возникнет желание добавить модуль или что-то доработать — смело создавайте Pull Request, приветствуется любая помощь по проекту.
+4
3.6k 45
Comments 7