Как стать автором
Обновить

Android Remote Debugger — удаленная отладка Android приложений

Время на прочтение5 мин
Количество просмотров12K

Отладка является важным этапом разработки программного обеспечения. Поиск и исправление ошибок позволяют разрабатывать качественные продукты.


В этой статье я хочу поговорить об отладке именно Android приложений. Android Studio предоставляет нам различные инструменты профилирования, такие как:


  • logcat – инструмент для просмотра логов приложения, в том числе и исключений при краше. Его можно использовать как в Android Studio, так и в терминале, через adb;
  • Android profiler – мощный инструмент, который позволяет просматривать все сетевые запросы, загрузку процессора, памяти и батареи.

Также существует множество сторонних решений, позволяющих просматривать сетевой трафик, базы данных, shared preferences и др.
У всех этих инструментов есть преимущества и недостатки. К их минусам можно отнести следующее:


  • множество зависимостей различных инструментов;
  • сложность использования – как правило, все инструменты ориентированы на разработчиков и неудобны другим участникам команды, например, тестировщикам, аналитикам или back-end разработчикам. Обычно последним приходится дергать android-разработчиков, чтобы просмотреть какие-либо логи;
  • обязательное подключение телефона к компьютеру, например, через usb-кабель.

На данный момент я не нашел ни одного решения, которое объединяло бы различные инструменты отладки и устраняло бы вышеуказанные проблемы. Поэтому я разработал собственное решение.


Android Remote Debugger


Мое решение является очень простым в использовании, так как позволяет отлаживать приложение прямо в браузере, без подключения Android устройства к компьютеру. Данное решение включает в себя четыре раздела для отладки:


  • Logging — просмотр логов приложения, включая краши;
  • Database — просмотр и редактирование записей в базе данных;
  • Network — просмотр всех сетевых запросов и ответов в удобном формате;
  • SharedPreferences – просмотр и редактирование данных SharedPreferences.

Работа с отладчиком


Для работы с отладчиком нужно сделать следующее:


  • подключить и проинициализировать библиотеку;
  • запустить приложение;
  • вы получите уведомление в панели уведомлений, типа http://xxx.xxx.x.xxx:8080. Просто откройте браузер на любом компьютере, подключенный к той же сети (Wi-Fi или LAN) что и Ваше Android устройство и перейдите по указанной ссылке;
  • Вам будет предложено четыре раздела. Выберите нужный и начните работать с данными подключенного приложения.

Ниже представлены скриншоты некоторых разделов:


Logging


logging.png

Database


database.png

Network


network.png

Описание разделов отладки


Для инициализации библиотеки необходимо вызвать AndroidRemoteDebugger.init(applicationContext) в коде приложения. Также можно указать дополнительные параметры с помощью AndroidRemoteDebugger.Builder:


AndroidRemoteDebugger.init(
    new AndroidRemoteDebugger.Builder(applicationContext)        
        .enabled(boolean)    // управление включением
        .disableInternalLogging()    // отключить внутренние логи Android Remote Debugger
        .disableJsonPrettyPrint()    // отключение форматирования json в разделах `Logging` и `Network`
        .disableNotifications()    // отключить показ уведомлений статуса работы Android Remote Debugger
        .excludeUncaughtException()    // исключить печать логов при краше приложения
        .port(int)    // использовать другой порт, отличный от 8080
        .enableDuplicateLogging()    // все логи из раздела `Logging` будут также напечатаны в logcat
        .enableDuplicateLogging(new Logger() {  // callback для получения всех логов из раздела `Logging`
            @Override
            public void log(int priority, String tag, String msg, Throwable th) {
            }
        })
        .build()
);

При инициализации библиотеки в Вашем приложении запускается локальный сервер. В качестве веб-сервера используется NanoHTTPD. Затем Вы получаете уведомление об успешном или неуспешном запуске. Сервер может не запуститься, если Вы, к примеру, уже запустили сервер в другом приложении с портом 8080. И в уведомлении Вам будет предложено повторить попытку запуска с текущим портом или повторить запуск с другим портом. Порт Вы также можете указать заранее в AndroidRemoteDebugger.Builder.


Logging


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


Для логирования сообщений нужно вызвать статический метод AndroidRemoteDebugger.Log. Данный метод имеет множество разных перегрузок. Вызывать их можно в любом месте вашего приложения. При их вызове сообщение сразу сохраняется в базе данных, а в разделе Logging каждую секунду отправляется запрос на сервер на получение новых логов. На данный момент все логи очищаются при следующем запуске приложения.


Пример вызова: AndroidRemoteDebugger.Log.d("tag", "message").


Также очень удобно использовать данный метод логирования совместно с библиотекой Timber (автором которой является Jake Wharton), пример:


class AndroidRemoteDebuggerTree extends Timber.Tree {
    @Override
    protected void log(int priority, @Nullable String tag, @NotNull String message, @Nullable Throwable t) {
        AndroidRemoteDebugger.Log.log(priority, tag, message, t);
    }
}

...

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Timber.plant(new Timber.DebugTree(), new AndroidRemoteDebuggerTree());
    }
}

Network


Раздел Network позволяет просматривать все сетевые запросы и ответы в компактном и расширенном виде. В компактном виде не отображаются тело и заголовки запросов. В расширенном виде вы видите всю информацию. Принцип получения данных в этом разделе практически аналогичен разделу Logging. При необходимости можно выполнить фильтрацию по HTTP коду ответа или по подстрокам. Можно также показывать только те запросы, в которых произошла ошибка. Как и в разделе Logging, все логи можно скачать.


Для работы этого раздела необходимо использовать библиотеку OkHttp3 и добавить интерцептор NetLoggingInterceptor. Для получения достоверных данных рекомендуется добавить его последним, после других интерцепторов.


Пример:


OkHttpClient client = new OkHttpClient.Builder()
    // other interceptors
    .addInterceptor(new NetLoggingInterceptor())
    .build();

Database


Данный раздел позволяет просматривать базы данных. Ничего дополнительного для его работы делать не нужно. Необходимо только выбрать базу данных и таблицу. Данные будут показываться страницами по 15 записей. Можно выполнить поиск данных, удалить записи, редактировать их. Можно также выполнить любой sql-запрос.


SharedPreferences


Данный раздел позволяет просматривать все файлы SharedPreferences. Можно выбрать любой файл и просмотреть, удалить, изменить или добавить запись. Также есть возможность удалить сам файл SharedPreferences со всеми данными. Кроме того, можно выполнить поиск по подстрокам.


Как подключить Android Remote Debugger


Добавьте в корневой build.gradle следующий репозиторий:


allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Добавьте в build.gradle вашего модуля следующую зависимость:


dependencies {
    implementation 'com.github.zerobranch:android-remote-debugger:1.0.0'
}

Итог


Android Remote Debugger:


  • позволяет выполнять удаленную отладку через браузер;
  • включает в себя сразу несколько инструментов отладки;
  • ориентирован не только на разработчиков;
  • для работы не требует подключения Android устройства к компьютеру;
  • прост в использовании.

GitHub


Подробные инструкции по работе и подключению библиотеки можно найти на GitHub

Теги:
Хабы:
Всего голосов 11: ↑11 и ↓0+11
Комментарии4

Публикации

Истории

Работа

Ближайшие события