- PVSM.RU - https://www.pvsm.ru -
Отладка является важным этапом разработки программного обеспечения. Поиск и исправление ошибок позволяет разрабатывать качественные продукты.
В данной статье я хочу поговорить об отладке только Android приложений. Android Studio предоставляет нам различные инструменты профилирования, такие как:
Также существует множество сторонних решений, позволяющих просматривать сетевой трафик, базы данных, shared preferences и др.
У всех этих инструментов есть преимущества и недостатки. К их минусам можно отнести следующее:
На данный момент я не нашел ни одного существующего решения, которое объединяло бы различные инструменты отладки и решала бы вышеуказанные проблемы. Поэтому было принято решение разработать собственное решение.
Мое решение является очень простым в использовании, так как позволяет отлаживать приложение прямо в браузере, без подключения Android устройства к компьютеру. Данное решение включает в себя четыре раздела для отладки:
Для работы с отладчиком нужно сделать следующее:
http://xxx.xxx.x.xxx:8080
. Просто откройте браузер на любом компьютере, подключенный к той же сети (Wi-Fi или LAN) что и Ваше Android устройство и перейдите по указанной ссылке;Ниже представлены скриншоты некоторых разделов:
Для инициализации библиотеки необходимо вызвать 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 [1]. Дальше Вы получите уведомление об успешном или неуспешном запуске. Сервер может не запуститься, если Вы, к примеру, уже запустили сервер в другом приложении с портом 8080. И в уведомлении Вам будет предложено повторить попытку запуска с текущим портом или повторить запуск с другим портом. Порт Вы также можете указать заранее в AndroidRemoteDebugger.Builder
.
Данный раздел позволяет просматривать логи приложения. При необходимости можно выполнять фильтрацию сообщений по приоритету, по тегам и по подстрокам. Для удобства, у всех сообщений, в зависимости от приоритета, установлен свой цвет текста. Все логи также можно скачать.
Для логирования сообщений нужно вызвать статический метод AndroidRemoteDebugger.Log
. Данный метод имеет множество разных перегрузок. Вызывать их можно в любом месте вашего приложения. При их вызове сообщение сразу сохраняется в базе данных, а в разделе Logging каждую секунду отправляется запрос на сервер на получение новых логов. На данный момент все логи очищаются при следующем запуске приложения.
Пример вызова: AndroidRemoteDebugger.Log.d("tag", "message")
.
Также очень удобно использовать данный метод логирования совместно с библиотекой Timber [2] (автором которого является 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 позволяет просматривать все сетевые запросы и ответы в компактном и расширенном виде. В компактном виде отображается минимальная информация, без тела и заголовков запроса. В расширенном виде отображается вся информация. Принцип получения данных в этом разделе практически аналогичен разделу Logging. При необходимости можно выполнить фильтрацию по HTTP коду ответа или по подстрокам. Можно также показывать только те запросы, в которых произошла ошибка. Как и в разделе Logging все логи можно скачать.
Для работы этого раздела необходимо использовать библиотеку OkHttp3 [3] и добавить интерцептор NetLoggingInterceptor. Для получения достоверных данных, рекомендуется добавить его последним, после других интерцепторов. Пример:
OkHttpClient client = new OkHttpClient.Builder()
// other interceptors
.addInterceptor(new NetLoggingInterceptor())
.build();
Данный раздел позволяет просматривать базы данных. Ничего дополнительного для его работы делать не нужно. Необходимо только выбрать базу данных и таблицу. Данные будут показываться страницами по 15 записей. Можно выполнить поиск данных, удалить записи, радактировать их. Можно также выполнить любой sql-запрос.
Данный раздел позволяет просматривать все файлы SharedPreferences. Можно выбрать любой файл и просмотреть, удалить, изменить или добавить запись. Также есть возможность удалить сам файл SharedPreferences со всеми данными. Кроме того можно выполнить поиск по подстрокам.
Добавьте в корневой 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:
Подробные инструкции по работе и подключению библиотеки можно найти на GitHub [4]
Автор: Arman Sargsyan
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/open-source/346781
Ссылки в тексте:
[1] NanoHTTPD: https://github.com/NanoHttpd/nanohttpd
[2] Timber: https://github.com/JakeWharton/timber
[3] OkHttp3: https://github.com/square/okhttp
[4] Подробные инструкции по работе и подключению библиотеки можно найти на GitHub: https://github.com/zerobranch/android-remote-debugger
[5] Источник: https://habr.com/ru/post/488514/?utm_source=habrahabr&utm_medium=rss&utm_campaign=488514
Нажмите здесь для печати.