Возможные проблемы из-за отсутствия Google Play services

Наша команда сейчас работает над одним Android-приложением. Дали мне его на тестирование. Пробую запустить на своем телефоне -> приложение сразу же аварийно завершает работу. В логах:

E/AndroidRuntime(5342): at com.htc.mobileshop.MainActivity.checkPlayServices(MainActivity.java:215)

Запускаю на другом устройстве -> ошибки нет, все стартует нормально. Так что же это может быть? Оказывается, не так давно я удалил со своего телефона системное приложение «Google Play services» за ненадобностью. И вот, как оказалось, что если не обрабатывать исключения, связанные с невозможностью обнаружить Play services, мы можем получить ситуацию, что наше приложение сразу же будет крашиться. А вот, к примеру, приложение Foursquare при своем запуске сразу же оповещает пользователя о том, что для дальнейшей работы с приложением необходимо установить «Google Play services».

[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

Про Tizen, HTML5-приложения и большое потребление памяти

В последнее время наша команда разработчиков занимается портированием нескольких игр под платформу Tizen (Linux based):

Linux TRATS2 3.0.15-00002-g277d62a #1-Tizen SMP PREEMPT Tue Jul 16 13:12:44 KST 2013 armv7l GNU/Linux

Есть игра X, которую решили писать на HTML5 (в качестве фреймворка был выбран Cocos2D HTML5). И вот писали наши разработчики эту игру целых четыре месяца, а потом выяснилось, что игра уже через небольшой промежуток времени начинает сильно тормозить, а потом и вовсе зависает (вместе с самим Tizen-устройством).

Первая мысль — где-то течет память. Начали профилировать приложение, смотреть, сколько памяти потребляет JavaScript. Нашли проблемные участки, залатали. Но на общий процесс тормозов и зависаний это не сказалось. Хм… Тут нам бы очень помог сам Tizen, если бы умел выводить информацию об используемой и свободной памяти (в Android’е это настраивается в разделе разработчика). Tizen же настолько сырой, что ничего подобного в нем нет (потом, возможно, и появится). Тем не менее, к устройству можно подключиться через sdb (аналог adb), и через консоль устройства вызвать нужные команды для просмотра памяти устройства.

sdb shell
sh-4.1$ free

total used free shared buffers cached
Mem: 797944 779236 18708 0 7256 153432
-/+ buffers/cache: 618548 179396

Видим, что устройство обладает ~780 МБ оперативной памяти. Сама операционная система занимает порядка 300 МБ. Вычисляем: 780 — 300 = 480 МБ — это размер свободной памяти. Теперь запускаем нашу игру и видим, что свободной памяти стало всего ~18 МБ. 480 — 18 = 462 МБ — столько ушло под виртуальную машину, которая запускает HTML5-приложения, и непосредственно под нашу игру. Это слишком много, а тормоза и зависания, скорее всего связаны с тем, что через некоторое время расходуется вся свободная память и начинает активно работать своп.

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

[Chrome] Двойной скроллбар

Просматривая сайт Яндекс.Картинки, заметил, что Google Chrome (версия 30.0.1599.69, Windows 7) иногда прорисовывает двойной скроллбар (некорректно обрабатывается кастомный скроллбар?):

2013-10-15_151021PS: интересная статья как раз про реализацию кастомного скроллара.

Баг в приложении YouTube — 43 years ago

В официальном приложении YouTube для iOS (версия 2.1.0) есть интересный баг — если открыть страницу «Popular» (кстати, являющейся главной), то в списке видео в качестве их даты публикации значится «43 years ago«. Также если присмотреться, то во всех других разделах впереди даты размещения стоит слово «uploaded», но вот только не в «Popular».

Итак, 43 года назад — это отсылка к знаменитой компьютерной дате 1 января 1970 (начало «эры UNIX»). Параметры принимают это значение, если они по какой-то причине неправильно инициализируются. Слово «uploaded», скорее всего добавляется только к тем датам, которые инициализируются правильно, что в нашем случае совсем не так.

youtube_42years

Небольшой пример бага на сайте m.htccare.ru

Есть мобильная версия онлайн-магазина HTC в России — http://m.htccare.ru. На этом сайте имеется простецкая ошибка, заключающаяся в отсутствии проверки совершенных действий.

В разделе «Корзина» ссылка «Подтверждение» (находится в верхнем меню навигации) всегда активна, в результате чего минуя пункт «Доставка и оплата» можно совершить заказ, финальным аккордом которого будет сообщение о принятии заказа:

Ваш заказ № принят, информация о нем отправлена на вашу электронную почту.
Мы сделаем всё возможное чтобы доставить ваш заказ как можно быстрее.

Ждем вас снова!

[Chrome] Баг со скроллом страницы

В Google Chrome 29.0.1547.66 (Windows) есть интересный баг — при вызове панели «Инструменты разработчика» пропадает элемент скролла страницы (воспроизводится при вертикальной ориентации панели и если окно браузера раскрыто на весь экран). Также ошибка иногда проявляется и при простом изменении размеров окна браузера.

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

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

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

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

Ряд проблем в личном кабинете МТС

Возможна ситуация, когда в блоке «Мой баланс» не подгружается информация о балансе личного счета абонента (по умолчанию показывается 0.00 руб.), в то время как в верхнем блоке справа баланс отображается корректно. Кстати, информация о 800 баллах в этом блоке является также неверной (на самом деле их 600). Счетчик принимает корректное значение только после перехода в раздел «МТС Бонус».
Снимок_экрана_090213_020909_PM