[Android] Средства для анализа использования памяти

adb shell cat /proc/meminfo — покажет общую информацию по использованию памяти в системе. Наиболее важная и интересная информация содержится только в первых строчках вывода:

MemTotal: 419932 kB
MemFree: 11788 kB
Buffers: 3436 kB
Cached: 82272 kB
SwapCached: 14384 kB
...

MemTotal — это общий объем памяти, доступный для ядра и пользовательского пространства (зачастую меньше, чем фактический объем памяти устройства, так как некоторые количество памяти резервируется для радио, DMA буферов и т.д.).

MemFree — объем оперативной памяти, который не используется вообще.

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

adb shell dumpsys meminfo — также покажет информацию об используемой памяти в системе, но в более подробном виде (к примеру, по каждому запущенному Java-процессу):

C:\Users\ADmi>adb shell dumpsys meminfo
Applications Memory Usage (kB):
Uptime: 841043 Realtime: 841036

Total PSS by process:
    79059 kB: android.process.acore (pid 932)
    58356 kB: com.xxx (pid 6409)
    36592 kB: com.htc.launcher (pid 1062)
    36358 kB: system (pid 442)
    ...

Total PSS by OOM adjustment:
    36358 kB: System
               36358 kB: system (pid 442)
    58783 kB: Persistent
               27112 kB: com.android.systemui (pid 579)
               14913 kB: com.android.htcdialer (pid 729)
               11219 kB: com.android.phone (pid 715)
                5539 kB: com.android.nfc (pid 746)
    58356 kB: Foreground
               58356 kB: com.xxx (pid 6409)
    47710 kB: Visible
               ...

Total PSS by category:
   217584 kB: Dalvik
   148600 kB: Unknown
    50546 kB: .so mmap
    38764 kB: .apk mmap
    28005 kB: Other mmap
    13165 kB: .dex mmap
     1928 kB: Other dev
     1881 kB: Native
      696 kB: .ttf mmap
       40 kB: Cursor
       12 kB: Ashmem
       11 kB: .jar mmap

Total PSS: 501232 kB
      KSM: 0 kB saved from shared 0 kB
           0 kB unshared; 0 kB volatile

Зная PID или имя процесса можно вывести подробный отчет по нему:

adb shell dumpsys com.xxx — покажет:

C:\Users\ADmi>adb shell dumpsys meminfo com.xxx
Applications Memory Usage (kB):
Uptime: 939680 Realtime: 939674

** MEMINFO in pid 6409 [com.xxx] **
                             Shared  Private     Heap     Heap
                       Pss    Dirty    Dirty     Size    Alloc
                    ------   ------   ------   ------   ------
           Native       72      168       68    16516    16209
           Dalvik    48471     6512    48284    56867    47084
           Cursor        0        0        0
           Ashmem        2        4        0
        Other dev      268       52      264
         .so mmap     3087     6612     2508
        .jar mmap        0        0        0
        .apk mmap      149        0        0
        .ttf mmap      622        0        0
        .dex mmap      728        0        0
       Other mmap      956      636       92
          Unknown     3980     4328     3868
            TOTAL    58335    18312    55084    73383    63293

 Objects
           Views:      276     ViewRootImpl:        2
     AppContexts:        3       Activities:        2
          Assets:        4    AssetManagers:        4
   Local Binders:       13    Proxy Binders:       21
Death Recipients:        1
 OpenSSL Sockets:        1

 SQL
     MEMORY_USED:      112
PAGECACHE_OVERFLOW:       28      MALLOC_SIZE:       62

 DATABASES
      pgsz     dbsz   Lookaside(b)          cache  Dbname
         4       20             57       29/34/10  /data/data/com.xxx/databases/google_analytics_
v2.db
Uptime: 939889 Realtime now=939883

[Android] Просмотр системной информации

Для просмотра подробной технической информации об Android-устройстве, можно использовать бесплатное приложение Dalvik Explorer (доступно в Google Play). Автор позиционирует Dalvik Explorer специально для программистов, которым порой при разработке приложений для того или иного устройства необходимо знать свойства Java, переменных окружения, локали, кодировки или временной зоны. Тем не менее, Dalvik Explorer пригодится и просто тем, кому нужно узнать информацию о размере памяти устройства, используемом процессоре, размере экрана и пр.

Полный список доступных разделов:

— Build Details
— Charsets
— Device Details
— Environment Variables
— File Systems
— Locales
— Sensors
— System Properties
— Time Zones

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

Dalvik ExplorerDalvik Explorer

[iOS] Очистка от временных файлов

В ходе использования iOS часть дискового пространства на устройстве становится занятой различными данными, которые по сути своей являются ненужными — различные кэши приложений, временные файлы и другой мусор, оставляемый после удаления приложений и т.п. При большом количестве установленных приложений размер таких данных может достигать большого значения, съедая тем самым драгоценные мегабайты, а зачастую и целые гигабайты.

Решение есть — достаточно использовать специальные программы для очистки устройства от мусора. Как пример, я решил воспользоваться бесплатной программой «PhoneClean», которая очень проста в использовании. Подключаете iOS-устройство к компьютеру, нажимаете кнопку «Start Scan» и после некоторого времени программа покажет, каков размер мусора был найден в ходе сканирования. Для себя я отметил только первые два пункта проверки — «Temp and Junk Files» и «Cache and Off-line Files». В итоге, объем ненужных файлов составил порядка 1,5 ГБ, которые накопились почти за 1,5 года использования iPad’ом.

PhoneClean

[Android Studio] Plugin ‘InspectionGadgets’ failed to initialize

После обновления Android Studio с версии 0.1.x до версии 0.2.8 и запуска IDE получил сообщение об ошибке:

2013-09-19_170009

Пришлось удалять IDE и устанавливать ее заново. Как и ожидалось, ошибка пропала.

 

Основные горячие клавиши в 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