Вступление
Stetho — это открытая отладочная платформа с открытым исходным кодом, разработанная Facebook, которая предлагает богатый и интерактивный опыт отладки для разработчиков Android. С помощью Stetho отладка собственных приложений Android становится такой же простой, как и отладка веб-страницы, поскольку она позволяет использовать инструменты разработчика Google Chrome для выполнения различных действий по отладке, таких как проверка иерархии представлений, проверка сети, управление базами данных SQLite и многое другое.
В этом руководстве вы узнаете, как добавить Stetho в проект Android и использовать для его отладки инструменты разработчика Google Chrome и утилиту командной строки Stetho , dumpapp .
1. Добавление зависимостей Gradle
Чтобы добавить библиотеку Stetho в свой проект, добавьте com.facebook.stetho:stetho
в качестве зависимости compile
в файле build.gradle модуля app
:
java compile 'com.facebook.stetho:stetho:1.1.1'
В этом руководстве вы будете использовать OkHttp , популярную сетевую библиотеку от Square, для управления всеми сетевыми подключениями, потому что она действительно хорошо работает со Stetho. Добавьте его как еще одну зависимость compile
:
java compile 'com.facebook.stetho:stetho-okhttp:1.1.1'
2. Инициализация Stetho
Шаг 1. Создание пользовательского класса Application
Лучшее время для инициализации Stetho — это когда ваше приложение запускается. Следовательно, вы должны создать новый класс, расширяющий Application
и инициализировать Stetho внутри его метода onCreate
.
Создайте новый класс с именем MyApplication и переопределите его метод onCreate
:
« `открытый класс Java MyApplication расширяет приложение {
@Override public void onCreate () { super.onCreate (); }} `` `
Чтобы инициализировать Stetho, необходимо сначала создать экземпляр Stetho.InitializerBuilder
, используя метод Stetho.newInitializerBuilder
. Затем, чтобы разрешить Stetho работать с инструментами разработчика Chrome, необходимо вызвать enableWebKitInspector
. Если вы также хотите включить dumpapp, вы должны вызвать enableDumpapp
. Когда Stetho.InitializerBuilder
будет готов, вы можете вызвать его метод build
чтобы сгенерировать объект Initializer
и передать его в метод Stetho.initialize
.
А пока давайте DumperPluginsProvider
функциональность по умолчанию, используя стандартные InspectorModulesProvider
и DumperPluginsProvider
. Добавьте следующий код в метод onCreate
:
« `java // Создание InitializerBuilder Stetho.InitializerBuilder initializerBuilder = Stetho.newInitializerBuilder (this);
// Включить Chrome DevTools initializerBuilder.enableWebKitInspector (Stetho.defaultInspectorModulesProvider (this));
// Включить интерфейс командной строки initializerBuilder.enableDumpapp (Stetho.defaultDumperPluginsProvider (context));
// Используйте InitializerBuilder для генерации инициализатора Stetho.Initializer initializer = initializerBuilder.build ();
// Инициализируем Stetho с помощью инициализатора Stetho.initialize (initializer); « `
Шаг 2: Редактирование манифеста
Чтобы операционная система Android знала, что у вас есть собственный класс Application
, добавьте атрибут с именем android:name
в тег application
манифеста и задайте в качестве значения имя вашего пользовательского класса Application
.
« `XML
« `
3. Использование Chrome DevTools
После компиляции и установки приложения на устройстве Android (или в эмуляторе) запустите Google Chrome и введите chrome: // inspect в адресной строке. Вы увидите экран, который выглядит так:
Нажмите на ссылку осмотреть, чтобы открыть Инструменты разработчика .
Шаг 1: Проверка сетевых подключений
Stetho позволяет вам в реальном времени проверять сетевые соединения, которые устанавливает ваше приложение. Однако в Stetho версии 1.1.1 это работает только с сетевой библиотекой OkHttp. При использовании OkHttp со Stetho следует помнить о том, чтобы добавить StethoInterceptor
в List
сетевых перехватчиков объекта OkHttpClient
.
Вот пример кода, который подключается к HttpBin и получает документ JSON:
« `java // Создать экземпляр OkHttpClient OkHttpClient httpClient = new OkHttpClient ();
// Добавить перехватчик Stetho httpClient.networkInterceptors (). Add (new StethoInterceptor ());
try {// Получить содержимое http://httpbin.org/ip Response response = httpClient.newCall (new Request.Builder (). url («http://httpbin.org/ip») .build ()) .Execute ();
} catch (IOException ioe) {Log.d («StethoTut», ioe.getMessage ()); } « `
После запуска кода вы увидите следующее на вкладке « Сеть » окна « Инструменты разработчика» :
Если щелкнуть URL-адрес в первом столбце, вы попадете на экран, на котором отображается дополнительная информация об ответе:
Шаг 2: Запрос к базам данных SQLite
С помощью Stetho вы можете выполнять множество операций с базами данных SQLite вашего приложения. Перейдите на вкладку « Ресурсы » и выберите « Веб-SQL» . Если в вашем приложении есть какие-либо базы данных SQLite, они будут перечислены здесь. Выбор базы данных показывает список таблиц в базе данных. Наконец, щелчок таблицы отображает записи таблицы:
Вы также можете выполнить SQL-запросы после выбора базы данных SQLite:
Шаг 3: Управление настройками вашего приложения
Чтобы просмотреть SharedPreferences
вашего приложения, откройте вкладку « Ресурсы » окна « Инструменты разработчика» и выберите « LocalStorage» . Вы увидите имена файлов, которые ваше приложение использует для хранения настроек. Щелчок по файлу отображает пары ключ-значение, хранящиеся в этом файле:
Вы даже можете редактировать значения, хранящиеся в файле:
Обратите внимание, что любые изменения, которые вы вносите в значения, являются постоянными.
4. Использование dumpapp
Шаг 1: Загрузка дамппапа
dumpapp — мощная утилита, которая позволяет вам манипулировать вашим Android-приложением из командной строки. Вы можете получить его, клонировав репозиторий Stetho :
bash git clone https://github.com/facebook/stetho
Поскольку dumpapp — это скрипт Python, для его использования на вашем компьютере должна быть установлена последняя версия Python.
Шаг 2: Использование плагинов
Чтобы просмотреть список доступных плагинов, войдите в каталог stetho / scripts и выполните следующую команду:
bash ./dumpapp -l
Вывод выглядит примерно так:
Давайте использовать плагин под названием prefs . Этот плагин используется для просмотра и редактирования значений, хранящихся в SharedPreferences
вашего приложения. Например, следующая команда перечисляет все пары ключ-значение, хранящиеся в SharedPreferences
вашего приложения:
bash ./dumpapp prefs print
Вывод выглядит примерно так:
Шаг 3: Создание пользовательского плагина
Пользовательские плагины для dumpapp — это просто классы Java, которые реализуют интерфейс DumperPlugin
. Давайте создадим простой плагин, который печатает имя пакета тестируемого приложения.
Создайте новый класс внутри класса MyApplication с именем MyDumperPlugin . После переопределения методов интерфейса DumperPlugin
ваш класс должен выглядеть следующим образом:
« `Java-класс MyDumperPlugin реализует DumperPlugin {@Override public String getName () {}
@Override public void dump (DumperContext dumpContext) выдает DumpException { }} `` `
Метод getName
должен возвращать имя плагина. Чтобы вернуть значение my_plugin , добавьте следующий код в метод getName
:
java return "my_plugin";
Метод dump
— это метод, который вызывается при запуске плагина из командной строки. DumperContext
предоставляет различные потоки ввода / вывода, которые позволяют вам читать из командной строки или записывать в нее. Сейчас мы просто будем использовать стандартный вывод. Добавьте следующий код в метод dump
чтобы получить ссылку на стандартный поток вывода:
java PrintStream out = dumpContext.getStdout();
Поскольку этот плагин является частью класса MyApplication
, для получения имени пакета приложения вы можете напрямую вызвать метод getPackageName
. Получив имя пакета, напечатайте его, используя метод println
объекта PrintStream
:
java out.println(MyApplication.this.getPackageName());
Ваш пользовательский плагин теперь готов к использованию.
Шаг 4: Создание провайдера пользовательских плагинов
Плагин, созданный на предыдущем шаге, не будет доступен для Stetho, если вы не создадите пользовательский поставщик плагинов и будете использовать его при инициализации Stetho. Пользовательский поставщик плагинов — это класс, который реализует интерфейс DumperPluginsProvider
.
Давайте создадим собственный поставщик плагинов под названием MyDumperPluginsProvider . Создайте этот класс внутри класса MyApplication
. После переопределения единственного метода интерфейса DumperPluginsProvider
ваш класс должен выглядеть следующим образом:
« `Java-класс MyDumperPluginsProvider реализует DumperPluginsProvider {@Override public Iterable
}} `` `
Поскольку метод get
возвращает Iterable
, все, что вам нужно сделать, это создать список, добавить свой собственный плагин в список и вернуть список. Код для этого будет выглядеть так:
« `java // Создать список ArrayList
// Добавить один или несколько пользовательских плагинов plugins.add (new MyDumperPlugin ());
// Возвращаем список return plugins; « `
Однако, поскольку Iterable
вашего провайдера пользовательских плагинов не включает в себя плагины по умолчанию, вы не сможете использовать их при запуске dumpapp. Если вы хотите использовать оба пользовательских плагина и плагины по умолчанию, вы должны добавить плагины по умолчанию в ваш ArrayList
. Чтобы получить список defaultDumperPluginsProvider
по умолчанию, необходимо вызвать метод get
поставщика defaultDumperPluginsProvider
возвращаемый методом defaultDumperPluginsProvider
.
« `java // Добавляем плагины по умолчанию для сохранения оригинальной функциональности
for (плагин DumperPlugin: Stetho.defaultDumperPluginsProvider (MyApplication.this) .get ()) {plugins.add (плагин); } « `
Ваш поставщик пользовательских плагинов готов. Чтобы использовать его, перейдите к методу onCreate
и передайте его экземпляр вызову enableDumpapp
:
java initializerBuilder.enableDumpapp(new MyDumperPluginProvider());
Шаг 5: Использование пользовательского плагина
Перечислите все доступные плагины снова, используя dumpapp -l
. Вы увидите название вашего собственного плагина в списке:
Чтобы запустить его, выполните следующую команду:
bash ./dumpapp my_plugin
Следует напечатать название пакета вашего приложения:
Вывод
В этом уроке вы узнали, как использовать Stetho в своих проектах Android. Вы также узнали, как использовать интерфейс командной строки, dumpapp и инструменты разработчика Google Chrome для отладки ваших приложений. К настоящему времени вы, должно быть, поняли, что, хотя Stetho еще не может полностью заменить отладчик Android Studio, он определенно предлагает функции, которые могут значительно улучшить ваш опыт отладки.
Чтобы узнать больше о Stetho, обратитесь к коду и документации, которые доступны в репозитории GitHub .