Библиотека предоставляет встроенную отладочную панель для Android-приложений, предназначенную для использования в debug и QA-сборках.
Changelog | Миграция на новые версии | Документация по разработке плагинов
Панель позволяет управлять состоянием приложения в runtime без внесения изменений в основной код.
Основные возможности:
- Добавление, редактирование и выбор сервера.
- Управление feature-toggles и remote config на основе Konfeature.
- Отображение информации о приложении.
Каждая функциональность подключается отдельным плагином.
Для работы с библиотекой необходимо выполнить следующие шаги:
- Подключить
Coreмодуль для работы самой панели:
dependencies {
// Core модуль панели
debugImplementation("com.redmadrobot.debug:panel-core:${debug_panel_version}")
}- Подключить необходимые плагины
dependencies {
// Плагин для работы с серверами
debugImplementation("com.redmadrobot.debug:plugin-servers:${debug_panel_version}")
// Плагин для работы с remote config на основе Konfeature
debugImplementation("com.redmadrobot.debug:plugin-konfeature:${debug_panel_version}")
// Так же необходимо подключить саму библиотеку konfeature
debugImplementation("com.redmadrobot.konfeature:konfeature:${konfeature_version}")
// Плагин для отображения информации о приложении
debugImplementation("com.redmadrobot.debug:plugin-about-app:${debug_panel_version}")
}
- Для того, чтобы библиотека не попала в релизную сборку, необходимо подключить
no-opверсию библиотеки
releaseImplementation("com.redmadrobot.debug:panel-no-op:${debug_panel_version}")Общий принцип подключения библиотеки в коде выглядит так:
class App : Application() {
override fun onCreate() {
super.onCreate()
DebugPanel.initialize(
application = this,
plugins = listOf(
ServersPlugin(/*arguments*/),
KonfeaturePlugin(/*arguments*/),
AboutAppPlugin(/*arguments*/),
)
)
}
}Для открытия DebugPanel необходимо вызвать:
fun openDebugPanel() {
DebugPanel.showPanel(activity)
}Также панель доступна через уведомление, которое появляется при запуске приложения, использующего библиотеку. Через это уведомление можно перейти к ручной настройке панели, нажав кнопку SETTINGS в раскрытом уведомлении.
Используется для работы с тестовыми серверами
Доступна возможность задать список предустановленных серверов
ServersPlugin(
preInstalledServers = listOf(
DebugServer(
name = "server_name",
url = "https://debug_server.com",
isDefault = true /*!!!Обязательно должен быть указан хотя бы один сервер по умолчанию*/
)
)
)Подписка на событие смены сервера
DebugPanel.subscribeToEvents(lifecycleOwner = this) { event ->
when (event) {
is ServerSelectedEvent -> {
val debugServer = event.debugServer
// логика переключения сервера
}
}
}Получение выбранного сервера или сервера по умолчанию:
val selectedServer = ServersPlugin.getSelectedServer()
val defaultServer = ServersPlugin.getDefaultServer()При использовании OkHttp в сетевом стеке можно применить DebugServerInterceptor, который автоматически подменяет хост в запросах на выбранный сервер.
OkHttpClient.Builder()
.addInterceptor(DebugServerInterceptor())
.build()Если запросы требуют дополнительной модификации, например добавления заголовков, можно воспользоваться методом modifyRequest
OkHttpClient.Builder()
.addInterceptor(
DebugServerInterceptor().modifyRequest { request, server ->
if (server.name == "Test") {
request.newBuilder()
.addHeader("Authorization", "testToken")
.build()
} else {
request
}
}
)
.build()Получение текущего выбранного сервера
val selectedServer = getPlugin<ServersPlugin>().getSelectedServer()В основе плагина лежит библиотека Konfeature, которая позволяет:
- отображать конфигурации feature, используемые в Konfeature
- просматривать источник каждого элемента конфигурации (Default, Firebase, AppGallery и др.)
- переопределять значения элементов конфигурации с типами Boolean, String, Long, Double
Для подключения плагина необходимо передать объект класса KonfeatureDebugPanelInterceptor и экземпляр Konfeature
val debugPanelInterceptor = KonfeatureDebugPanelInterceptor(context)
val konfeatureInstance = konfeature {
if (isDebug) {
addInterceptor(debugPanelInterceptor)
}
}
KonfeaturePlugin(
debugPanelInterceptor = debugPanelInterceptor,
konfeature = konfeatureInstance,
)В builder Konfeature доступны следующие настройки:
- добавление конфигурации конкретной фичи —
register(FeatureConfigN()) - настройка работы с remote config через реализацию интерфейса
FeatureSource—addSource(featureSource) - настройка логирования —
setLogger(logger)
Предназначен для отображения информации о приложении: версии, номера сборки и других произвольных данных.
Для подключения плагина необходимо передать список объектов AboutAppInfo, содержащий хотя бы один элемент:
AboutAppPlugin(
aboutAppInfo = listOf(
AboutAppInfo(
title = "Версия",
value = BuildConfig.VERSION_NAME
),
AboutAppInfo(
title = "Номер билда",
value = BuildConfig.VERSION_CODE.toString()
)
)
)Каждый AboutAppInfo содержит:
title— название поля (например, «Версия»)value— значение поля (например, «1.0.0»)
Для предотвращения попадания тестовых данных в релизные сборки рекомендуется не задавать их явно в классе Application, а использовать реализации DebugDataProvider, которые можно разнести по разным buildType. Для release-версии следует создать пустую реализацию.
buildType debug
class DebugServersProvider : DebugDataProvider<List<DebugServer>> {
override fun provideData(): List<DebugServer> {
return listOf(
DebugServer(name = "debug 1", url = "https://testserver1.com")
)
}
}buildType release
class DebugServersProvider : DebugDataProvider<List<DebugServer>> {
override fun provideData(): List<DebugServer> {
return emptyList()
}
}Передача в плагин
ServersPlugin(
preInstalledServers = DebugServersProvider()
)