Освой Android играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
"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 на своей странице отладки.
Благодаря нашим рекомендациям у вас все будут отличные здоровые приложения.
Debugging Android Apps with Facebook's Stetho - там есть информация о дампе.