Освой Android играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Stetho — Вслушиваемся в работу приложения

"Steth-" - медицинский термин, означающий грудь. Из знакомых нам слов можно вспомнить стетоскоп. Чтобы узнать, здорова ли ваша программа, нужно её прослушать.

Stetho - библиотека с открытым исходным кодом, разработанная в Фейсбуке. Предназначена для быстрой отладки приложения. Благодаря библиотеке, приложение выглядит как веб-сайт. С помощью инструмента Chrome DevTools вы можете легко просмотреть иерархию приложения, отслеживать сетевую активность, управлять базой данных SQLite, мониторить общие настройки SharedPreferences и т.д.

Похоже, на данный момент проект заморожен.

Домашняя страница - https://github.com/facebookarchive/stetho

Добавим зависимость в Gradle:


compile 'com.facebook.stetho:stetho:1.5.1'

Если вы будете отслеживать сетевую активность, то добавьте дополнительные зависимости, учитывая используемый способ связи:


// устаревший OkHttp 2.x
compile 'com.facebook.stetho:stetho-okhttp:1.5.1' 
// OkHttp 3.x
compile 'com.facebook.stetho:stetho-okhttp3:1.5.1'
compile 'com.facebook.stetho:stetho-urlconnection:1.5.1'

Далее нужно создать класс на основе Application:


package ru.alexanderklimov.emptyactivity;

import android.app.Application;

import com.facebook.stetho.Stetho;

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        // 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(this)
        );

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

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

Для минимальной инициализации достаточно вызвать метод Stetho.initializeWithDefaults(this), но этот метод не предоставляет удобных возможностей для отладки. Поэтому лучше инициализировать отдельные дополнительные элементы библиотеки, как в примере выше.

В манифесте укажите блоку application имя созданного класса.


<application
    android:allowBackup="true"
    android:name=".MyApplication"
    ...
    />

После установки приложения на устройство или на эмуляторе запустите браузер Google Chrome и введите в адресной строке chrome://inspect. Вы увидите окно с упоминанием вашей программы. Если на устройстве был также запущен браузер, то можете увидеть дополнительные блоки для открытых вкладок. Они к примеру не относятся, я показал их для общего развития.

Нажмите на ссылку inspect, чтобы открыть отдельное окно. У окна много полезных вкладок для изучения.

Откроем к примеру вкладку Resources. Если ваше приложение использует SharedPreferences, то здесь вы можете быстро просмотреть текущие значения настроек. Для примера я создал настройки для подсчёта ворон из статьи Сохраняем настройки. На вкладке находим секцию Local Storage, разворачиваем её и видим созданный файл настроек mysettings с его содержимым.

Впрочем, можно не только просматривать содержимое, но и изменять его. Сделайте двойной щелчок в нужном поле Key или Value, чтобы внести изменения.

Можно отслеживать сетевые запросы. Возьмём пример из статьи Библиотека OkHttp и добавим перехватчик:


// OkHttp 2.x
OkHttpClient client = new OkHttpClient();
client.networkInterceptors().add(new StethoInterceptor());
// остальной код


// OkHttp 3.x
new OkHttpClient.Builder()
    .addNetworkInterceptor(new StethoInterceptor())
    .build();

Открываем вкладку Network и делаем в приложении запрос на сайт. В окне отладки сразу отобразится информация. Можно даже просмотреть полученный текст и HTTP-заголовки.

Следующая возможность - просмотр базы данных. Создаём базу данных. Снова открываем вкладку Resources и находим секцию Web SQL. Наша база данных как на ладони.

Более того, можно делать запросы. Нужно перейти в раздел с названием базы данных. Появится окно с приглашеним, в котором следует ввести текст запроса. Во время ввода даже появляются подсказки.

Последняя возможность - просмотр дампа памяти. Можно найти информацию в интернете на этот счёт. Для продвинутых программистов.

Пр каждой компиляции окно настроек будет терять связь. Ничего страшного. Просто закройте это окно и заново щёлкните по ссылке inspect на своей странице отладки.

Благодаря нашим рекомендациям у вас все будут отличные здоровые приложения.

Steth-cat

Дополнительные материалы

Debugging Android Apps with Facebook's Stetho - там есть информация о дампе.

Реклама