Upload
pavel-krivoruchko
View
951
Download
0
Embed Size (px)
DESCRIPTION
Citation preview
Разработка под Android Павел Криворучко, Lilium
Лучшее время – наступило. Android 1st
Место Android на рынке: b2c • 87% продаваемых смартфонов – Android • Повсеместно, доля Android на рынке
смартфонов стала выше iOS • Это касается не только продаж, но и
фактического числа скачиваний
Планшеты, b2c
• В 2013 продажи Android планшетов превысили продажи iPad, обгоняя прогнозы аналитиков
• Для US рынка отдельным важным игроком является Amazon
b2b/Enterprise рынок
Источник: Citrix Mobility report, Q4 2012 (опубликован в марте 2013)
На волне роста популярности BYOD (Bring your own device), основной фокус для b2b специфичной разработки – планшеты. Несколько сфер: транспорт, здравоохранение, телекоммуникации – имеют перекос в пользу Android
Фрагментация?
Все не так плохо!
Разработка: v 1.0
Телефон на 2.3, «фаблет» на 4.1, 10’ планшет на 4.0
Разработка: повышение охвата Оптимизация под еще 2 класса устройств: • entry-level (LG P500, HTC Wildfire, Galaxy ACE и пр.) • 7’ планшеты как отдельный от фаблета тип устройства
Инфраструктура Android: Google, Samsung, Amazon
Google Play Services
Настоящая платформа от Google
Android 2.2 и выше фактически объединены сервисным слоем, который обновляется принудительно, операторо-независим, и может делать с системой практически все, что угодно.
Google Play: консоль разработчика
• За разовые $25 разработчик получает лучшую на сегодняшний день консоль управления приложениями
• Crash reports, сервисы статистики, альфа и бета тестирование – «из коробки»
• Минимальный набор средств разделения прав пользователей • Optimization Tips: их стоит прочесть • Ответы на комментарии пользователей
Google Play: отзывы к приложениям Не стоит бояться плохих отзывов, но не стоит их игнорировать. Наличие фидбека от разработчика снижает число негативных публичных отзывов на десятки процентов.
Google Cloud Messaging • Существенно больше возможностей, чем Push уведомления на iOS • Возможность прямого взаимодействия с конкретным устройством
по XMPP протоколу через облако Google • Размер сообщения – до 4 Кб! • Группировка send-to-sync сообщений (по 4 параметрам) • Ответ с технической информацией о результате доставки без
необходимости отдельного запроса
Google Play Game Services • Первое хорошее решение после смерти OpenFeint • Работает с отдельным приложением и через Google+, со всеми
вытекающими положительными и отрицательными последствиями • Помимо типовых достижений и таблиц рекордов – сохранение
игровых данных в облаке и API для многопользовательских игр • iOS версия позволяет использовать как унифицированное
iOS+Android решение
Google Maps • Широкие возможности для добавления overlay-ев • Кеширование для удобства работы оффлайн • Быстрая работа • Static Maps API и JavaScript API для простых сценариев работы с
картами • Нестабильно работающий геокодер • Квоты на запросы велики, но конечны. Для «тяжелых» сценариев
необходимо учитывать использование бизнес-версии (бесплатно для некоммерческих организаций)
Google Play In-app billing • “Все платежи, получаемые Разработчиком за Продукты, которые
распространяются через Android Маркет, должны поступать через Партнера по обработке платежей.” Дополнительно, в последней версии соглашения сделан акцент на аналогичное требование в играх.
• До 48 часов на отмену платежа. Процент отмен в российском Google Play доходит до 80%.
• Подписки: автоматические, только месячные и годовые • One-time/Consumable и синхронизация покупок
Samsung • Параллельная Google Play инфраструктура • Альтернативный модерируемый магазин с собственными решениями
для in-app покупок (consumable, non-consumable, подписки) • В качестве Push notification решения предлагается использовать GCM • Магазин объединен с магазином для Tizen и частично для Smart TV
Amazon • Собственный магазин приложений – единственный на «родных»
устройствах, и доступный для установки на остальных • Модерация приложений • Собственное API платежей (ограниченный набор стран) • Собственный набор сервисов для игр • Собственный API для карт, максимально приближенный к аналогу от
Google (лицензировано решение от Nokia)
Средства разработки
Возможности • Android SDK/Java • Java + NDK • Unity[3D] • Xamarin • Web-based (PhoneGap/Cordova и аналоги) • C++-based (Cocos2D-x, Marmalade SDK) • Adobe AIR • Прочие
Unity: плюсы • Развитый движок с долгой историей • Отсутствие «детских болезней» (проблем веса, производительности) • Работа движка тестируется на 300+ Android устройствах • Отзывчивая команда разработки, в том числе русскоговорящая • Для Unity Pro есть подписочная опция, что снимает требование в
$3000 на старте для advanced функционала • Потрясающая кроссплатформенность (PC, Mac, iOS, Anroid, WinPhone,
BB10, Web Player, консоли) • Хорошая инфраструктура плагинов для решения типовых задач
Unity: минусы • Нет среды разработки под Linux • Ряд ограничений у бесплатной версии • Невозможно использовать «родные» компоненты Android, при
отсутствии собственных решений аналогичного уровня • Плохо приспособлена для работы с фоновыми процессами • Проблемы интеграции Google Maps при сложных сценариях • Тестирование вне стандартного эмулятора Android
PhoneGap/Cordova • Развитие при поддержке Adobe • Open source, большое количество плагинов • HTML5, подстановка нативных компонентов
• HTML рендеринг заметен, несмотря на все попытки мимикрии под
нативное приложение • Заметно снижена производительность • Для сложных сценариев все равно требуется знание API платформы
Adobe AIR • Пожалуй, самый быстрый путь сборки прототипа • Перенос существующих наработок под мобильные платформы • Исчезла необходимость отдельной установки AIR
• При разработке сложного приложения, форумы и багтрекер Adobe
становятся точкой паломничества • При попытке дать сопоставимую производительность теряются
преимущества по скорости разработки • Большой оверхед и время запуска
Android NDK Использование имеет смысл при полном понимании его необходимости • Использование C++ наработок, дорогих в переписке? • Кроссплатформенное C++ ядро приложения? • Собственный рендеринг, без компонентной базы Android? • Адаптация под специфические аппаратные требования?
Android Developer Tools • Eclipse + ADT
– Максимум возможностей, отстроенная инфраструктура – Исторически слабый UI редактор – Билдер по умолчанию: Ant
• Android Studio (на базе IntelliJ IDEA) – Все еще в статусе Early Preview – Существенное внимание работе с UI приложения – Высокая скорость развития – Билдер: Gradle
Разработка: основы архитектуры
Архитектура Android приложения
• Приложение – процесс или набор процессов, запущенный под собственным ID пользователя, с использованием ядра Linux + Dalvik
• Визуальная часть приложения – один или несколько «Activity» - в общем случае занимающих весь экран, с возможностью одновременного присутствия нескольких Activity на экране
• Фоновые процессы, которые могут поставлять данные нескольким приложениям – Services. При этом, сервис может быть принудительно остановлен пользователем или операционной системой
• Манифест – задает права приложения, состав и возможности доступа к Activities и сервисам
Унификация и совместный доступ
• Broadcast Receivers – общая основа для получения сообщений различных типов для их обработки или передачи в другие части приложения
• Content Providers – унификация доступа к хранилищам данных – от баз данных до файлов
• Ключевым элементом «философии» Android является использование готовых элементов других приложений и предоставление аналогичных прав использования своих элементов для различных типов задач. Это означает, в том числе, что запрошенную задачу может выполнить не «родное» приложение системы, а стороннее
Виджеты • Одна из ключевых возможностей Android, отсутствующая в
конкурирующих ОС • Ключевая проблема: необходимость тестирования на каждой из
альтернативных оболочек, минимум: TouchWiz (Samsung) и HTC Sense • Наличие у пользователя Android устройства не гарантирует
поддержку виджетов на нем • Нет прямой поддержки ввода текста (только с открытием pop-up
окна)
Родные компоненты ОС • Ключевое отличие между 2.х и 4.х – появление в последней темы
Holo в светлом и темном исполнении, обязательной для наличия на всех устройствах. Ранее, приходилось пользоваться темой DeviceDefault, где, в принципе, может быть что угодно
• Несмотря на наличие нескольких проектов по портированию Holo на ранние версии, в целом, достаточным является использование Android Support Library для упрощения работы с компонентами – принудительный Holo-style на старых устройствах выглядит чужеродно
Ключевые паттерны UI • Action Bar: появился в UI Guidelines при релизе Android 3.0, доступен
для 2.1 и выше через Support Library • Back vs Up: кнопка Back (аппаратная/экранная) – навигация по
истории, кнопка возврата сверху слева экрана – подъем вверх по иерархии
• Для малого числа разделов – вкладки, для большего – Navigation drawer
• Работа со списками: в 2.х – попап, в 4.х – появление панели редактирования списка вверху экрана
Библиотеки: компоненты • Android Support Library • ActionBar-Sherlock • Android-PullToRefresh • ActionBar-PullToRefresh
Библиотеки: аналитика • Flurry • Omniture • Google Analytics
Библиотеки: Social • Facebook SDK (авторизация через Facebook приложение, работа с API) • Foursquare SDK (удобная авторизация) • Google+ SDK (авторизация, шэринг) • Для VK есть готовые решения, но в общем случае проще
самостоятельно реализовать работу с нужными API
Библиотеки: Push уведомления • PushWhoosh • Urban Airship
Использование сервиса для рассылки уведомлений с одной стороны – упростит работу с уведомлениями и снимет нагрузку с собственного бэкенда, с другой – несмотря на высокие квоты – рассылки не бесплатны, а также ограничены в возможностях относительно «чистого» GCM.
Рекламные сети, маркетинг • LeadBolt • TapJoy (+API для виртуальной валюты) • ChartBoost • Inner-active • AdMob
Вендор-специфичные SDK • Samsung S Pen SDK • Samsung Multi Window • Meizu: SmartBar • SDK от Qualcomm (AR, Face recognition,
touch-free)
Библиотеки: Crash reporting • ACRA • Testflight • BugSense • Crashlytics • Функционал Crash reporting в Google Analytics SDK
ACRA оптимальна практически во всех случаях: open source, собственное решение для бэкенда, интеграция с множеством сторонних решений, при этом сочетание ACRA+Testflight дает максимальную полноту информации.
Тестирование
Базовые средства • Monkeyrunner : если 10 000 обезьян посадить тестировать
приложение, хотя бы одна его сломает • Любой log viewer на устройстве, например aLogCat • Testflight и/или ACRA для crash reports и удаленного логирования
Для приложений без зависимостей от камеры/сенсоров отлично помогает Samsung Remote Test Lab: десяток живых Android устройств на полчаса/час
На что обратить внимание • Что случится, если в ходе сессии исчезло Интернет-соединение? • Что случится, если некуда записать данные? • Что случится, если данные были записаны на SD карту и она вынута? • Что случится, если уйти с экрана в процессе загрузки данных? • Что случится, если формат данных в ответе сервера некорректен?
Больше тестов! • Мониторинг потребления батареи • Мониторинг стабильности при отключении фоновых процессов • Мониторинг отсутствия утечек памяти при скачивании данных в
фоновом режиме
Fun
Сенсоры
Калибровка всегда должна быть доступна, но даже она не гарантирует ничего
Камера • Samsung, 2.x – требуется интернет при первом использовании • 4.0.2, 4.0.3, 4.0.4 – поломанные API работы со вспышкой, приводящие
к падению приложения. Разные. • Разные размеры изображения по умолчанию • Разные значения зума по умолчанию
• Лучший способ научиться работать с камерой – декомпилировать и
прошерстить исходники Google Goggles
Разное • У актуальной в данный момент версии Яндекс.Карт есть
документированный Samsung-специфичный баг на стыке с нативным кодом
• В 2.3.х дефолтные текстовые поля от HTC при применении встроенных в приложение шрифтов вели себя непредсказуемо
• Выставление для сайта Viewport воспринимается как пожелание, а не как директива
• Лимит оперативной памяти на процесс зависит от производителя: операции с крупными изображениями помогают его ощутить во всей красе
Android: За пределами смартфонов и планшетов
Blackberry 10 • 4.2 миллиона проданных устройств • 2.3 эмулятор в 10.1, 4.2.2 в 10.2 • При отсутствии NDK и Google сервисов
приложение практически не требует адаптации
• Push и платежные сервисы от платформы • Развертывание только в
пользовательском профиле (не корпоративном)
• Дружественность к разработчикам
OYUA • Android консоль на типовом
железе (Tegra 3) с наибольшей финансовой поддержкой
• Обьявлен выход на европейский рынок
• 27% хоть раз платили за контент • Цифры скачиваний и
заработков не впечатляют
Google TV • Канал распространения: Google
Play • Нет поддержки тачскрина • Нет поддержки NDK • Существует в России довольно
условно, лидирующий поставщик Smart TV – Samsung – не использует это решение
Google Glass • Официальный SDK еще не
вышел • Фактически отсутствует на
рынке
Q & A Материалы и ссылки http://lilium.me/hse-android/
Контакты FB: pavel.krivoruchko Skype: dl1t_f E-mail: [email protected]