Показаны сообщения с ярлыком android. Показать все сообщения
Показаны сообщения с ярлыком android. Показать все сообщения

суббота, 19 октября 2013 г.

Сяоми головного мозга

В последнее время вокруг аппаратов компании Xiaomi творится что-то невообразимое. Я имею в виду не Китай, где Mi2s стал самым продаваемым смартфоном (передавайте привет компаниям Apple и Samsung с их флагманами), а Россию, где эмоции на различных ресурсах просто зашкаливают. С одной стороны воюют ярые фанаты, практически такие же, как у Apple, с другой - врачи, дистанционно устанавливающие диагноз "У вас Сяоми головного мозга". Я попытаюсь разобрать ситуацию здраво и взвешенно, без скатывания в какую-либо сторону.

Самый лучший смартфон?

Итак, является ли Xiaomi Mi2s самым лучшим смартфоном на сегодняшний день? Ответ однозначный: нет. Эпплофилы, Сонибои и прочие фанаты Самсунгов могут спокойно выдохнуть и закрыть эту страницу. А с остальными мы продолжим.

А если Mi2s - не лучший, то кто тогда лучший? А нет такого. Любой современный смартфон сочетает в себе огромное число характеристик. И какие-то из них более важны, а какие-то менее. Но для разных людей и набор важных характеристик будет разным. Вот в чем парадокс. Поэтому я могу только рассмотреть все эти характеристики, а что важнее - каждый решит уже для себя.

Размер имеет значение

Mi2s играет в форм-факторе 4,3", где нет практически ни одного топового устройства (вот только недавно в Японии появился Sony Z1 f, впрочем, к нему мы еще вернемся). Samsung, HTC, Oppo делают максимально крутые устройства только начиная от 5", а в более маленьких - экономят, и экономят весьма существенно. Это может быть экран, процессор, объем памяти или что-то еще. Единственный, кто также не сэкономил в свое время - это Meizu MX2, но он все же на 3 мм шире, а здесь каждый миллиметр может иметь критическое значение для удобного хвата одной рукой. Впрочем, как раз с хватом у Mi2s явные проблемы. Несмотря на почти идеальные 62 мм ширины, корпус имеет не самые удачные скосы (по крайней мере, со штатной крышкой). И держать аппарат в руке гораздо менее удобно, чем SGS4 Mini или HTC One Mini.

Дизайн и корпус

Дизайн у Mi2s довольно невыразительный. Скажем так: на уровне Samsung. Штатная комплектация "черная панель, белая крышка" смотрится даже чуть интереснее белых самсунгов. Но большим плюсом аппарата является огромный выбор сменных крышек. Можно сделать закос под iPhone 4 или 5. Или выбрать индивидуальный дизайн - так, чтобы телефон был не похож ни на какой другой и сразу привлекал внимание.

В предыдущем посте я уже писал про то, что у сенсорных кнопок на лицевой панели нет подсветки. Это не очень удобно в темноте. Хотя, безусловно, приноровиться и не путаться потом не составляет никакого труда.

Отдельно стоит сказать про ударопрочность. Здесь с одной стороны - дело везения, при полете на асфальт все зависит от случая - разобьется экран или нет. Если нет, то на крышке будут сколы и ее просто можно заменить. Но может быть и еще одна неприятность: после падения иногда начинает глючить блок сенсорных клавиш - временами появляются фантомные нажатия кнопки "назад".

Экран

Экран при диагонали 4,3" имеет разрешение 720х1280, что дает 342 ppi (для тех, кто вдруг забыл, Retina в iPhone - это 326 ppi). Производителем матрицы может быть как Japan Displays, так и Sharp. Говорят, что экраны от Sharp заметно лучше при прямом сравнении (я сам не сравнивал, так что собственным опытом поделиться не могу). Но в любом случае, если не сравнивать экран ни с кем в лоб, вы не заметите у него никаких недостатков. В отличие от SGS4 Mini и Sony Z/Z1/Z1 f. Да, я в курсе, что настоящие фанаты этих производителей не видят там недостатков и готовы с пеной у рта доказывать, что низкое разрешение или плохие углы обзора - это даже плюс, но давайте будем честны: если вы предъявляете максимальные требования к экрану, то вам придется выбирать между Xiaomi Mi2s, Meizu MX2, HTC One Mini или же переходить к устройствам с большей диагональю.

Экран прикрыт минеральным стеклом Asahi DragonTrail, которое неплохо противостоит металлу, но отлично царапается песочком. Да и без явного песочка могут появляться мелкие царапки, которые видны при выключенном экране. Впрочем, это очень сильно зависит от условий эксплуатации. Мне приходилось видеть телефоны с Gorilla Glass 2, которые держали аккуратно в кармане женской сумочки, но это не мешало им за 3-4 месяца покрываться целой сетью царапок. Возможно, у Gorilla Glass 3 с этим лучше, не знаю. Но в любом случае, если боитесь царапок, придется клеить на экран защитную пленку.

Камера

В Mi2 и Mi2s 16 Gb установлен модуль камеры Sony Exmor R f/2.0 8Mpix, в Mi2s 32 Gb - Sony Exmor RS f/2.2 13Mpix (точно такой же как в SGS4 или Sony Z). Хорошие ли получаются снимки? На мой взгляд - да. Дневные кадры немного проигрывают по детализации SGS4 (я в курсе, что люди, которые не любят SGS4 и пользуются им через силу, делают на нем совершенно невыразительные снимки, но это же не показатель). Кадры в сумерках оказываются несколько хуже, чем у HTC с его ультрапикселем. Но если ваша основная цель Instagram - то достаточно будет просто сказать, что камера Mi2s превосходит камеру любого iPhone до 5 включительно (с 5s не сравнивал, так что за него не скажу). Впрочем, можете составить мнение о камере самостоятельно: начните отсюда (Mi2s) или отсюда (Mi2). Если камера критична - вам придется забыть про SGS4 Mini. HTC One Mini, Meizu MX2 или Sony Z1 f - надо смотреть, я видел слишком мало снимков с них, чтобы сделать какие-то окончательные выводы.

Аппаратная платформа

Qualcomm Snapdragon 600, 4-quad, Adreno 320 GPU, 2 Gb RAM. Этим все сказано, 28к баллов в AnTuTu. Ну вот теперь точно все сказано. Круче только Sony Z1 f (Snapdragon 800, Adreno 330). Все остальные конкуренты заметно слабее. В теории Meizu MX2 проигрывает не катастрофически, но его платформа от Samsung закроет вам дорогу в мир OpenGL ES 3.0 даже после обновления на Android 4.3.

По личным впечатлениям могу сказать, что Asphalt 8 не тормозит на максимальных настройках. В Real Racing 3 - тоже все хорошо.

Программная платформа

Здесь все неоднозначно. С одной стороны Xiaomi пока запаздывает с обновлением Android. В Mi2s - всего лишь 4.1, а не 4.3 или хотя бы 4.2 (как в Hongmi aka Red Rice). Это значит, что OpenGL ES 3.0 пока нет. С другой стороны поверх Android бежит MIUI - одна из лучших оболочек. Про нее можно долго рассказывать, но лучше попробовать самому (тем более, что MIUI бывает для многих смартфонов). Смотреть надо все: встроенные приложения (возможность фокуса + спуска по тапу в камере просто прекрасна), темы, прочие возможности (ограничения разрешений приложений "из коробки").

Цена и покупка

А вот здесь переходим к самому грустному. Если вы проживаете на территории Китая, то у вас все будет в шоколаде: невероятно низкая цена с доставкой вам домой или в офис и никаких проблем с гарантией. В России, конечно, же все намного печальнее. Xiaomi не осуществляет доставку в Россию, а значит, вам придется покупать у перекупщиков, что вносит свои коррективы:
  • цена будет выше (сейчас это - от $360);
  • вам нужно будет искать гарантировано хорошего перекупщика, чтобы не получить (sic!) китайскую подделку китайского телефона;
  • иногда случаются странные проблемы, когда таможня разворачивает посылки, в которых есть аккумуляторы;
  • гарантия может являться только доброй волей перекупщика, а при ее выполнении вам придется пару месяцев сидеть без телефона;
  • отсутствие РСТ означает, что вам придется вручную прошивать на телефоне русский язык (а также, вручную ставить Google Play); с одной стороны это очень легко, а с другой - это то, что у РСТ-конкурентов делать точно не надо.

Так стоит ли овчинка выделки?

Это все очень индивидуально. Есть люди, которым я однозначно советую покупать только Xiaomi Mi2s, а есть те, кому категорически не рекомендую этого делать (и предлагаю покрутить в руках Meizu MX2, HTC One Mini, SGS4 Mini - все РСТ, и выбрать что-нибудь из них).

четверг, 27 июня 2013 г.

Oppo Find 5

На работе для тестирования разрабатываемых приложений на разрешении XXHDPI купили смартфон Oppo Find 5 (Full HD на 5"). И вот какие у меня о нем впечатления.

Для пользователя

Первое, что бросается в глаза -- это, конечно же, экран. Большой, красочный. И очень четкий. Точки здесь не разглядеть даже под лупой, не говоря уже про невооруженный глаз. Смотреть видео или играть в игры (благо 4 ядра Snapdragon S4 Pro позволяют это делать без проблем) -- одно удовольствие.

Но вот с удобством работы не все гладко. Смартфон хоть и не ощущается совсем уж лопатой, но размеры дают себя и знать и управлять им одной рукой невозможно. Физически мои пальцы еще кое-как дотягиваются до всех мест, но приходится напрягаться.

Камера вроде бы неплоха, но толком я ее не тестировал.

В общем, гаджет оказался крайне приятным и если не смущает большой размер, то настоятельно рекомендую обратить на него внимание. Дизайн, кстати, довольно неплох. Внешне аппарат мне нравится больше, чем SGS4.

Для разработчика

Из коробки аппарат не определяется ADB, а значит отладка (и даже простой запуск приложений прямо из IDE) на нем не работают. Тем странным людям, которые ведут разработку под Andoroid из Windows, придется сначала скачать и установить драйвера с сайта Oppo, а потом настраивать. Под Linux достаточно одной настройки:

Сначала создаем (редактируем, если был) файл /etc/udev/rules.d/51-android.rules, записывая в него строку:
SUBSYSTEM=="usb", ATTR{idVendor}=="22d9", MODE="0666", GROUP="plugdev"
Не забываем сделать файл доступным на исполнение.

После этого открываем файл ~/.android/adb_usb.ini и дописываем в него строку
0x22D9
Это, как несложно догадаться, VendorID для Oppo.

Сам телефон необходимо при подключении по USB устанавливать в режим MTP. Все, отладка из IDE работает!

суббота, 20 апреля 2013 г.

Android: пишем свои стили для ActionBarSherlock и HoloEverywhere

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

Генератор стилей

Конечно же, начинать работу со стилями луче не с нуля, а с использования генератора стилей. И тут нас поджидает засада №1: генератор не может отдать пакет, который будет работать одновременно и в Android 2.* + ABS + HE, и в Android 4.*. Связано это с тем, что стили он именует либо в новой нотации ("android:actionBarStyle"), либо в старой ("actionBarStyle"), но не одновременно. Поэтому придется дописывать блок с именами стилей вручную. Ну и не забудьте, конечно, указать теме правильного родителя (например, Holo.Theme.Light.DarkActionBar).

Применение стилей

Дальше мы начинаем применять стили и... HoloEverywhere тупо вылетает на том, что это не его стандартный стиль. Что же делать? Иногда помогает переименование своего стиля в "AppTheme", но если серьезно доработать стиль (чтобы применять его для элементов HE, а не только ABS), то и это не помогает. На помощь приходит решение, подсмотренное на (сюрприз! сюрприз!) Stack Overflow: в design-time выставляем стандартную тему, а первой строкой onCreate(), даже до вызова super пишем:
setTheme(R.style.AppTheme);
И voila, как говорят французы. Все работает!

вторник, 16 апреля 2013 г.

Android: настоящий wrap_content по ширине для ListView

По умолчанию список (ListView) в Android растягивается на всю ширину контейнера. Иногда это бывает не слишком удобно и хочется сделать так, чтобы он занимал ширину строго по содержимому. Как же быть?

Начинающий разработчик воскликнет: "Элементарно! Выставим для ширины значение "wrap_content" и все станет шоколадно!" Я сегодня сказал так же. И даже сделал. Но ничего не сработало.

Как обычно ответ нашелся на stack overflow. Самый популярный ответ говорил, что ничего сделать нельзя. Ведь элементов списка может быть несколько миллионов и на вычисление ширины может уйти несколько часов. Но если промотать ветку до конца, то там обнаружится вполне себе рабочее решение, которое отлично работает для небольшого списка. Единственное, что мне там не понравилось - так это не очень удобные параметры для вызова извне. Поэтому я доработал код до обертки, которую удобно вызывать:
public class ViewUtils {
    private static int getWidestView(Context context, Adapter adapter) {
        int maxWidth = 0;
        View view = null;
        FrameLayout fakeParent = new FrameLayout(context);
        for (int i = 0, count = adapter.getCount(); i < count; i++) {
            view = adapter.getView(i, view, fakeParent);
            view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
            int width = view.getMeasuredWidth();
            if (width > maxWidth) {
                maxWidth = width;
            }
        }
        return maxWidth;
    }

    public static void setListViewWidthByContent(ListView listView) {
        listView.getLayoutParams().width = (int) (getWidestView(listView.getContext(),
                listView.getAdapter()) * 1.05);
    }
}

воскресенье, 24 марта 2013 г.

Заметки о рутовании

Рутанул свой LG Optimus One. Если кто-то будет делать то же самое, вот несколько полезных вещей:
  • для того, чтобы обновить бинарник su (из приложения superuser) необходимо перемонтировать файловую корневую систему в r/w (например, можно это сделать в ES Explorer);
  • один из безболезненных методов расчистки места: найти данные (/data/data) и кеши (/data/dalvik-cache) от уже удаленных приложений и удалить их;
  • еще один безболезненный способ расчистки места: удалить встроенное приложение, поставить его из Google Play и снова сделать системным (эффект тем больше, чем больше занимали обновления приложения);
  • покупка ключа к Titanium Backup заставляет его работать быстрее на несколько порядков;
  • при удалении системных приложений не забывайте постоянно перезагружаться и устанавливать отладку по USB.

пятница, 15 марта 2013 г.

Использование bit.ly в Android

В какой-то момент разработки #TweetLink я подумывал об использовании в нем сокращения ссылок от bit.ly. В конце концов передумал (смысла в этом мало: все равно все ссылки принудительно будут обработаны t.co, разве что кто-то будет сильно извращаться с нестандартными протоколами и отправлять не в твиттер).

Но наработки остались и потому могу рассказать по шагам, как это делается:
  1. Для начала надо пойти на https://bitly.com/ (можно написать и http://bit.ly - будет редирект) и зарегистрироваться там. Регистрироваться лучше, понятное дело, на специальный аккаунт приложения.
  2. После этого надо узнать свои Username и API Key. Сделать это можно здесь.
  3. Собственно для отправки берем готовый код BitlyAndroid отсюда.
  4. Использование класса - простейшее: создаем экземпляр с указанием Username и API Key и вызываем метод укорачивания ссылки.
  5. Ну и не забываем дать приложению Internet в uses-permission (если ранее этого еще не было сделано).
Вот как-то так.

четверг, 14 марта 2013 г.

Tweet Link - удобный способ публиковать новости в твиттер

Готовя подборки новостей для твиттера @DelphiKingdom, я столкнулся с некоторым неудобством публикации. С одной стороны хочется затвитить не только заголовок новости и ссылку на нее, но и некоторый анонс. С другой стороны, не только анонс, но и заголовок иногда бывает настолько длинным, что (в совокупности со ссылкой) превышает размер твита. Сначала я укорачивал тексты новостей вручную, но потом мне это надоело и захотелось автоматизировать процесс. Так родилась идея приложения Tweet Link.

Для начала надо сказать, чем Tweet Link не является. Это не еще один клиент твиттера. Это всего лишь средство для удобной публикации новостей.

Какие у него есть сценарии работы:
  1. Постинг в официальный клиент твиттера. Тогда Tweet Link работает всего лишь как укорачиватель анонсов.
  2. Постинг в веб-клиент. Это уже новая функциональность системы (отправка в твиттер через мобильный сайт).
  3. Постинг в какой-то другой сервис при помощи дополнительной настройки. На случай если захочется почесать левое ухо правой пяткой чего-то странного необычного.
Несмотря на то, что даже в названии обозначена заточенность приложения под постинг ссылок, можно с его помощью твитить и простой текст. Он тоже будет корректно укорачиваться.

Пробуйте, пользуйтесь, пишите отзывы (особенно, если они положительные). Предлагайте идеи для развития (например, делать спец. обработку текстов "ASP.NET" и подобных).


понедельник, 28 января 2013 г.

День Android на IzhDevCom. Впечатления организатора

Вот и прошла первая из серии мобильных встреч Izhevsk Developer Community. Хочу рассказать об этом "с той стороны баррикад", поскольку я был одним из докладчиков и организаторов мероприятия.

Подготовка

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

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

Организация мероприятия

За общую организацию отвечали те же, кто и всегда: Дмитрий Плотников, Кирилл Иванов и Егор Коновалов. Все было, как обычно, на высоте. Участники получили блокноты-ручки, призы от докладчиков за внимательность и были обеспечены неплохим Wi-Fi-интернетом (которого хватило почти до конца хакатона).

Зал, кстати, был заполнен почти до отказа, что на моей памяти случилось первый раз (я не был на встречах по Node.js и Ruby, но подозреваю, что и там приходило меньше народу).

Доклады

Первый доклад (Основы разработки под Android) читал я и собственно поэтому объективно оценить его я не могу. Субъективно, там был один fail: когда у меня не получилось вовремя создать приложение "Hello World" и продемонстрировать на нем необходимость применения ActionBarSherlock. Правда по ходу я исправился и во время секции вопросов-ответов показал-таки злополучный пример.

Вывод: а вод нефиг делать частичное обновление Android SDK непосредственно перед докладом. Лучше вообще ничего не обновлять.

Доклад Сергея про тестирование тоже не обошелся без недоработок: по ходу достаточно длительного запуска автотестов народ откровенно скучал. Вообще, доклад как-то не очень хорошо попал "в струю". Тестировщиков на мероприятии практически не было, а те из разработчиков, кто был, как-то не очень интересовались этой темой (подозреваю, что они делились на две группы: либо не доросли, либо уже все знали). Лично мне тема была очень интересна, но я-то уже это все видел...

Доклад Тимура (Mono for Android) был, безусловно, самым хипстерским: рассказывать про разработку под Android, показывая презентацию с iPad, а управляя ей с iPhone - это сильно :-)

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

Хакатон

Несмотря на то, что на хакатон осталось довольно мало народу, прошел он вполне интересно. Было и много драйва (например, от ребят из Nosorog Studio), было и законченное приложение, разработанное полностью "с нуля" (от Михаила Губанова и Евгения Клементьева).

На будущее могу порекомендовать всем участникам хакатонов: не сидите в одиночку. Даже в команде из двух человек вы успеете сделать существенно больше. Да и эмоции будут совсем другими.

Выводы

Надо сказать, что в итоге первый блин получился совсем не комом. А пока участники еще только делятся впечатлениями, мы уже начинаем готовиться ко второму дню мобильной тематики. Ждите анонсов :-)

четверг, 1 ноября 2012 г.

Про разработку

Про Windows Phone 8

Microsoft преследуют постоянные PR и маркетинговые фейлы, связанные с Windows Phone 8. Словно над этой ОС висит какой-то злой рок. Вот взять например, новую инициативу $8 for 8 (зарегистрируйся с 30 октября по 7 ноября как разработчик всего за $8 вместо $99). Классно? На первый взгляд - да. Но не все так просто. При внимательном прочтении условий оказывается, что Microsoft берет у вас беспроцентный кредит в размере $91 на срок от 30 до 60 дней. Т.е. с вашей карты снимут $99, а через месяц-другой вернут $91. Видимо, решение этой задачи поручили не специалисту по PR, а математику, который кипятит чайник, выливая воду и сводя задачу к предыдущей.

Про баг в ECM-Journal

Запустив приложение ECM-Journal в эмуляторе Android 4.1, я увидел, что оно падает сразу при запуске. Причина этого оказалась банальна: вызов requestWindowFeature(Window.FEATURE_NO_TITLE); оставшийся еще с тех времен, когда я не использовал ActionBarSherlock.

Обновление 2.1.3, исправляющее этот баг, уже в маркете. Качайте, обновляйтесь.


PS.  Дополнение про Windows Phone 8. Оказывается, $99 - это не цена входа в программу, а размер ежегодного платежа. Ну, молодцы, что еще тут скажешь... И эти люди запрещают мне ковыряться в носу хотят соперничать с Android? Совсем озверел Черный Абдулла связь с реальностью потеряли.

воскресенье, 5 августа 2012 г.

Android: WebView vs. YouTube

Как известно, WebView не показывает ролики YouTube. Т.е. Показывает, конечно, но только через Flash. Т.е. Работает далеко не на всех устройствах. Самое смешное, что встроенный браузер Android эти же самые ролики отлично показывает.

Впрочем, если не принципиально смотреть ролик на самой странице, то выход есть. Что для этого нужно:
  1. Перед показом страницы распарсить ее, найти ролики YouTube. Как правило, надо искать тег <objsafeect>, внутри которого есть источник src="http://www.youtube.com/v/ролик-ИД".
  2. Вместо этого тега надо вписать свою cсылку. Если в ней хочется показать название видео, то для этого надо сходить на YouTube и запросить его. Вместо описания просто приведу пример:
    private String getYouTubeVideoTitle(String videoUrl)
    {
        try
        {
            final String videoInfoUrl = ("http://www.youtube.com/oembed?url=" + 
                URLEncoder.encode(videoUrl, "UTF-8")).replace("%2Fv%2F", "%2Fwatch%3Fv%3D") + 
                "&format=xml";
            URL url = new URL(videoInfoUrl);
            URLConnection urlConn = url.openConnection();
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(urlConn.getInputStream());
            String title = doc.getElementsByTagName("title").item(0).getTextContent();
            return title;
        }
        catch (Exception ex)
        {
            // Если не получилось - ничего не делаем, возвращаем null.
        }
        return null;
    }
  3. При клике на эту ссылку надо запустить встроенное приложение YouTube. Для этого вызываем у WebView метод setWebViewClient и передаем в него объект с переопределенным методом shouldOverrideUrlLoading, в котром проверяем url  и при необходимости запускаем Intent.ACTION_VIEW с Youtube url.


PS. ECM-Journal 2.1.2 с такой фишкой - уже в Google Play Store.

PPS. Если вам нравится приложение, не забывайте голосовать или даже писать комменты :-)

четверг, 7 июня 2012 г.

ECM-Journal 2.1.1 - bugfix release

Выпустил новую версию приложения ECM-Journal - 2.1.1. По сути это багфикс-релиз. Исправлен один явный баг и сделаны две фичи, отсутствие которых выглядело как баги:
  1. Возвращена подсветка искомых ключевых слов в результатах поиска (только на странице материала, а не в списке). Эта штука была уже давно, но отвалилась где-то в 2.x.
  2. Сделано кеширование обложки. Теперь при старте приложения всегда открывается обложка, сохраненная при предыдущем запуске. Только после этого происходит проверка обновления, но даже, если обнаружена новая обложка, то в этом сеансе она только сохранится, а не переоткроется. Решение спорное, но я решил, что скорость и удобство работы важнее оперативности прочтения новой обложки.
  3. Большие изображения теперь вписываются в экран, а не приводят к горизонтальной прокрутке. Естественно, что при смене ориентации экрана они автоматически увеличиваются/уменьшаются (ширина экрана ведь изменяется). Любопытно, что это сделано всего одной строчкой в css, хотя я уже начинал писать монструозные скрипты для изменения размера изображений :-)

QR-код:

Ссылка для компьютера.

понедельник, 28 мая 2012 г.

ECM-Journal v2.1

Обновил приложение ECM-Journal до версии 2.1. Несмотря на изменения только в второй цифре, под капотом обновлений довольно много. Связано это с переходом на ActionBarSherlock и более точное соблюдение Google guidelines по дизайну Android-приложений.

С точки зрения конечного пользователя изменений всего два:
  1. В Android 4.0 приложение выглядит (ну или должно выглядеть, по крайней мере) менее чужеродно, за счет использования родного ActionBar.
  2. Отключено постоянное принудительное обновление списков. Новые материалы обновляются автоматически, только если устарели более, чем на 4 часа, список авторов и блоги - не чаще, чем раз в 24 часа. Разумеется, есть возможность ручного обновления.
В данной версии возможны мелкие баги, которые будут исправлены в 2.1.1.
QR-код:

Ссылка для компьютера.

воскресенье, 18 марта 2012 г.

Android: устанавливаем ActionBarSherlock

ActionBarSherlock - это враппер, позволяющий делать модные ActionBar-ы в любой версии Android. В ICS он использует системный ActionBar, а в более ранних версиях (2.х) - рисует свой.

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

Итак, как же его установить "с нуля". Рассмотрим на примере Eclipse (хотя бы потому, что IDEA и прочие альтернативы я не пробовал):

  1. Скачиваем архив с официального сайта и распаковываем за пределами Workspace (это важно!)
  2. Создаем новый проект из существующих исходников, указывая подпапку library. Контролируем, что target sdk стоит в 15 (Android 4.0.3), а minimal sdk - в ту версию, которая вам нужна (у меня это 7 - Android 2.1).
  3. Проверяем, что в свойствах проекта на закладке Android стоит флажок Library.
  4. В Eclipse запускаем Android SDK Manager, у него в самом конце списка находим Extras и устанавливаем Android support package.
  5. В контекстном меню проекта выбираем Android Tools - Add Compatibility Library...
  6. Все, теперь можно собирать проект и подключать к своему как Library.

воскресенье, 26 февраля 2012 г.

ECM-Journal 2.0

Допилил все-таки версию 2.0.

Основные изменения:
  • Новый дизайн (почти по гайдлайнам Google);
  • Цветовая схема теперь соответствует последней версии сайта;
  • Появилась обложка с материалом главного редактора.

Ссылка на маркет та же. QR-код тоже не изменился:

пятница, 17 февраля 2012 г.

Android: делаем свой шрифт WebView

Некоторое время назад я начал переделывать интерфейс приложения ECM-Journal под новые гайдлайны Google. Одна из рекомендаций этих гайдлайнов состоит в использовании шрифта Roboto. Шрифт стандартный в ICS, но в Android 2.x его надо добавлять и настраивать вручную. Для простых элементов управления или даже списков шрифт настраивается достаточно легко (разве что со Spinner приходится писать несколько "необязательный" код. А вот как быть с WebView?

В принципе, решение находится примерно секунд за 10, но оно не окончательное, ведь в "браузере" может использоваться не только Regular-шрифт, но и другие начертания. Для того, чтобы их использовать, достаточно положить себе полный набор шрифтов Roboto и слегка подкрутить CSS:
<style type="text/css">
<!--
@font-face {
font-family: roboto;
font-style: normal;
font-weight: normal;
src: url("file:///android_asset/Roboto-Regular.ttf") }
@font-face {
font-family: roboto;
font-style: italic;
font-weight: normal
  src: url("file:///android_asset/Roboto-Italic.ttf") }
@font-face {
font-family: roboto;
font-style: normal;
font-weight: bold;
src: url("file:///android_asset/Roboto-Bold.ttf")
}
@font-face {
font-family: roboto;
font-style: italic;
font-weight: bold;
src: url("file:///android_asset/Roboto-BoldItalic.ttf") }
body {
font-family: roboto;
}
--> </style>
Вот такой tip&trick.

пятница, 21 октября 2011 г.

Приложение ECM-Journal - подробный план работ

В ближайшее время все-таки начну выкатывать обновления для ECM-Journal. Что же там появится:
  1. Реактивность интерфейса. Скажем "нет" тормозам. Все, что только можно, будет показываться пользователю как можно раньше.
  2. Индикация загрузки данных.
  3. Более удобная навигация между списками (новое - блоги).
  4. Приведение к новому стилю сайта:
    • визуальное оформление;
    • главная страница;
    • ссылки на разделы сайта и страницы разделов;
  5. Переход по ссылкам внутри приложения (без запуска браузера).
  6. Виджет с новыми материалами.
  7. Уведомления о новых материалах и комментариях.
Причем часть кода нужно будет своевременно синхронизировать в другое приложение  -- DIRECTUM Club.

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

воскресенье, 9 октября 2011 г.

Приложение ECM-Journal

Начал заниматься серьезным обновлением для Android-приложения ECM-Journal. Основные направления разработки:
  1. Увеличение отзывчивости приложения. Это касается как нормальной реализации асинхронности (через AsyncTask вместо потоков), так и показа частичной информации по мере ее готовности.
  2. Небольшие доработки интерфейса (под новый стиль сайта).
Чего точно не будет в версии, так это обратной связи (написания материалов и комментариев, оценки и т.д.). Постинг, скорее всего, для начала отработаем на клубе, и, если все пойдет успешно, можно бует переносить наработки сюда.

среда, 11 мая 2011 г.

Android для самых маленьких

Некоторое время назад один мой знакомый похвастался большим количеством игр на iOS для маленьких детей.
Мне стало интересно, а как обстоит дело под Android.
Важное условие: требовалась качественная локализация игр на русский язык, начиная от описания и заканчивая озвучкой. Потратив пару дней на поиски, я пришел к неутешительным выводам: игр для маленьких детей практически нет. Единственный положительный момент заключается в том, что начали выходить локализации игр Intellijoy на русский: Собери фигуру, Учим цвета и Математика для детей. Игры интересные и очень качественно сделанные. Но их катастрофически мало...

пятница, 22 апреля 2011 г.

Теперь я разработчик под Android

Опубликовал приложение ECM-Journal.

QR-code:

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

воскресенье, 16 января 2011 г.

Про лицензионное ПО

Нельзя сказать, чтобы я одобрял пиратство. У меня дома сейчас два ноутбука (временно может оказаться и три). И на них нет ни одной пиратской программы. Но то, что иногда вытворяют правообладатели... После этого наименее грубое слово, которым их хочется называть, это "копирасты".

Я купил на своем Android-смартфоне Need for Speed Shift. По поводу процесса покупки ничего плохого сказать не могу: и Android Market и Google Checkout работают вполне корректно (расстраивает правда срок возврата ПО - всего 15 минут, за это время и не успеешь толком понять, подходит ли тебе программа/игра).

После первого запуска игра доложила, что ей надо докачать 150 мегабайт данных Ну ладно, что с тобой делать, качай. Благо интернет безлимитный. А вот дальше началось самое интересное. Запускаю игру - появляется заставка, висит пару секунд, потом черный экран и игра вылетает.

Ну нас на такое не возьмешь. Внимательно читаем отзывы и видим, что надо качать "кеш" (те самые 150 мб) с пиратского сайта 4pda.ru. Идем, качаем и ... О, чудо! Игра прекрасно работает.

А теперь внимание вопрос: за что я заплатил 3.77 евро? Проще сразу пойти к пиратам и скачать игру (и кеш, и установочный файл), которая сразу заработает, а не получать себе на голову геморрой за свои же деньги.