Android debugging

Содержание

Общая информация об отладке в Android Studio

Android debugging

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

Когда вы разрабатываете приложение, то студия собирает отладочную версию программы, соединяется с устройством/эмулятором, устанавливает и запускает её.

Обычно для запуска приложения вы используете значок с зелёным треугольником Run (Shift+F10) на панели инструментов. Для отладки следует нажимать соседнюю кнопку Debug (Shift+F9) с изображением жучка .

Остальные действия будут идентичными – вам надо выбрать устройство, на котором будет происходить отладка.

Android Studio откроет окно Debug. Можно открыть его вручную через кнопку 5: Debug в нижней части среды разработки. Окно показывает потоки и переменные в вкладке Debugger, статус устройства в вкладке Console и системные логи в вкладке Logcat.

Если приложение уже запущено, то необязательно его перезапускать для работы в отладочном режиме. Вы можете нажать на кнопку Attach debugger to Android proccess , которая идёт сразу после кнопку с жучком.

В вкладке Logcat вы видите системные сообщения, включая сообщения от вашей программы, если вы использовали их своём коде. Для записи логов используется класс Log. Подробнее о нём в отдельной статье.

Логи можно просматривать также через панель Android DDMS (Dalvik Debug Monitor Server) – запускается через кнопку 5: Android в нижней части студии. В Android DDMS вы можете просматривать логи только нужного процесса, если нажмёте на кнопку Only Show Logcat from Selected Process .

Точки останова (Breakpoints)

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

Откройте свой исходник, определите строку кода, в которой хотите поставить точку останова и щёлкните по ней. Строка окрасится в жёлтый цвет. Щёлкните в левой части редактора кода в серой области. В этом месте появится красный кружок (повторный щелчок уберёт его), а строка примет розовый цвет. Точку останова можно ставить не только для исполняемого оператора, но и на комментарии.

Запустите приложение в отладочном режиме. Когда выполнение программы дойдёт до установленной точки останова, то студия прекратит дальнейшее выполнение приложения, кружок станет ещё более красным и строка будет выделена. И затем вы можете попытаться выявить причину ошибки.

Для просмотра всех точек останова и их настроек щёлкните на кнопке View Breakpoints в левой части панели Debug . Появится отдельное диалоговое окно.

После того, как вы установили точки останова, щёлкните кнопку Rerun для повторного запуска программы. Когда выполнение кода дойдёт до установленной точки останова, студия выполнит паузу и подсветить строку кода. Панель Debug позволит проверить переменную и выполнить код шаг за шагом.

Для проверки переменных раскройте список в панели Variables. Если панель не видна, то щёлкните кнопку Restore Variables

Для вычисления выражения в текущей точки щёлкните кнопку Evaluate Expression

Для перехода на следующую строку кода без выполнения щёлкните кнопку Step Over .

Для перехода на первую строку кода внутри метода щёлкните кнопку Step Into .

Для перехода на следующую строку за пределами текущего метода щёлкните кнопку Step Out .

Чтобы продолжить работу приложения в нормальном режиме, нажмите кнопку Resume Program .

Отслеживание потребления памяти

Студия позволяет также отслеживать потребления памяти объектами и показывает, какие классы и потоки используют объекты.

Запустите студия в отладочном режиме, щёлкните 6: Android, чтобы открыть панель Android DDMS. Выберите вкладку Devices | logcat, выберите ваше устройство из выпадающего списка, выберите вашу программу по имени пакета из списка запущенных программ.

Щёлкните кнопку Start Allocation Tracking . Начинайте пользоваться программой.

Повторно нажмите на предыдущую кнопку Stop Allocation Tracking. Студия покажет объекты, выделенные системой для работы.

Android Device Monitor

Для анализа потребления памяти, сетевого трафика, поведения приложения при входящих звонках можно использовать графический инструмент Android Device Monitor. Щёлкните кнопку Monitor на панели инструментов. Android Device Monitor откроется в новом окне. Опытные программисты увидят знакомое окно, когда работали с Eclipse.

Скриншоты и видео

Вы можете делать скриншоты и видео работающего приложения.

Запустите приложение и откройте панель 6: Android. Щёлкните кнопку Screen Capture в левой части панели.

По такому же принципу можно сделать видеозапись через кнопку

Реклама

Источник: http://developer.alexanderklimov.ru/android/debug/basic.php

Android Remote Debugger — удаленная отладка Android приложений

Android debugging

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

В этой статье я хочу поговорить об отладке именно Android приложений. Android Studio предоставляет нам различные инструменты профилирования, такие как:

  • logcat – инструмент для просмотра логов приложения, в том числе и исключений при краше. Его можно использовать как в Android Studio, так и в терминале, через adb;
  • Android profiler – мощный инструмент, который позволяет просматривать все сетевые запросы, загрузку процессора, памяти и батареи.

Также существует множество сторонних решений, позволяющих просматривать сетевой трафик, базы данных, shared preferences и др.
У всех этих инструментов есть преимущества и недостатки. К их минусам можно отнести следующее:

  • множество зависимостей различных инструментов;
  • сложность использования – как правило, все инструменты ориентированы на разработчиков и неудобны другим участникам команды, например, тестировщикам, аналитикам или back-end разработчикам. Обычно последним приходится дергать android-разработчиков, чтобы просмотреть какие-либо логи;
  • обязательное подключение телефона к компьютеру, например, через usb-кабель.

На данный момент я не нашел ни одного решения, которое объединяло бы различные инструменты отладки и устраняло бы вышеуказанные проблемы. Поэтому я разработал собственное решение.

Android Remote Debugger

Мое решение является очень простым в использовании, так как позволяет отлаживать приложение прямо в браузере, без подключения Android устройства к компьютеру. Данное решение включает в себя четыре раздела для отладки:

  • Logging — просмотр логов приложения, включая краши;
  • Database — просмотр и редактирование записей в базе данных;
  • Network — просмотр всех сетевых запросов и ответов в удобном формате;
  • SharedPreferences – просмотр и редактирование данных SharedPreferences.

Работа с отладчиком

Для работы с отладчиком нужно сделать следующее:

  • подключить и проинициализировать библиотеку;
  • запустить приложение;
  • вы получите уведомление в панели уведомлений, типа http://xxx.xxx.x.xxx:8080. Просто откройте браузер на любом компьютере, подключенный к той же сети (Wi-Fi или LAN) что и Ваше Android устройство и перейдите по указанной ссылке;
  • Вам будет предложено четыре раздела. Выберите нужный и начните работать с данными подключенного приложения.

Ниже представлены скриншоты некоторых разделов:

Описание разделов отладки

Для инициализации библиотеки необходимо вызвать AndroidRemoteDebugger.init(applicationContext) в коде приложения. Также можно указать дополнительные параметры с помощью AndroidRemoteDebugger.Builder:

AndroidRemoteDebugger.init( new AndroidRemoteDebugger.Builder(applicationContext) .enabled(boolean) // управление включением .disableInternalLogging() // отключить внутренние логи Android Remote Debugger .disableJsonPrettyPrint() // отключение форматирования json в разделах `Logging` и `Network` .disableNotifications() // отключить показ уведомлений статуса работы Android Remote Debugger .excludeUncaughtException() // исключить печать логов при краше приложения .port(int) // использовать другой порт, отличный от 8080 .enableDuplicateLogging() // все логи из раздела `Logging` будут также напечатаны в logcat .enableDuplicateLogging(new Logger() { // callback для получения всех логов из раздела `Logging` @Override public void log(int priority, String tag, String msg, Throwable th) { } }) .build());

При инициализации библиотеки в Вашем приложении запускается локальный сервер. В качестве веб-сервера используется NanoHTTPD. Затем Вы получаете уведомление об успешном или неуспешном запуске.

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

Порт Вы также можете указать заранее в AndroidRemoteDebugger.Builder.

Как подключить Android Remote Debugger

Добавьте в корневой build.gradle следующий репозиторий:

allprojects { repositories { … maven { url 'https://jitpack.io' } }}

Добавьте в build.gradle вашего модуля следующую зависимость:

dependencies { implementation 'com.github.zerobranch:android-remote-debugger:1.0.0'}

Итог

Android Remote Debugger:

  • позволяет выполнять удаленную отладку через браузер;
  • включает в себя сразу несколько инструментов отладки;
  • ориентирован не только на разработчиков;
  • для работы не требует подключения Android устройства к компьютеру;
  • прост в использовании.

GitHub

Подробные инструкции по работе и подключению библиотеки можно найти на GitHub

Источник: https://habr.com/ru/post/488514/

Android Studio Debugging: Базовые понятия и возможности

Android debugging

Я уверен что 95% читателей этой публикации прекрасно знают что такое отладка приложения, и, говоря по простонародному, уже не раз дебажили свои приложения в поисках ошибки или проверки работы своей программы.

И все же краткое вступление с теорией будет. Поэтому если вы знаете что такое отладка, то пропустите этот раздел и листайте вниз, или сразу перейдите к второй части.

Отладка или debugging приложения — это процесс поиска и исправление ошибок или неправильного поведения кода.

Например: при получении ответа с сервера и его обработке внутри вашего приложения происходит непонятная ошибка и на экране выводится устаревшая информация вместо новой. Чтоб разобраться что происходит и найти ошибку мы можем при помощи отладки поставить выполнение программы на паузу в нужном нам месте и посмотреть содержимое наших объектов и переменных.

Именно для этого и нужна отладка: приостанавливать выполнение кода в нужном месте и изучении состояния приложения.

Основы отладки

В этой статье я расскажу базовые вещи и возможности отладчика в Android Studio. В следующей статье я постараюсь рассказать о некоторых тонкостях и продвинутых возможностях работы с отладкой.

Как запустить отладку — Android Debugger

Запустить отладчик в Android Studio можно двумя способами:

Первый способ: Запустить приложение в режиме отладки. Стоит использовать если нужно отладить именно запуск приложения. Для отладки конкретного действия-экрана лучше использовать второй способ, так быстрее.

Нажать на иконку с жучком или клавиши (⌃+D) и выбрать в диалоге устройство на котором запустить отладку приложения.

Второй способ: Подключить Android Debugger к уже запущенному процессу. Удобно, потому что бывает нужно продебажить конкретный экран или нажатие на кнопку, а запускать каждый раз приложение в режиме отладки долго и неудобно.

Как остановить отладку

Остановить отладку можно здесь:

Верхняя панель действий, (⌘+F2)

Или здесь:

Вкладка Debug, обычно находится снизу Android Studio, (⌘+F2)

Breakpoins или точки остановки

Breakpoint или точка остановки — специальный флаг для Android Debugger-a который означает “Останови выполнение программы в этом месте”.

Две точки остановки во время отладки приложения

На скриншоте выше видно две точки остановки. Интересно, что они сообщают некую информацию о себе: одна из них с галочкой а другая с крестиком.

Галочка значит что эта точки остановки активная и кода выполнение кода подойдет к этой строке выполнение программы будет остановлено.

Крестик обозначает что выполнение кода на этой строке невозможно (например у пустой строки или, как в примере выше, у ключевого слова)

Как сделать точку остановки — breakpoint

Для добавления точки остановки нужно кликнуть на серой области напротив строки с кодом или нажать ⌘+F8.

Выбор точки остановки — set breakpoint

Практически все современные Android приложения используют Kotlin и RxJava. И при типичном использовании этой связки языка и библиотеки при добавлении точки остановки иногда появляется такой выбор:

Android Studio предлагает нам выбрать где именно мы хотим добавить точку остановки — момент выполнения метода subscribe в Rx-цепочке или выполнение кода внутри лямбды, которую мы передаем в subscribe. А можно поставить точку остановки сразу для двух действий (All).

Примечание для новичков: Если вы хотите отладить действие, которое вы планируете выполнить внутри метода subscribe, и не поняли в примере выше где именно вам поставить точку остановки — вам нужно поставить ее внутри лямбда выражения.

Просмотр информации во время отладки приложения

Остановка выполнения приложения при достижении breakpoint-a. Синим цветом Android Studio подсвечивает на какой именно точке выполнение программы было остановлено.

Подсказки от Android Studio

Подсказки от Android Studio во время отладки — приятный бонус.

В них отображается полезная информация, например значение локальных переменных, аргументов и объектов (для них выводится информация из метода toString() соответствующего объекта).

Стек вызова методов — Frames

Стек. Синим цветом подсвечивается текущий метод.

В вкладке Debugger во время остановки выполнения приложения выводится стек вызова методов.

Благодаря этому можно понять — откуда мы попали в текущий метод.

Желтым цветом подсвечиваются классы Android SDK или библиотек — там, где у нас нет доступа к исходному коду.

Вывод информации о текущем потоке

Формат вывода информации о методе такой:

  • Название метода — methodThree
  • Номер строки с точкой остановки— 22
  • Название класса — DebugStateDemoObject
  • package класса

Просмотр информации состояния объекта и переменных — Variables

Вывод состояния во время остановки

Помимо панели со стеком вызова методов в вкладе Debug также находится и панель с выводом текущего состояния и значениями локальных переменных.

На первой строке выводится информация об объекте, чей метод был вызван и остановлен для отладки. Интересно, что по двойному клику на это строчку можно будет увидеть дополнительную информацию о состоянии текущего класса.

На второй строке выводится информация о локальной переменой, в данном случае это еще и аргумент переданный в этот метод.

Изменение значения переменой “на лету”

Значение локальной переменной можно изменить нажав правой клавишей мышки -> Set value… или по нажатию на F2.

Для применения изменений нажмите Enter

Стек методов + состояние объекта

Стоит запомнить, что состояние объекта при переходе по стеку методов не меняется. То есть, при просмотре методов из стека в разделе с информацией о состоянии объекта и локальных переменных, он же Variables, будет показано самое последнее состояние объекта не зависимо от просматриваемого метода.

Для иллюстрации этого давайте проведем эксперимент. Итак у нас есть следующий код:

Давайте добавим точку остановки на 19 строку внутри метода methodThree() и запустим этот код в режиме отладки.

Но перед этим поясню что мы хотим уточнить: если значения объектов сохраняются в стек, то при переходе в стеке вызова методов внутри вкладки Debug значение поля counter будет меняться. Если состояние объекта не сохраняется, то counter всегда будет с его актуальным (последним) значением.

Обратите внимание на значение counter в вкладке Variables

Управление процессом отладки

Интересующая нас панель управления — ряд кнопок слева

Во время отладки Android Debugger в Android Studio позволяет нам управлять процессом отладки.

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

Продолжить выполнение программы

Когда во время отладки выполнение кода программы подходит к строке на которой установлен Breakpoint (точка остановки), выполнение программы приостанавливается. По нажатию на эту кнопку выполнение программы будет выполнятся дальше.

Приостановить выполнение программы

Есть возможность и просто приостановить приложение во время отладки поставив его на паузу. Сам этот режим, его цель и как он работает я, если честно, не очень понял.

Я сделал эксперимент с бесконечным циклом, внутри которого инкрементяться 3 переменных типа Long, и в случайный момент делал паузу: выполнение кода останавливалось на строке с объявлением while(true), я даже видел значения переменных, но на этом все.

Остановка отладки

Саму отладку можно остановить по нажатию на кнопку стоп. В последнее время останавливается не только отладка но и приложение; грустно.

Просмотр и настройка breakpoints (точек остановок) в проекте

Эта возможность архи полезная: во первых здесь можно просмотреть все breakpoints в проекте. Во-вторых здесь можно отключить/включить выборочно нужные нам breakpoints. Мы еще вернемся к возможностям этой функции позже, в следующей статье.

Так выглядит окно с просмотром всех breakpoints на проекте

Приглушить все breakpoints

А еще можно приглушить (Mute) все наши точки остановки по нажатию на эту кнопку.

Интересно что во время отладки по нажатию на эту кнопку точки остановки действительно не отрабатывают, но у меня после отключения этой возможности точки оставались “приглушенными” и дальше.

Может быть баг Android Studio а может и эмулятора — я этого не понял и выглядит это странно. Если кто-то мне подскажет что происходит я буду очень рад!

Получение dump-а потоков приложения

Есть возможность получить dump с состоянием всех потоков в процессе и даже вывод стектрейса с местом выполнения кода. Выглядит это так:

Этот режим будет полезен при отладке сложных, многопоточных приложений.

Настройка отображения данных и UI вкладки Debug

Первая иконка может восстановить разметку вкладки Debug в первоначальное состояние (если чото сдвинули мышкой неудачно)

Вторая кнопка откроет меню в котором можно настроить отображение информации.

Третья кнопка предлагает закрепить текущую вкладку в разделе Debug а четвертая кнопка, та что крестик, закроет вкладку соотвественно.

Навигация по коду

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

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

Давайте разберемся с этим!

Перейти к текущей точке остановки

По нажатию на эту кнопку курсор и фокус будет перемещены на текущую точку остановки. Удобно если потерялся.

Переход к следующей строке

Переход к следующей строке кода внутри текущего метода, не заходя в вызываемый метод (если он вызывается).

Переход дальше + принудительно

Переход в вызываемый метод к его первой строке.

Красная стрелка — тоже самое, но делает это принудительное, если по какой то причине просто перейти нельзя.

Выход из текущего метода

Выход из текущего метода на следующую строку кода

Выполнить до курсора

А еще можно выполнить код до той строки, на которой находится курсор. Курсор перед этим можно перемещать до куда нам нужно. Очен здоровская возможность!

“,”author”:”Artem Shevchenko”,”date_published”:”2019-01-11T21:34:04.511Z”,”lead_image_url”:”https://miro.medium.com/max/1200/1*kuybtoNbwG7eagJINv_TDg.png”,”dek”:null,”next_page_url”:null,”url”:”https://medium.com/@artem_shevchenko/android-studio-debugging-%D0%B1%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B5-%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D0%B8%D1%8F-%D0%B8-%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8-658ee6dcc641″,”domain”:”medium.com”,”excerpt”:”Часть первая, основы”,”word_count”:1332,”direction”:”ltr”,”total_pages”:1,”rendered_pages”:1}

Источник: https://medium.com/@artem_shevchenko/android-studio-debugging-%D0%B1%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B5-%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D0%B8%D1%8F-%D0%B8-%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8-658ee6dcc641

Как установить ADB driver (Android Debug Bridge Utility)

Android debugging

ADB (Android Debug Bridge Utility) это командная строка включенная в Android SDK. ADB позволяет управлять Вашим устройством через USB, копировать файлы, устанавливать и удалять приложения и многое другое. ADB позволяет использовать некоторые хитрости Android.

Шаг 1: установка Android SDK

Перейдите на страницу загрузки Android SDK и прокрутите страницу вниз до “SDK Tools Only”. Загрузите ZIP файл для вашей ОС и распакуйте архив.

Запустите exe файл SDK Manager и снимите галочки со всех пунктов, кроме “Android SDK Platform-tools”. Если вы используете смартфон Nexus, то вы также можете установить галочку на пункте “Google USB Driver”, чтобы загрузить драйвера. Нажмите на кнопку установки. Произойдет загрузка и установка компонентов, в том числе ADB и другие утилиты.

Когда установка будет завершено можете закрыть SDK manager.

Внимание! В данный момент установка происходит следующим образом:
Перейдите на страницу загрузки Android Studio, пролистайте вниз до раздела «Get just the command line tools» и скачайте архив для соответствующей версии ОС (в нашем случае это Windows).

Разархивируйте скачанный архив, например, в корень диска C.

Взаимодействие с SDK Manager осуществляется через командную строку. Здесь Вы можете узнать все команды, но мы остановимся на главных.

Чтобы запустить SDK Manager зайдите в папку, куда Вы распаковали содержимое архива > tools > bin и удерживая клавишу Shift нажмите правую кнопку мыши на свободном участке и выберите «Открыть окно команд», если Вы используете версию, отличную от Windows 10. Или запустите командную строку и укажите рабочую директорию. В моем случае это:

cd C:\sdk-tools-windows-3859397\tools\bin

view sourceprint?1.cd C:\sdk-tools-windows-3859397\tools\bin

Введите команду sdkmanager и нажмите Enter, чтобы увидеть все доступные параметры. Но нас интересует следующая команда:

sdkmanager “platform-tools” “platforms;android-26”

Это команда установит platform tools (включая adb и fastboot) и инструменты SDK для API 26, что соответствует Android версии 8.x. Полный список версий Android и соответствующих ему API описан ниже:

  • Android 1.0 — API 1
  • Android 1.1 — API 2
  • Android 1.5 — API 3
  • Android 1.6 — API 4
  • Android 2.0 / 2.1 — API 5, 6, 7
  • Android 2.2 — API 8
  • Android 2.3 — API 9, 10
  • Android 3.0 / 3.1 / 3.2 — API 11, 12, 13
  • Android 4.0 — API 14, 15
  • Android 4.1 / 4.2 / 4.3 — API 16, 17, 18
  • Android 4.4 — API 19,20
  • Android 5.0 / 5.1 — API 21, 22
  • Android 6.0 — API 23
  • Android 7.0 / 7.1 — API 24, 25
  • Android 8.0 / 8.1 — API 26

Т.к. у меня устройство с Android 7.0, то моя команда будет выглядеть так:

sdkmanager “platform-tools” “platforms;android-24”

Также Вы можете проделать этот шаг через графический интерфейс Android Studio. Для этого перейдите на страницу загрузки, скачайте, установите и запустите Android Studio.

Нажмите «Configure» и «SDK Manager».

Проверьте, чтобы стояла галочка напротив пункта «Android SDK Platform-tools» и «Google USB Drive», если Вы используете устройство Nexus. Нажмите «OK», чтобы закрыть SDK Manager, также закройте Android Studio.

Шаг 2: Включение USB Debugging

Зайдите в настройки телефона и выберите «О телефоне». Пролистайте вниз до пункта «Номер сборки» и 7 раз нажмите на этот пункт. Должно появится сообщение, что Вы вошли в режиме разработчика.

Вернитесь на главную страницу настроек, у Вас должен появится новый пункт “Для разработчиков”. Включите “Отладка по USB”. Введите пароль или PIN-код, если необходимо.

Как только это сделаете, соедините свой телефон с компьютером. У вас появится окно на телефоне с вопросом «Включить отладку по USB?». Поставьте галочку в поле «Всегда разрешать для этого компьютера» и нажмите OK.

Шаг3: Тестирование ADB и установка драйверов для Вашего смартфона

Откройте папку, где установлен SDK и там откройте папку platform-tools. Здесь хранится ADB программа. Удерживайте клавишу Shift и щелкните правой кнопкой мыши внутри папки. Выберите пункт «Открыть окно команд».

Чтобы проверить, правильно ли работает ADB, подключите устройство Android к компьютеру с помощью кабеля USB и выполните следующую команду:

adb devices

Вы должны увидеть устройство в списке. Если устройство подключено к компьютеру, но оно не отображается в списке, то необходимо установить ADB driver для Вашего устройства.

На сайте производителя Вашего устройства должны быть соответствующие файлы. Например для устройств Motorola их можно скачать здесь, для Samsung здесь, для HTC драйвера входят в программу HTC Sync Manager.

Вы также можете найти необходимые файлы на сайте XDA Developers без дополнительных программ.

Вы также можете установить Google USB Driver из папки Extras в окне SDK Manager, как мы упоминали в первом шаге.

Если вы используете Google USB driver, то придется заставить Windows использовать установленные драйверы для вашего устройства.

Откройте Диспетчер устройств (правой кнопкой мыши на ярлыке Мой компьютер и выбрать Свойства — Диспетчер устройств), найдите в списке свое устройство. Нажмите правой кнопкой на нем и выберите Свойства.

Перейдите на вкладку Драйвер и нажмите кнопку Обновить. Выберите «Выполнить поиск драйверов на этом компьютере».

Найдите Google USB Driver в папке Extras с установленным SDK, и выберите папку google\usb_driver и нажмите Далее. Как только драйвера установятся, пробуйте еще раз выполнить команду adb devices. Если все сделано правильно и драйверы подходят, то Вы увидите свое устройство в списке. Поздравляем, Вы смогли установить ADB driver.

Полезные ADB команды

ADB предлагает некоторые полезные команды:

adb install C:\package.apk

— Установить приложение на телефон, находящееся по пути C:\package.apk на компьютере;

adb uninstall package.name

— Удалить приложение с именем package.name с устройства. Например, команда com.rovio.angrybirds удалит игру Angry Birds;

adb push C:\file /sdcard/file

— Помещает файл с компьютера на устройство. Данная команда отправит файл C:\file на компьютере на устройство по пути /sdcard/file&lt.

adb pull /sdcard/file C:\file

— Работает как предыдущая команда, но в обратном направлении.

Источник: https://zen.yandex.ru/media/android_example/kak-ustanovit-adb-driver-android-debug-bridge-utility-5ed11a8c52d2d279d5f333a6

Декомпиляция и отладка Android-приложений

Android debugging

Декомпиляция и отладка Android-приложений

В статье будет рассказано о том, как подключить отладчик к Android-приложению и пошагово пройти через вызываемые методы, используя информацию, полученную после декомпиляции приложения.

Eric Gruber

В статье будет рассказано о том, как подключить отладчик к Android-приложению и пошагово пройти через вызываемые методы, используя информацию, полученную после декомпиляции приложения. Хорошая новость в том, что для отладки не требуются привилегии суперпользователя.

Описанные техники могут быть очень кстати во время пентестов мобильных приложений, поскольку мы можем «проникнуть» в код во время работы программы, получить и записать информацию, к которой обычно у нас нет доступа. Например, можно перехватить трафик перед шифрованием и на лету получить ключи, пароли и любую другую ценную информацию.

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

Требования к тестовой среде:

В статье будет использоваться следующая конфигурация: Windows 8, Android Studio и IntelliJ IDEA. Устройство: Nexus 4 с Android версии 4.4.4. Рекомендую все утилиты добавить в переменную окружения PATH, чтобы облегчить и ускорить доступ к этим инструментам.

Android application package (APK), используемый в статье, можно скачать отсюда: com.netspi.egruber.test.apk.

Настройка устройства

Инструкция ниже поможет вам подготовить устройство для экспериментов.

Активация раздела Developer Options

Для начала на Android-устройстве должна быть разрешена отладка через USB (опция USB debugging), что позволит «общаться» с девайсом при помощи инструментов из набора Android SDK.

Однако перед этим необходимо активировать раздел Developer options.

На устройстве зайдите в раздел Settings > About Phone и кликните несколько раз на пункт Build Number, после чего должно появиться сообщение о том, что раздел Developer options активирован.

Рисунок 1: Для того чтобы активировать раздел Developer options, необходимо несколько раз кликнуть на Build number

Разрешение отладки через USB

Чтобы разрешить отладку через USB-порт, зайдите в раздел Settings > Developer options и отметьте флажок напротив USB debugging.

Рисунок 2: Включение опции USB debugging

Подключение устройства и запуск ADB

После подключение устройства к компьютеру через USB-порт, должно появиться сообщение «USB debugging connected on the device». Также следует проверить, можно ли подключиться к устройству при помощи приложения Android Debug Bridge (ADB), входящего в состав Android SDK (пакет Android SDK Platform-tools). В командной строке введите следующую команду:

adb devices

Устройство должно отобразиться в списке.

Рисунок 3: Список подключенных устройств

Если устройство не отобразилось в списке, то наиболее вероятная причина в некорректно установленных драйверах (в Windows). В зависимости от устройства драйвер можно найти либо в Android SDK, либо на сайте производителя.

Проверка приложения на возможность отладки

Перед отладкой Android-приложений вначале необходимо проверить, есть ли такая возможность. Проверку можно выполнить несколькими способами.

Первый способ – запустить Android Device Monitor, входящий в состав Android SDK (в папке tools). В Windows файл называется monitor.bat. При открытии Android Device Monitor устройство отобразится в разделе Devices.

Рисунок 4: Приложение Android Device Monitor

Если какое-либо приложение на устройстве можно отлаживать, это приложение также отобразится в списке. Я создал тестовую программу, но список пуст, поскольку программу отлаживать нельзя.

Второй способ проверить приложение на возможность отладки – исследовать файл AndroidManifest.xml из пакета приложения (APK, Android application package). APK представляет собой zip-архив, содержащий всю информацию, необходимую для запуска приложения на Android-устройстве.

Всякий раз, когда приложения загружается из Google Play Store, также загружается и пакет приложения. Все загруженные APK-файлы обычно хранятся на устройстве в папке /data/app.

Если у вас нет прав суперпользователя, вы не сможете получить список файлов из директории /data/app. Хотя, если вы знаете имя APK-файла, можете скопировать его при помощи утилиты adb.

Чтобы узнать имя APK-файла, введите следующую команду:

adb shell

Появится командная строка устройства. Затем введите следующую команду:

pm list packages -f

Отобразится список всех пакетов на устройстве.

Рисунок 5: Перечень пакетов на устройстве

Глядя на список, находим тестовое приложение.

Рисунок 6: Пакет созданного тестового приложения (выделено белым)

Теперь необходимо скопировать файл пакета. Открываем шелл и вводим следующую команду:

adb pull /data/app/[.apk file] [location]

Рисунок 7: Копируем APK-файл с устройства в систему

Теперь нужно открыть файл пакета и исследовать содержимое AndroidManifest.xml. К сожалению, мы не можем просто так распаковать архив, поскольку APK-файл закодирован в бинарном формате.

Для раскодировки чаще всего используется утилита apktool, хотя я использую APK Studio, поскольку у этого приложения дружелюбный графический интерфейс.

Далее в статье будет рассказываться об APK Studio.

В APK Studio кликните на маленькую зеленую иконку, задайте имя проекту и укажите путь к APK файлу. Затем укажите пусть для сохранения проекта.

Рисунок 8: Создание нового проекта в APK Studio

После открытия APK выберите файл AndroidManifest.xml и посмотрите параметры тега application. Если флаг android:debuggable отсутствует (или присутствует, но установлено значение false), значит, приложение отлаживать нельзя.

Рисунок 9: Содержимое файла AndroidManifest.xml

Модификация файла AndroidManifest.xml

При помощи утилиты apktool или APK Studio мы можем модифицировать файлы и упаковывать содержимое обратно в пакет. Сейчас мы изменим файл AndroidManifest.xml так, чтобы приложение можно было отлаживать. Добавляем внутрь тега application строчку android:debuggable=”true”.

Рисунок 10: Изменяем содержимое тега application

После добавления флага кликаем на иконку «молоток» и заново собираем пакет. Пересобранный пакет будет находиться в директории build/apk.

Рисунок 11: Повторная сборка пакета завершилась успешно

После пересборки пакет подписывается и его можно заново установить на устройстве (все Android-приложения должны быть подписаны). Большинство приложений не проверяет сертификат, при помощи которого происходит подпись. В противном случае необходимо изменить код, выполняющий эту проверку.

Теперь нужно установить пересобранный пакет. Вначале удаляем старое приложение при помощи следующей команды:

adb pm uninstall[package name]

Затем устанавливаем новый пакет:

adb install [.apk file]

Также можно удалить и установить пакет одной командой:

adb install -r [.apk file]

Рисунок 12: Установка пересобранного пакета

Проверьте, чтобы переустановленное приложение корректно запускалось на устройстве. Если все работает, переходим обратно в Android Device Monitor, где должно появиться тестовое приложение.

Рисунок 13: Теперь пересобранное приложение можно отлаживать

Настройка среды разработки (IDE)

Теперь к пересобранному приложению можно подцепить отладчик, но вначале нужно создать проект в среде разработки (в статье используется IntelliJ IDEA). Создаем новый проект. В поле Application name указываем произвольное имя. В поле Package name указываем имя, в точности совпадающее с иерархией папок пересобранного пакета.

Рисунок 14: Создание нового проекта в IntelliJ IDEA

Обычно имя APK-файла совпадает со структурой папок, хотя, если вы не уверены, в APK Studio проверьте иерархию директорий до папки, где находятся файлы приложений. В моем случае имя и структура папок полностью совпадают (com.netspi.egruber.test).

Рисунок 15: Иерархия директорий тестового приложения

Снимите флажок «Create Hello World Activity» и завершите создание проекта (все остальные параметры остаются по умолчанию). Новый проект должен выглядеть примерно так:

Рисунок 16: Иерархия папок и файлов нового проекта

После создания проекта нужно добавить исходный код из APK-файла для того, чтобы отладчик «знал» имена символов, методов, переменных и т. д. Хорошая новость в том, что Android-приложения можно декомпилировать практически без потери качества (исходный код будет совпадать с оригиналом). После декомпиляции исходный текст импортируется в среду разработки (IDE).

Получение исходных текстов из пакета приложения

Для начала необходимо преобразовать APK в jar-файл. Затем мы при помощи java-декомпилятора получим исходный текст приложения. Преобразование в jar будем делать при помощи утилиты dex2jar. У dex2jar есть файл d2j-dex2jar.bat, используемый для конвертирования APK в jar. Синтаксис команды довольно прост:

d2j-dex2jar.bat [.apk file]

Рисунок 17: Преобразование APK в jar

Затем открываем или перетаскиваем полученный файл в JD-GUI (это java-декомпилятор).

Рисунок 18: Структура jar-файла

Jar-файл должен отобразиться в виде иерархической структуры, внутри которой находятся java-файлы с читабельным исходным кодом. Заходим в File > Save All Sources, чтобы упаковать все исходные тексты в zip-архив.

Рисунок 19: Сохранение исходных текстов декомпилированного файла

После сохранения исходных текстов распаковываем архив в отдельную директорию.

Рисунок 20: Распакованный архив

Теперь нужно импортировать обе директории в созданный ранее проект в IDE. В IntelliJ заходим в папку src и копируем туда содержимое распакованного архива (две директории).

Рисунок 21: Обе папки скопированы в директорию src

Возвращаясь в Intellij, видим обновленный проект.

Рисунок 22: В проекте появились исходные тексты

Если мы кликнем на какой-нибудь элемент из списка, то увидим исходный текст. Как видно на скриншоте ниже (исходный текст класса LoginActivity), исходный код обфусцирован при помощи ProGuard.

Рисунок 23: Обфусцированный исходный текст класса LoginActivity

Подключение отладчика

Теперь, когда в проекте появились исходные тексты, мы можем начать устанавливать точки останова на методах и переменных. По достижению точек останова приложение будет останавливаться. В качестве примера я установил точку останова на методе (прямо в обфусцированном коде), отвечающим за обработку информации, введенной в текстовом поле.

Рисунок 24: Поставлена точка останова на обфусцированный метод

Как только появилась точка останова, подключаем отладчик к процессу на устройстве, кликнув на иконку с экраном в правом верхнем углу (на вашей IDE иконка может отличаться).

Рисунок 25: Подключаем отладчик к процессу

Далее вам будет предложено выбрать процесс, к которому нужно подключиться. Будут отображены только процессы с флагом android:debuggable=”true”.

Рисунок 26: Перечень процессов для подключения отладчика

После выбора процесса отладчик подсоединится к устройству.

Рисунок 27: Отладчик подключен к процессу, запущенному на устройстве

В текстовое поле я буду вводить число 42 (если помните, на соответствующем методе стоит точка останова).

Рисунок 28: В текстовое поле вводим число 42

После нажатия на кнопку «Enter Code» выполнение приложения прервется на точке останова, поскольку отладчик «осведомлен», какой метод вызывается на устройстве.

Скомпилированное Android-приложение содержит отладочную информацию (например, имена переменных), доступную любому отладчику, совместимому с Java Debug Wire Protocol (JDWP).

Если в приложении разрешена отладка, отладчик, совместимый с JDWP (в эту категорию попадает большинство отладчиков идущих в составе сред разработки для Java), сможет подсоединиться к виртуальной машине Android-приложения, а затем считывать и выполнять отладочные команды.

Рисунок 29: Сработала точка останова

На скриншоте ниже видно число, которое ранее мы ввели в текстовом поле.

Рисунок 30: Перечень переменных текущего экземпляра класса

Заключение

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

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

Подобные манипуляции доступны на любом Android-устройстве без привилегий суперпользователя. 

Источник: https://www.securitylab.ru/analytics/472624.php

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.