7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Android SDK

Отладка приложений для Android с помощью Stetho от Facebook

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

Введение

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 public class MyApplication extends Application {

Чтобы инициализировать Stetho, сначала необходимо создать экземпляр Stetho.InitializerBuilder, используя метод Stetho.newInitializerBuilder. Затем, чтобы позволить Stetho работать с инструментами разработчика Chrome, вы должны вызвать enableWebKitInspector. Если вы также хотите включить dumpapp, вы должны вызвать enableDumpapp. Когда Stetho.InitializerBuilder готов, вы можете вызвать его метод build для создания объекта Initializer и передать его методу Stetho.initialize.

На данный момент давайте включим функции по умолчанию, используя стандартные функции InspectorModulesProvider и DumperPluginsProvider. Добавьте следующий код в метод onCreate:

```java // Create an InitializerBuilder Stetho.InitializerBuilder initializerBuilder = Stetho.newInitializerBuilder(this);

// Enable Chrome DevTools initializerBuilder.enableWebKitInspector( Stetho.defaultInspectorModulesProvider(this) );

// Enable command line interface initializerBuilder.enableDumpapp( Stetho.defaultDumperPluginsProvider(context) );

// Use the InitializerBuilder to generate an Initializer Stetho.Initializer initializer = initializerBuilder.build();

// Initialize Stetho with the Initializer Stetho.initialize(initializer); ```

Шаг 2: Редактирование манифеста

Чтобы операционная система Android знала, что у вас есть собственный класс Application, добавьте в тег application манифест, называемый android: name, и укажите значение имени вашего собственного класса Application.

```xml

...

```

3. Использование DevTools от Chrome

После компиляции и установки вашего приложения на устройстве Android (или в эмуляторе) запустите Google Chrome и введите chrome://inspect в адресной строке. Вы увидите экран, который выглядит так:

Inspect pageInspect pageInspect page

Нажмите ссылку inspect, чтобы открыть Developer Tools.

Developer toolsDeveloper toolsDeveloper tools

Шаг 1: Проверка сетевых подключений

Stetho позволяет в реальном времени проверять сетевые подключения, которые делает ваше приложение. Однако в версии 1.1.1 Stetho это работает только с сетевой библиотекой OkHttp. При использовании OkHttp со Stetho не забудьте добавить StethoInterceptor в List сетевых перехватчиков объекта OkHttpClient.

Вот пример кода, который соединяется с HttpBin и извлекает документ JSON:

```java // Create an instance of OkHttpClient OkHttpClient httpClient = new OkHttpClient();

// Add Stetho interceptor httpClient.networkInterceptors().add(new StethoInterceptor());

try { // Fetch the contents of 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()); } ```

Когда код запускается, на вкладке Network окна Developer Tools вы увидите следующее:

Network tabNetwork tabNetwork tab

Если вы щелкните по URL-адресу в первом столбце, вы попадете на экран, который отобразит больше информации об ответе:

Contents of the responseContents of the responseContents of the response

Шаг 2. Запрос баз данных SQLite

С помощью Stetho вы можете выполнять множество операций с базами данных SQLite вашего приложения. Перейдите на вкладку Resources и выберите Web SQL. Если в вашем приложении есть базы данных SQLite, они будут здесь перечислены. Выбор базы данных показывает список таблиц в базе данных. Наконец, нажатие на таблицу отображает записи таблицы:

Rows of tableRows of tableRows of table

Вы также можете выполнять SQL-запросы после выбора базы данных SQLite:

Execute queriesExecute queriesExecute queries

Шаг 3: Управление настройками вашего приложения

Чтобы просмотреть SharedPreferences вашего приложения, откройте вкладку Resources окна Developer Tools и выберите LocalStorage. Вы увидите имена файлов, которые ваше приложение использует для хранения настроек. При нажатии на файл отображаются пары ключ-значение, хранящиеся в этом файле:

View preferencesView preferencesView preferences

Вы даже можете редактировать значения, хранящиеся в файле:

Edit preferencesEdit preferencesEdit preferences

Обратите внимание, что любые изменения, внесенные вами в значения, являются постоянными.

4. Использование dumpapp

Шаг 1: Загрузка dumpapp

dumpapp - мощная утилита, которая позволяет вам управлять вашим Android-приложением из командной строки. Вы можете получить ее, клонируя репозиторий Stetho:

bash git clone https://github.com/facebook/stetho

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

Шаг 2: Использование плагинов

Чтобы просмотреть список доступных плагинов, перейдите в каталог stetho/scripts и выполните следующую команду:

bash ./dumpapp -l

Результат выглядит примерно так:

All default pluginsAll default pluginsAll default plugins

Давайте используем плагин с именем prefs. Этот плагин используется для просмотра и редактирования значений, хранящихся в SharedPreferences вашего приложения. Например, следующая команда перечисляет все пары ключ-значение, хранящиеся в SharedPreferences вашего приложения:

bash ./dumpapp prefs print

Результат выглядит примерно так:

List of preferencesList of preferencesList of preferences

Шаг 3. Создание настраиваемого плагина.

Пользовательские плагины dumpapp - это просто классы Java, которые реализуют интерфейс DumperPlugin. Давайте создадим простой плагин, который печатает имя пакета тестируемого приложения.

Создайте новый класс внутри класса MyApplication MyDumperPlugin. После переопределения методов интерфейса DumperPlugin ваш класс должен выглядеть следующим образом:

```java class MyDumperPlugin implements DumperPlugin { @Override public String getName() { }

Метод 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. Создание пользовательского модуля Plugins.

Плагин, созданный на предыдущем шаге, не будет доступен для Stetho, если вы не создадите собственный поставщик плагинов и не используете его при инициализации Stetho. Пользовательский поставщик плагинов - это класс, реализующий интерфейс DumperPluginsProvider.

Давайте создадим собственный поставщик плагинов MyDumperPluginsProvider. Создайте этот класс внутри класса MyApplication. После переопределения единственного метода интерфейса DumperPluginsProvider ваш класс должен выглядеть следующим образом:

```java class MyDumperPluginsProvider implements DumperPluginsProvider { @Override public Iterable get() {

Поскольку метод get возвращает Iterable, все, что вам нужно сделать, это создать список, добавить свой настраиваемый плагин в список и вернуть список. Код для этого будет выглядеть так:

```java // Create a list ArrayList plugins = new ArrayList<>();

// Add one or more custom plugins plugins.add(new MyDumperPlugin());

// Return the list return plugins; ```

Однако, поскольку ваш Iterable вашего пользовательского плагинов не включает плагины по умолчанию, вы не сможете использовать их во время работы dumpapp. Если вы хотите использовать как пользовательские, так и стандартные плагины, вы должны добавить плагины по умолчанию в свой ArrayList. Чтобы получить список плагинов по умолчанию, вы должны вызвать метод get провайдера плагинов, возвращаемый методом defaultDumperPluginsProvider.

```java // Add default plugins to retain original functionality

for(DumperPlugin plugin:Stetho.defaultDumperPluginsProvider(MyApplication.this).get()){ plugins.add(plugin); } ```

Теперь ваш пользовательский поставщик плагинов готов. Чтобы использовать его, перейдите к методу onCreate и передайте его экземпляр вызову enableDumpapp:

java initializerBuilder.enableDumpapp(new MyDumperPluginProvider());

Шаг 5: Использование настраиваемого плагина

Перечислите все доступные плагины снова, используя вызов dumpapp -l. Вы увидите имя своего настраиваемого плагина в списке:

Custom plugin in the listCustom plugin in the listCustom plugin in the list

Чтобы запустить его, выполните следующую команду:

bash ./dumpapp my_plugin

Он должен напечатать имя пакета вашего приложения:

Prints package namePrints package namePrints package name

Заключение

В этом уроке вы узнали, как использовать Stetho в своих проектах Android. Вы также узнали, как использовать интерфейс командной строки, dumpapp и инструменты разработчика Google Chrome для отладки ваших приложений. К настоящему моменту вы, должно быть, поняли, что, хотя Stetho не может полностью заменить отладчик Android Studio, он определенно предлагает функции, которые могут значительно улучшить вашу отладку.

Чтобы узнать больше о Stetho, обратитесь к коду и документации, которые доступны в репозитории GitHub.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Scroll to top
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.