Основные горячие клавиши в Android Emulator

Home — кнопка «Домой»
F2 (или Page Up) — левая софт-кнопка (отвечает за меню)
Shift + F2 (или Page down) — правая софт-кнопка
Esc — кнопка «Назад»
F3 — кнопка вызова / набора номера
F4 — кнопка отбоя вызова
F5 — кнопка поиска
Ctrl + F5 — кнопка увеличение громкости
Ctrl + F6 — кнопка уменьшение громкости
F7 — кнопка питания / блокировки экрана
Ctrl + F3 — кнопка запуска камеры
Ctrl + F11 — смена ориентации экрана (портретная / ландшафтная)
Alt + Enter — переход в полноэкранный режим просмотра

[Android] Перехват трафика с помощью прокси-сервера

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

Для перехвата трафика можно использовать прокси-сервер (Charles, Fiddler, Burp Suite и др.). В данной заметке я приведу пример по использованию Burp.

Переходим на вкладку «Proxy» -> «Options», в разделе «Proxy Listeners» жмем кнопку «Edit», и в опции «Bind to address» выбираем «All interfaces». Все, Burp настроен и теперь лишь осталось запустить Android-эмулятор с использованием прокси-сервера:

emulator -avd <avd_name> -http-proxy http://YOUR_COMPUTER_IP:8080

Теперь, после запуска тестируемого приложения, в Burp на вкладке «History» будут отображаться все сетевые активности.

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

HttpHost httpproxy = new HttpHost("YOUR_COMPUTER_IP", 8080, "http");
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,httpproxy);

Про неполную поддержку юникодных шрифтов в Android

На днях, тестирую программу, обнаружил, что на HTC EVO 3D не отображаются символы некоторых экзотических языков, к примеру, таких как лаосский. Выяснилось, что это проблема самого Android’а, который по непонятным причинам по умолчанию не содержит шрифтов, которые бы полностью поддерживали Unicode. Хотя, производителя конкретного устройства при желании могут сами оснастить систему поддержкой более «продвинутых» шрифтов. Либо же это можно сделать самостоятельно, но для этого нужно иметь рут-права.

Материал по теме.

Could not open camera 2: -1

Сегодня нужно было кое-что сфотографировать. Достаю HTC EVO 3D, нажимаю на иконку фотокамеры — дефолтное приложение открывается и тут же закрывается. Повторяю еще раз — безрезультатно. Пытаюсь открыть стороннее приложение Camera FV-5 — пишет, что проблема с драйвером камеры, нужно перезагрузить устройство. Смотрю логи:

09-03 10:49:23.944: E/QualcommCameraHardware3D(117): ERR!! camera is opened and cameraId didn't match! now 0 new 2
09-03 10:49:23.944: E/CameraService(117): Could not open camera 2: -1
09-03 10:49:23.944: E/CameraThread(10961): open camera failed
09-03 10:49:23.944: E/CameraThread(10961): java.lang.RuntimeException: Fail to connect to camera service
09-03 10:49:23.944: E/CameraThread(10961): at android.hardware.Camera.native_setup(Native Method)
09-03 10:49:23.944: E/CameraThread(10961): at android.hardware.Camera.(Camera.java:307)
09-03 10:49:23.944: E/CameraThread(10961): at android.hardware.Camera.open(Camera.java:268)
09-03 10:49:23.944: E/CameraThread(10961): at com.android.camera.CameraThread.startPreview(CameraThread.java:2185)
09-03 10:49:23.944: E/CameraThread(10961): at com.android.camera.CameraThread$MainHandler.handleMessage(CameraThread.java:627)
09-03 10:49:23.944: E/CameraThread(10961): at android.os.Handler.dispatchMessage(Handler.java:99)
09-03 10:49:23.944: E/CameraThread(10961): at android.os.Looper.loop(Looper.java:154)
09-03 10:49:23.944: E/CameraThread(10961): at com.android.camera.CameraThread.run(CameraThread.java:3227)
09-03 10:49:24.204: E/(10961): Cannot handle asynchronous message because of current state : 4
09-03 10:49:24.224: E/ActivityThread(10961): Activity com.android.camera.CameraEntry has leaked IntentReceiver com.android.camera.HTCCamera$30@40dd5190 that was originally registered here. Are you missing a call to unregisterReceiver()?

Выключение и последующее включение аппарата с режиме Fast Boot не помогло. Пришлось отключать Fast Boot и перезапускать телефон еще раз. Помогло.

Еще пару багов в iOS 7 Beta 6

Первый баг: анимированные обои расплющило по ширине.

Второй баг: для приложения Mail отсутствует бэкграунд иконки уведомления.

Еще пару багов в iOS 7 Beta 6Еще пару багов в iOS 7 Beta 6

[iOS] Приложения для мониторинга системы

Для того, чтобы узнать основную техническую информацию об iPhone / iPad, необязательно делать джейлбрейк, и лезть в консоль. В App Store есть достаточное количество бесплатных приложений, которые готовы раскрыть такую информацию. К примеру, DeviceStats (автор Dennis Stücken):

  • Показывает уровень заряда батареи (кстати, значение расходится в меньшую сторону с тем, что показывает сама iOS)
  • Размер занятого / свободного дискового пространства
  • Параметры сотовой и Wi-Fi сети
  • Размер памяти (еще одна странность — приложение показывает Total = 632 МБ, в то время как у моего iPad 3 размер памяти составляет 1024 МБ)
  • Список текущих процессов

Скорее всего выше перечисленные проблемы связаны с тем, что приложение не поддерживает iOS 7, т.к. последняя дата релиза была  декабре прошлого года.

DeviceStats

Более интересное приложение — это System Information Lite (отличие от платной версии — показ рекламного баннера), которое находится в стадии активной разработки. По мимо всего прочего, умеет:

  • Счетчики обновляются в режиме реального времени
  • Отображение Boot Time и Uptime устройства
  • Имеется возможность скопировать все представленную информацию (или же сразу отослать по почте)

System Information Lite

Кстати, размер оперативной памяти, отображаемый этим приложением, равняется 987 МБ, что больше похоже на правду. А вот уровень заряда батареи также отличается в меньшую сторону.

Более навороченное приложение — Lirum Device Info Lite, представляющее, наверно, наиболее полную информацию об устройстве, которую только можно ожидать. Из особенностей:

  • Показ номера модели устройства и аппаратной начинки
  • Подробное описание размера дискового пространства, вплоть до указания точек монтирования
  • Подробная информация об экране и графическом ядре (GPU)
  • Использование процессора отображается в виде графика в реальном времени
  • Использование оперативной памяти отображается в виде графика в реальном времени + здесь же показываются процессы с указанием PID и приоритета
  • Подробная информация о камере устройства
  • Подробная информация о сенсорах устройства (гироскоп, акселерометр, цифровой компас и т.д.)

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

Lirum Device Info Lite

[Android] Снятие скриншотов с экрана

Для записи видео с экрана устройства, работающего под управлением ОС Android есть не так уж и много действительно нормальных средств. Часть из них — это приложения, которые нужно устанавливать непосредственно на устройство, но они в большинстве свое требуют рут-права. Также еще есть приложение «Screencast Video Recorder«, не требующее рутового девайса, но оно не поддерживает платформу Tegra, поэтому проверить работоспособность этой программы на HTC EVO 3D не представляется возможным.

Также я нашел утилиту Ashot, написанную на Java, которая будучи запущенной на компьютере, позволяет записывать скринкаст, поступающий с устройства, правда, сохраняется все это дело не в привычном видеоформате, а в виде отдельных кадровых изображений в формате PNG (позднее их можно будет смонтировать в видеоряд).

Чтобы начать работать с Ashot, нужно:

  • Скачать — http://sourceforge.net/projects/ashot/
  • Папку «AndroidScreenCapture» можно скопировать, к примеру, в директорию, где установлен AndroidSDK
  • Из папки «platform-tools» скопировать файл «adb» в папку «tools» (это трюк для Mac OS. Для Windows нужно копировать еще парочку файлов)
  • Запустить AShot-1.1.jar и указать местоположение AndroidSDK

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

ashot

[iOS] Крах Safari при попытке открыть Google Translate

Чтобы добиться аварийного завершения работы браузера Safari в iOS 7 beta, можно зайти на сайт translate.google.com (по умолчанию откроется мобильная версия сайта), и нажать на ссылку «Полная версия», после чего браузер рухнет.

Актуально для iOS 7 beta 5 и 6 (возможно, проблема воспроизводилась и на более ранних версиях беты).

Fast Boot от HTC — после включения часы показывают старое время

Я уже делился своими впечатлениями об HTC EVO 3D. В этом телефоне, как и во многих других от HTC, есть интересная фишка, позволяющая «быстро» включать телефон (технология называется «Fast Boot»). По сути, когда вы выключаете устройство, оно переходит в спящий режим, а процесс включения (в данном случае пробуждения) занимает не более десяти секунд. Это очень хороший маркетинговый ход, да и вообще, такое быстрое включение — вещь удобная, хотя и потребляет, наверно, какой-то % использования аккумулятора.

Так вот, после «быстрого» включения заметил особенность, связанную с системным временем — экран блокировки все равно продолжает показывать то время, когда аппарат был выключен (хотя в таскбаре часы показывают правильное время). Если после этого разблокировать экран, а затем вновь заблокировать, то часы уже начинают показывать корректное время. А бывает и наоборот: экран блокировки показывает правильное время, а таскбар — то, когда аппарат был выключен.