?

Log in

No account? Create an account

Previous Entry | Next Entry

I. HTC Desire и Android

HTC DesireУже довольно давно я порывался уйти с WM платформы (Samsung i780). Останавливала, главным образом, необходимость синхронизации с MS Exchange, а также возможность на WM телефоне более-менее нормально смотреть doc/xls, письма с html разметкой.

С появлением  Android 2.1, а также приличных телефонов с ним: Nexus One и HTC Desire (которые, по сути, почти одно и то же), а также со всё более интенсивным использованием различных гуглосервисов было решено, что ждать уже хватит.

После некоторых размышлений был выбран HTC Desire. Во-первых, из-за оптического тачпада (у Nexus'a нечто типа джойстика - мне не понравилось), во-вторых из-за официальной  гарантии. Как выяснилось позже - HTC Sense (надстройка над Android'ом) тоже является большим плюсом. Кстати, если кого волнует - рецепты по отключению Sense в Desire работают только для ранних версий телефонов.

По прошествии, примерно, месяца - могу сказать, что выбором я очень доволен.

Наибольшее опасение у меня вызывало отсутствие физической клавиатуры и, безусловно, экранная менее удобна (особенно на ярком свете). Однако, неудобства оказались не настолько критичны. Понравился feedback при нажатии на кнопку, который имитируется вибрацией.
Большой, очень качественный экран. С него даже приятно читать книжки, в отличие от всех телефонов, которые мне встречались ранее.
Тормозит только в очень редких конкретных местах. В целом всё быстро и удобно. Мультитач работает, но только в специфических ситуациях (например, масштабирование картинки в _некоторых_ приложениях и страниц в браузере)
Использование аппаратных кнопок довольно странное. В частности, центральная кнопка как правило вообще ничего не делает (что мешало повесить на неё ответ на звонок или запуск телефонного приложения - неясно). Да, аппаратные кнопки нельзя назначить на что угодно - нет таких приложений (видимо, ограничения ОС).
Что касается поддержки MS Exchange, которая меня волновала - почта и календарь синхронизируются совершенно нормально.
Качество Фото / Видео - приемлимое (хуже ультракомпактов, конечно).
От аккумулятора работает столько, сколько большинство смартфонов - примерно раз в сутки надо заряжать. Но то, что он заряжается по USB (там microUSB разъем) - отчасти решает проблему. Качество звука - так себе, прямо скажем. Чуть погромче - начинает дребезжать. Впрочем, есть стандартный разъем для наушников. Еще, встроено FM радио (требует подключенных наушников - в качестве антенны).

В целом, я охарактеризовал бы Android телефон как "IPhone для гиков/фриков". С одной стороны, у него человеческий удобный интерфейс, похожий на IPhone'овский (только несколько кривее - до некоторых вещей пришлось долго догадываться и спрашивать знакомых, в то время как на IPhone всё было интуитивно понятно).
С другой - нет ограничений на установку приложений из левых источников - хоть с карточки ставь что угодно, хоть из Интернет-а. Опять же - если есть желание, можно скачать SDK, написать что нужно и совершенно бесплатно и без одобрений использовать или распространять.

Один ньюанс, который мной не вполне осознавался, заключается в резком увеличении трафика (соответственно, платы за телефон). Это связано с наличием различных виджетов, приложений которые регулярно синхронизируются с сервисами в Интернете, а также из-за более частого использования браузера на телефоне, т.к. теперь это удобно и быстро. В итоге сейчас счётчик трафика прогнозирует мне что-то в районе 500mb суммарного трафика в месяц (отчасти это обусловлено тем, что после покупки хочется всё посмотреть, но всё равно уже ясно, что по сравнению с WM трафик увеличится минимум раз в десять).

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

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

II. РАЗРАБОТКА

Естественно, я не удержался от сооблазна попробовать что-нибудь написать под Android. Под WM у меня такого желания не было, но здесь мне понравилась идеология системы - несмотря на кое в чём кривую реализацию, идеологически всё задумано очень хорошо.
Ядро системы - линуксовое. Но для разработчика приложений это, в принципе, ничего не означает. Т.е. не определяет идеологию системы. Приложения пишутся на Java. Однако, есть важный ньюанс - код, который получается в результате, к Java особого отношения не имеет. Выполняет его их собственная VM - _регистровая_, а не стековая, причём даже без JIT компилятора. [2dz: skip next sentence :-]  Что решает проблему с характерными для Java тормозами.

Короче говоря, я скачал Android SDK (Win) с эмулятором, поставил Eclipse, необходимые плагины, скомпилил Hello World, порадовался, задумался что бы такого написать.

Одной из приятных фич Android'а являются так называемые "виджеты". Это приложения, которые можно размещать на desktop'e называемом home screen (он виртуальный, прокручивается влево и вправо). Такое приложение может периодически выполнять какие-то действия (например, получать из Интернета данные) и отображать полученную информацию внутри виджета. Его размеры задаются в относительных единицах - грубо говоря, в условных клетках экрана и после того как виджет размещен, не могут меняться.
Виджет можно перемещать по десктопу, удалять и т.п.
Одним словом, это показалось мне наиболее интересным направлением действий.
Было решено для примера сделать виджет (см. фото), показывающий последние несколько сообщений из группы одного сервиса (Smster). С возможностью настраивать период обновления информации и, собственно, группу.
Про серверную часть говорить нечего - просто делается SELECT из базы и кодируется JSON'ом.

С написанием же виджета возникли кое-какие проблемы. По сравнению с любимым мной Flex'ом, здесь бросился в глаза глючный эмулятор и SDK, а также весьма немногословная и местами просто устаревшая документация и очень небольшое количество примеров виджетов в исходниках, которые удалось нагуглить (всего штук 5, плюс масса модификаций этих пяти. Причём, все они довольно простые).

Чтобы не быть голословным:
К примеру, из документации следует, что есть некий параметр android:updatePeriodMillis , в котором можно задать период вызова обработчика для обновления информации в виджете. И приводится пример. Я этот пример скомпилил, поставил туда что-то в районе 5 секунд - эффекта нет. Ничего не обновляется. Всё перепроверил - вроде должно работать, но не работает. Полез гуглить. Через некоторое время начал натыкаться на аналогичные стоны других начинающих разработчиков. Что выяснилось: Начиная с версии, кажется, 1.6, гугл вдруг решил, что установка маленьких значений в этом параметре будет сильно жрать батарею Поэтому любое значение меньше 30 _минут_ равно 30 минутам :) В документации об этом ни слова. Ну отлично, что я могу сказать. Вписать в документацию строчку конечно очень сложно (тикет от сентября 2009).
Погуглил ещё, переписал через AlarmManager, чтобы можно было установить любое время.

(то, как разнообразно глючит Eclipse я опускаю, чёрт с ним - я уже привык, да и Гугл тут слабо виноват)

Эмулятор. Стартует около 2 минут (не только у меня). Чего он там всё это время делает -  не знаю. Наверное, образ ROM читает побайтно, с fopen/fclose на каждый байт :)
Но если бы только это. Далее он начал постепенно умирать. Т.е. с каждым часом какие-то вещи происходили всё медленнее, потом он начал петь песни про app not responding [abort/wait] и т.п. Что с этим делать - неясно, причём всякие перезапуски/перезагрузки не помогают. Иногда он оживает в совершенно непонятные моменты, потом начинает тормозить опять. Кстати, у них в тикете от 2008 года о похожих вещах писали, но, как видно, починить не судьба (всё это не только у меня происходит - на форумах тоже народ стонет).

И еще об особенностях виджетов в Android'e. Я не знаю, особенность ли это текущей версии SDK или самой ОС, но существуют очень большие ограничения на контролы, которые можно использовать в виджете. По большому счёту, там можно лишь выводить текст с очень простой HTML разметкой (без таблиц и прочего), картинки и кнопки.
Если хочется какого-то скроллинга, анимации, нормального HTML (чтобы вывести вебстраничку) - уже не выйдет.
Именно этим объясняется такой бедный интерфейс большинства виджетов.

Владельцы HTC девайсов могут сказать - но вот у меня-то есть виджеты, которые и со скроллингом и с анимацией (например, тот который почту показывает).
Оказывается, это нечестные виджеты. Фактически, это что-то типа хака home screen.
(кстати, лишний плюс в сторону девайсов с HTC Sense и против Nexus One, скажем).

Мда, что-то я разошёлся.

В целом, всё это воскресило во мне воспоминания о написании первого приложения под Google App Engine. С одной стороны понимаешь, что всё это круто и правильно, с другой - постоянные глюки, недоделки, умолчания и прочее - очень напрягают.

Впрочем, если вы не собираетесь писать под Android, какая разница? Телефоны хорошие, приложений появляется всё больше. Интеграция с гуглосервисами достойная (кроме Google Tasks, который Google упорно игнорирует ).

Да, кто не понял - пост в целом задумывался позитивным :)

P.S. Мой Samsung i780 случайно никому не нужен? С запасным аккумулятором. Недорого.

Comments

aamonster
May. 6th, 2010 01:19 pm (UTC)
Ну, насчёт вырывания фразы из контекста - это ты воткнул "решает проблему" после упоминания отсутствия JIT, а не после регистровой машины. Тут естественно было понять неправильно.

После пояснения понятно.