Программирование Android Отладка разрабатываемого приложения Android Fri, December 13 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Отладка разрабатываемого приложения Android Печать
Добавил(а) microsin   

Отладку программы для Android можно производить несколькими способами - с помощью эмулятора, через подключение USB и через сетевое подключение TCP/IP (например по Wi-Fi).

[Отладка с помощью эмулятора]

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

[Отладка через USB]

Описание процесса запуска отладки под Windows XP в Android Studio, по шагам:

1. Сначала нужно разрешить режим отладки USB. Войдите в Настройки -> Параметры разработчика -> Поставьте галочку "Отладка USB". Высветится предупреждение, подтвердите положительно - "Да".

Android-USB-debug-developer-settings Android-USB-debug-enable

2. Нужно на компьютере установить драйвер Android ADB Driver. Это можно сделать, если скачать и запустить программу UsbDriverTool-sfx.exe [4,5]. После запуска укажите папку, куда нужно распаковать утилиту, например c:\temp, утилита распакуется в папку c:\temp\UsbDriverTool\. В папке c:\temp\UsbDriverTool\AndroidUsb\ будет находиться драйвер Android ADB Driver, который нам нужен.

3. Подключите Ваш смартфон с Android через USB к компьютеру. Внимание, это важно: на смартфоне должен определиться режим "Подключен как камера (PTP)", ни в коем случае не как USB Mass Storage устройство/флешка и не Мультимедиа-устройство MTP. Компьютер обнаружит новое устройство, запустится мастер установки драйвера. Подсуньте ему папку c:\temp\UsbDriverTool\AndroidUsb.

Android-USB-debug-camera-mode

Установить драйвер можно также с помощью утилиты UsbDriverTool.exe, которая находится в архиве [5]. Запустите эту программу при подключенном через USB Android-устройстве. На стартовом экране будет отображено устройство SAMSUNG_Android:

Android-UsbDriverTool1

Выберите строку с устройством Android и нажмите кнопку Change driver type. Появится следующий экран, где будет предложено выбрать тип драйвера.

Android-UsbDriverTool2

Выберите Android ADB Driver и нажмите Install. Через несколько секунд драйвер установится и будет готов к работе.

Android-UsbDriverTool3 Android-UsbDriverTool4 Android-UsbDriverTool5

4. Запустите Android Studio. Откройте Ваш проект программы (или создайте новый). Зайдите в меню Run -> Edit Configurations..., слева в дереве настроек выберите Android Application -> MyApplication (Ваше созданное приложение) -> справа выберите в Target Device радиокнопку "USB Device", нажмите OK.

5. Запустите приложение на отладку.

Android-Studio-Hello-World-running

Если в консоли отладки видите сообщение "Waiting for device. USB device not found", и в Android Debug Monitor Вы получаете сообщения типа "Unable to debug device: samsung-gt_n7000-0019a2fe5212ce" или "Missing forwarded port for 0019a2fe5212ce" - переподключите устройство к USB и попробуйте заново запустить отладку.

[Отладка через Wi-Fi]

ADB можно запустить по каналу связи TCP/IP, для чего можно использовать подключение Wi-Fi. Отладка через Wi-Fi является необычайно удобной. Не нужны провода, и отладка программы запускается очень быстро, так же как и при отладке через USB. Означает, что при отладке можно подключить устройство через коннектор USB к зарядке или куда-то еще. Это особенно удобно, когда отлаживаемых устройств Android у Вас больше, чем портов USB, и когда Вы хотели бы тестировать Ваши последние сборки через сеть, с помощью других людей. Подробнее про adb можно прочитать в [7]. Здесь приведено пошаговое руководство, как запустить такую отладку (подразумевается, что у Вас на компьютере уже установлены Android SDK, ADB, и Вы можете осуществлять отладку программ через USB).

1. Подключите устройство Android к Вашему компьютеру через USB в режиме разрешенной отладки через USB (как этот режим включается - см. раздел "Отладка через USB"). Перейдите в папку, где находится утилита adb.exe (на операционных системах Windows это обычно папка c:\Program Files\Android\android-studio\sdk\platform-tools), запустите интерпретатор команд cmd и введите команду:

adb tcpip 5555

В ответ должно быть выведено сообщение:

restarting in TCP mode port: 5555

Если у Вас была запущена среда Android Studio, и Вы следили за консолью Devices и логом сообщений logcat, то в этот момент увидите, что подключенное устройство Android исчезло из списка, в logcat перестали появляться новые сообщения. Сейчас Вы разрешили отладку через TCP/IP соединение с использованием порта 5555 (Вы также можете использовать любой другой свободный порт), осталось подключить ADB к устройству Android.

2. Теперь нужно узнать, какой IP-адрес у устройства Android. Этот адрес он получил, когда подключился к сети Wi-Fi. Адрес можно узнать, если зайти в Настройки -> Об устройстве -> Состояние (Settings -> About -> Status).

Android-view-IP

Итак, у нашего устройства IP-адрес 192.168.0.53. Теперь введите следующую команду:

adb connect 192.168.0.53

В ответ получите сообщение:

connected to 192.168.0.53

3. Если Ваш компьютер находится в той же подсети (192.168.0/24), то теперь в среде Android Studio консоль Devices покажет подключенное устройство Android, и Вы свободно можете производить отладку точно так же, как раньше это делали через USB. Состояние моста ADB можно проверить командой:

adb devices

В ответ должен быть выведен список подключенных устройств:

List of devices attached:
"IP-адрес_Вашего_устройства:порт" device

Android-ADB-debug-over-TCP-IP

В Вашей среде разработки теперь доступен лог Logcat, и можно запустить на отладку Ваше разрабатываемое приложение. Будут работать следующие функции (как и при отладке через USB):

• Вывод Logcat.
• Развертывание отлаживаемого приложения на устройстве (копирование его из среды разработки в устройство).
• Отладка приложения.
• Создание скриншотов через ADB.

[Отладка на виртуальном устройстве AVD]

AVD переводится как Android Virtual Device. Программа AVD Manager позволяет создавать такие виртуальные устройства, которые Вы можете использовать при отладке своих программ. Отладка на AVD имеет свои преимущества, потому что позволяет создать множество устройств Android с разными характеристиками (разное разрешение экрана, разные версии операционной системы Android, разный объем памяти и т. п.). Однако отладка на AVD работает чрезвычайно медленно, и очень требовательна к ресурсам хостового компьютера, который запускает AVD (как по памяти, так и по процессорному времени). Ускорить отладку на AVD можно, если запускать виртуальное устройство из снапшотов (это настраивается при создании виртуального устройства), или если применить специальные приемы работы с эмулятором [6], но в любом случае отладка на реальном устройстве предпочтительнее отладки на AVD.

В среде Android Studio виртуальные устройства создаются запуском программы AVD Manager через меню Tools -> Android -> AVD Manager. В Eclipse виртуальные устройства создаются и настраиваются через меню Window -> Android Virtual Device Manager. Также AVD Manager можно запустить из командной строки, если выполнить команду android.bat avd. Скрипт android.bat находится в директории sdk\tools, папка установленного SDK (пакет SDK входит в состав ADT на основе Eclipse и также входит в установку Android Studio).

[LogCat]

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

В системе разработки Eclipse консоль LogCat открывается автоматически после запуска отлаживаемой программы.

Разработчик может выводить в LogCat свои текстовые сообщения с помощью статического класса android.util.Log. Сделайте импорт android.util.Log, и далее пользуйтесь его методами без создания экземпляра класса (поскольку класс статический).

LogCat поддерживает разные уровни вывода сообщений:

V — Verbose (подробно, самый низкий приоритет)
D — Debug
I — Info
W — Warning
E — Error
F — Fatal
S — Silent (самый высокий приоритет, на котором ничто никогда не распечатывается)

Благодаря наличию уровней сообщений их можно грубо отфильтровать по уровню. Например, вот так это делается в консоли LogCat в среде Eclipse:

Eclipse-LogCat-select-message-level

Когда Вы запускаете свое приложение в режиме отладки из Eclipse, то Вы можете увидеть множество сообщений, которые появляются в окне консоли LogCat: как сообщения, отправленные Вашим приложением, так и сообщения системы и других приложений, которые работают в этот момент на Вашем устройстве.

Чтобы вывести что-то в лог, сначала определитесь, насколько критичным должно быть выводимое сообщение (должно ли оно быть в категории отладочной информации (d, Debug), или это должно быть просто информационное сообщение (i, Info), или это должно быть предупреждение (w, Warning) или это должно быть сообщение об ошибке (e, Error)? После этого используйте для вывода подходящий метод:

Log.d("myApp", "my debug message"); 
Log.i("myApp", "my informational message");
Log.w("myApp", "my warning message");
Log.e("myApp", "my error message");

Первый параметр myApp предоставляет текстовую метку, которая позволяет дополнительно отфильтровать сообщения в логе. Это может оказаться полезным, когда сообщений слишком много, и найти нужное сообщение будет проще, если заранее знать её метку. В консоли LogCat Eclipse такой фильтр можно создать кнопкой с зеленым плюсиком "Add new logcat filter".

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

Для native-кода NDK предоставляет библиотеку, аналогичную Java-классу android.util.Log. Чтобы воспользоваться её возможностями, подключите заголовочный файл log.h

#include < android/log.h >

и в файл Android.mk добавьте строку

LOCAL_LDLIBS := -landroid -llog

После этого для вывода в LogCat можете использовать функции __android_log_vprintf и __android_log_printf. Однако эти функции напрямую вызывать достаточно неудобно, поэтому есть смысл создать для них специальный класс Log:

/*
 * Log.hpp
 */
#ifndef LOG_HPP_ #define LOG_HPP_
namespace packt { class Log { public: static void error (const char* pMessage, ...); static void warn (const char* pMessage, ...); static void info (const char* pMessage, ...); static void debug (const char* pMessage, ...); }; }
#ifndef NDEBUG #define packt_Log_debug(...) packt::Log::debug(__VA_ARGS__) #else #define packt_Log_debug(...) #endif
#endif /* LOG_HPP_ */
/*
 * Log.cpp
 */
#include "Log.hpp"
#include < stdarg.h >
#include < android/log.h >
namespace mypack { void Log::info(const char* pMessage, ...) { va_list lVarArgs; va_start (lVarArgs, pMessage); __android_log_vprint(ANDROID_LOG_INFO, "PACKT", pMessage, lVarArgs); __android_log_print(ANDROID_LOG_INFO, "PACKT", "\n"); va_end(lVarArgs); }
void Log::error(const char* pMessage, ...) { va_list lVarArgs; va_start(lVarArgs, pMessage); __android_log_vprint(ANDROID_LOG_ERROR, "PACKT", pMessage, lVarArgs); __android_log_print(ANDROID_LOG_ERROR, "PACKT", "\n"); va_end(lVarArgs); }
void Log::warn(const char* pMessage, ...) { va_list lVarArgs; va_start(lVarArgs, pMessage); __android_log_vprint(ANDROID_LOG_WARN, "PACKT", pMessage, lVarArgs); __android_log_print(ANDROID_LOG_WARN, "PACKT", "\n"); va_end(lVarArgs); }
void Log::debug(const char* pMessage, ...) { va_list lVarArgs; va_start(lVarArgs, pMessage); __android_log_vprint(ANDROID_LOG_DEBUG, "PACKT", pMessage, lVarArgs); __android_log_print(ANDROID_LOG_DEBUG, "PACKT", "\n"); va_end(lVarArgs); } }

[Ссылки]

1. Android Quick Tip - ADB over WiFi site:stuffandtech.blogspot.ru.
2. WiFi ADB - Debug Over Air site:play.google.com.
3. Setting up USB debugging for your Android device site:visualgdb.com.
4. USB driver installer for FTDI and Libusb drivers site:visualgdb.com.
5. 131229UsbDriverTool-sfx.zip.
6. Как ускорить эмулятор Android на 400% site:habrahabr.ru.
7. Android Debug Bridge - что это такое?
8. USB Drivers for Android site:play.google.com - программа, облегчающая поиск драйверов USB для устройств на операционной системе Android.

 

Комментарии  

 
0 #3 Ярослав 13.03.2016 16:41
А как искать логи конкретного приложения?
Обьясните, пожалуйста, с подробной инструкцией
Цитировать
 
 
+2 #2 Игорь 27.10.2015 13:25
Спасибо! Помогло, не мог найти как именно заставить galaxy S3 работать в связке с компом.
В статье не плохо бы дабавить, что после того, как студия и телефон первый раз увидят друг друга, на телефоне появится запрос о разрешение взаимодействия, этот запрос нельзя проворонить, иначе в студии вместо устройства, будет абракадабра типа unknown (4df773320b1540e5) и студия будет выдавать ошибку This adbd's $ADB_VENDOR_KEY S is not set; try 'adb kill-server' if that seems wrong.
Цитировать
 
 
0 #1 Сергей 24.07.2015 00:13
Спасибо огромное! Откуда только не скачивал драйверы для своего галакси S3, ничего не помогало. Студия телефон видела, но не определяла... А с этой утилитой всё заработало!
Цитировать
 

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


Защитный код
Обновить

Top of Page