Android Remote Debugger - это библиотека для удаленной отладки Android приложений. Она позволяет просматривать логи, базы данных, shared preferences и сетевые запросы прямо в браузере.
- Logging
- Просматривать логи Вашего приложения
- Фильтровать логи по приоритету и тегам
- Выполнять поиск
- Скачивать логи
- Логировать ошибки при краше приложения
- Database
- Просмотр всех баз данных
- Редактировать записи базы данных
- Удалять записи базы данных
- Выполнять поиск по всем данным
- Выполнять любой sql-запрос для получения, добавления, обновления или удаления данных
- SharedPreferences
- Просмотр всех данных
- Редактировать, добавлять и удалять данные
- Выполнять поиск по всем данным
- Network
- Просматривать все сетевые запросы и ответы в удобном формате
- Фильтровать данные по коду ответа и ошибкам
- Скачивать логи
- Выполнять поиск по всем данным
Добавьте в корневой build.gradle следующий репозиторий:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Добавьте в build.gradle вашего модуля следующую зависимость:
dependencies {
debugImplementation 'com.github.zerobranch.android-remote-debugger:debugger:1.1.2'
releaseImplementation 'com.github.zerobranch.android-remote-debugger:noop:1.1.2'
}
Примечание: В последней строке выше будет использоваться no-op версия, которая ничего не делает. Её следует использовать только в релизных сборках. Это делает невозможным запуск сервера в релизной сборке.
Android Remote Debugger имеет 4 раздела:
- Logging
- Database
- Shared Preferences
- Network
Для работы разделов Logging
, Database
и Shared Preferences
необходимо выполнить несколько шагов:
-
Вызвать:
AndroidRemoteDebugger.init(applicationContext)
в коде приложения. -
После запуска Вашего приложения, Вы получите уведомление в панели уведомлений, в котором будет указана ссылка типа: http://xxx.xxx.x.xxx:8080. Просто перейдити по этой ссылке в вашем браузере. Также в logcat будет добавлена запись:
D/AndroidRemoteDebugger: Android Remote Debugger is started. Go to: http://xxx.xxx.x.xxx:8080
-
Чтобы просматривать логи в разделе
Logging
необходимо вызывать статические методыAndroidRemoteDebugger.Log
в любом месте вашего приложения, например,AndroidRemoteDebugger.Log.d("tag", "message")
илиAndroidRemoteDebugger.Log.log(priority, tag, msg, throwable)
с указанием всех параметров. -
Чтобы просматривать логи сети в разделе
Network
, необходимо использовать библиотеку OkHttp3 и добавить интерцепторNetLoggingInterceptor
. Для получения достоверных данных, рекомендуется добавить его последним, после других интерцепторов.
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new NetLoggingInterceptor())
.build();
Внимание
- Ваше Android устройство и компьютер должны быть подключены к одной сети (Wi-Fi или LAN).
- Вы также можете использовать отладку через usb или Android Default Emulator. Для этого запустите команду:
adb forward tcp:8080 tcp:8080
и перейдити по адресу: http://localhost:8080 или http://0.0.0.0:8080 в Вашем браузере. - Если вы используете Android Default Emulator, то возможно Вам также потребуется включить мобильный интернет и отключить WI-FI.
Для дополнительной настройки библиотеки используйте AndroidRemoteDebugger.Builder
AndroidRemoteDebugger.init(
new AndroidRemoteDebugger.Builder(applicationContext)
.enabled(boolean)
.disableInternalLogging()
.enableDuplicateLogging()
.disableJsonPrettyPrint()
.disableNotifications()
.excludeUncaughtException()
.port(int)
.build()
);
Все параметры для AndroidRemoteDebugger.Builder
являются необязательными. Для стандартной работы библиотеки достаточно вызвать AndroidRemoteDebugger.init(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) {
}
})
Интерцептор NetLoggingInterceptor
имеет два конструктора: пустой и с callback'ом для получения всех логов из раздела Network
new NetLoggingInterceptor(new NetLoggingInterceptor.HttpLogger() {
@Override
public void log(HttpLogModel httpLogModel) {
}
})
- Выбор уровня логирования
- Отфильтровать логи по тегу
- Включить/отключить автоскролл при получении новых логов
- Перейти в начало списка
- Перейти в конец списка
- Включить/отключить цвета для логов
- Удалить все логи
- Ссылку на страницу отладчика можно также получить следующим образом: http://ip-адрес-вашего-android-устройства:порт (ip-адрес-вашего-android-устройства можно посмотреть в настройках Вашего устройства).
- Если вы используете отладку через usb или Android Default Emulator и хотите использовать другой порт, например, 8081, то нужно запустить следующую команду:
adb forward tcp:8081 tcp:8081
. - Чтобы использовать данную библиотеку на одном Android устройстве для двух приложений одновременно, нужно ипользовать разные порты.
Если вы используете R8, вам не нужно ничего делать. Конкретные правила будут включены автоматически.
Если вы не используете R8, то Вам необходимо включить следующие правила:
-keep class zerobranch.androidremotedebugger.source.models.** { *; }
-keep class zerobranch.androidremotedebugger.source.local.LogLevel
Вам также могут потребоваться правила от OkHttp3 и Gson, которые являются зависимостями этой библиотеки.
Copyright 2020 Arman Sargsyan
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.