2015 год закончился, а это значит, что настала пора подвести итоги. Что же важного, полезного и интересного для Android-разработчиков произошло в ушедшем году — читайте в нашем блоге.
Год выдался довольно насыщенным не только для рядовых пользователей, которые получили большую линейку новых девайсов, новую версию OS — Android Marshmallow и много изменений в дизайне большинства популярных приложений (Material Design продолжает наступление), но и для Android-разработчиков, которые ощутили не менее существенные изменения в рабочем окружении, библиотеках и паттернах проектирования.
Наконец-то была выпущена библиотека для почти полноценной поддержки гайдлайнов Material Design — Design Support Library. Разработчики получили новые компоненты для реализации FAB, Navigation Drawer, SnackBar, Collapsing Toolbar и других элементов. В первое время было большое количество багов, но на данный момент библиотека уже доработана для повсеместного использования. Также были обновлены и добавлены support-библиотеки, с полным списком которых вы сможете ознакомиться здесь.
Android Marshmallow
Новая версия операционной системы Android принесла не только новые подходы к дизайну интерфейса, но и внесла существенную коррекцию в энергосбережение и права доступа для приложений. Разработчикам была представлена новая версия SDK (API 23), которая вместе с нововведениями принесла и немало проблем:
- Real-time permissions. Теперь для совершения потенциально “опасных” действий разработчикам придется спрашивать разрешения у пользователя прямо во время работы приложения. Подробнее можно посмотреть здесь. Последние версии support библиотек предоставляют достаточно удобный интерфейс для работы с разрешениями, но это решает лишь малую часть проблем, относящуюся к реализации получения прав, но не к логике работы приложения. Например, до сих не утихают споры о том, что делать, если пользователь не предоставил какое-то разрешение.
- DOZE Mode. Команда Google сделала очень важный шаг в сторону оптимизации работы батареи, которая ранее вызывала много критики. Пользователи, не видя историю расхода батареи, обвиняли непосредственно ОС, не понимая, что чаще батарею съедают сомнительные приложения
от не менее сомнительных авторов. Теперь пользователям не нужно об этом заботиться. С приходом двух новых режимов — Doze Mode и App Standby — операционная система перекрывает кислород всем чрезмерно прожорливым приложениям. Doze Mode — это режим, в который переходят абсолютно все устройства на ОС Android Marshmallow спустя определенное время отсутствия активности и без зарядки. И вторым новым режимом является App Standby — автоматическое лишение доступа к ресурсам устройства всех приложений, которые давно не использовались. Разработчикам важно учесть изменения в работе классов JobSheduler и SyncAdapter: при переходе в новые режимы все текущие задачи отменяются, а новые откладываются до пробуждения. Больше информации здесь или тут. Интересный график перехода в doze mode. - Apache. Для кого-то хорошей, а для кого-то не очень, стала новость о недоступности Apache пакетов в API 23. Если вы использовали его в своих приложения раньше, то теперь вам придется либо отказаться от него, либо подключать его отдельно.
- Безопасность системы с помощью самой системы. Разблокировка экрана, работа с датчиком для сторонних приложений вне зависимости от модели смартфона, покупки внутри магазина Google Play и авторизация на сайтах с помощью отпечатка пальца — все это в мире Android стало реальностью. Подробнее.
Google Play Services
С новым обновлением сервисов до версии 8.4 у разработчиков расширились возможности по использованию предыдущих модулей:
- Google Maps — появилась возможность для работы оффлайн. Кроме того, стала доступной реализация карт на Wear девайсах.
- GCM. Обращаем ваше внимание, что модуль для push-уведомлений был переработан и, если ранее вы использовали WakefulBroadcastReceiver, рекомендуется перейти на новую архитектуру, подробности тут.
Также в состав Google Play Services был добавлен целый ряд новых модулей:
- Google Fit API — существует целая индустрия фитнес-приложений, которые используют различные датчики девайса для сбора данных. Теперь это стало проще с новым модулем для работы с датчиками.
- Places API — также теперь появился доступ к Адресам Google (ранее доступ был возможен только через веб API). Однако заметим, что Google все еще не реализовал поддержку прокладки маршрутов на Google картах (Directions API).
- С остальными модулями такими как Google Drive, Mobile Vision API, Marshmallow Permissions, Application Measurement, Nearby Messaging и многими другими вы сможете ознакомиться тут.
Библиотеки и фреймворки
Retrofit 2
Весьма немаловажным стало обновление самой популярной библиотеки для работы с сетью — Retrofit — до версии 2.0. Пока что данная версия находится в статусе beta, но это не мешает разработчикам активно ее применять. Из основных изменений: инкапсуляция запроса в объекте Call (позволяет организовывать более гибкую работу, в том числе и отмену запроса), разбиение библиотеки на компоненты, поддержка различных конвертеров и адапатеров и синтаксический сахар в виде новых аннотаций. Более подробно — выступление Jake Warthon на Droidcon.
RxJava
Этот год также отметился грандиозным ростом популярности фреймворка RxJava в Android. Этот библиотека работает в тесном сотрудничестве с Retrofit и другими библиотеками, например с Realm. RxJava обладает многими преимуществами для выполнения запросов с возможностью комбинирования, повторного запуска и многого другого, что позволяет в том числе удобно использовать ее для работы с сетью. На сегодня очень много ресурсов посвящено данному фреймворку: блоги, хабр и многое другое. Также многие разработчики старательно переписывают стандартный функционал в реактивном стиле: RxBinding, RxPermissions, RxLoader.
Dagger 2
Также ростом популярности отметился Dagger 2. Тут стоит упомянуть его основные отличия с Dagger 1:
- Отсутствие рефлексии, что повысило читаемость исходного кода и увеличило производительность.
- API для работы с POJO.
- Валидация графов на этапе компиляции.
Документация и пример связки Dagger 2 + MVP.
Kotlin
Обещанный релиз этого языка почти состоялся, актуальная версия 1.0 Beta 4. Конечно, иногда могут возникать проблемы, в том числе существует немало жалоб на компиляцию, но JetBrains активно работает над этим. И в целом Kotlin уже вполне готов для использования в боевых проектах. Подробнее тут и тут.
Устоявшиеся практики
Если предыдущий год стал некоторой стандартизацией в плане дизайна интерфейсов, то текущий год был наполнен попытками стандартизировать “внутренности” приложения — то есть предоставить такие паттерны, с помощью которых можно было бы достаточно универсальным образом разрабатывать приложения. Раньше было трудно говорить о какой-то общей архитектуре Android-приложений, однако сейчас большинство компаний уже старательно внедряют практики и подходы для использования устоявшихся паттернов разработки.
MVP
Это одновременно и самый популярный, и самый спорный паттерн. Популярный — потому что он удачным образом позволяет разделять бизнес-логику и элементы интерфейса, что в свою очередь обеспечивает удобство при тестировании. Спорный — потому что абсолютно каждый разработчик имеет свое мнение на счет того, как реализовывать данный паттерн. Посмотреть на некоторые его реализации вы можете тут. Также есть хорошая статья на хабре, которая рассказывает о связке MVP и RxJava.
MVVM
Еще один модный паттерн, который активно используется в WPF. Он набрал популярность в мире Android благодаря разработке Google — Data Binding. Нельзя не отметить того, что эта библиотека еще недостаточна стабильна (имеет статус beta). Впрочем, Google без сомнений доведет ее до ума, поэтому изучать стоит уже сейчас.
Android Studio 2.0
Конец года отметился еще одним знаменательным событием для разработчиков — в ноябре Android Studio 2.0 стала доступной всем в Preview Channel. Очевидно, что представленный функционал делает это обновление самым значимым из всех:
- Instant Run. То, чего так долго ждали многие разработчики. Теперь не нужно деплоить приложение заново каждый раз после нескольких строк изменений. Пока что он работает не очень стабильно и только при использовании Gradle 2.0 alpha (который тоже не отличается стабильностью). Будем ждать, когда Google стабилизирует работу, чему все мы будем несказанно рады.
- Новый эмулятор. О скорости родного эмулятора Android Studio знает каждый разработчик, и нет ничего удивительного, что большинство предпочитает Genymotion. Наверняка Google такая ситуация не устраивала, и теперь в Android Studio мы видим отличный эмулятор, со всем необходимым функционалом: с камерой, GPS
и блэкджеком. - Так же команда Google уделила достаточно внимания на время сборки проектов. По их заверениям, в новой версии проекты собираются в два раза быстрее. Естественно, это не может не радовать.
Более детальную информацию вы можете найти в блоге разработчиков.
Конференции
В 2015 году также прошло немало достойных конференций, таких как Google I/O и множество Droidcon-ов (из которых более всего выделяется Droidcon NYC).
Google I/O 2015
Во время Google I/O 2015 все внимание докладчиков было сосредоточено на новых версиях операционных систем и сервисах Google, поэтому главными темами конференции стали: Android M, обновленная Android Wear, Internet of Things, Google Now, Google Photos, offline-сервисы, новые инструменты для разработчиков, обновленный Google Cardboard. Общий обзор можно посмотреть на GT.
Большинство новостей мы уже рассмотрели отдельно, но о чем-то стоит упомянуть:
- Web experience. Главное обновление здесь – Custom Chrome Tabs. Проблема, которую решает этот инструмент, заключается в следующем: все больше приложений для Android так или иначе задействуют функции браузера, и нередко при использовании той или иной программы вам приходится постоянно переключаться между ней и окном браузера с открытой приложением вкладкой.
- Mobile payments. Наконец-то и Google представила свой вариант системы платежей со смартфона – Android Pay. К смартфону с NFC-чипом привязывается банковская карта, и пользователи могут расплачиваться устройством в тех местах, где к оплате принимают Android Pay.
- Google Maps и YouTube offline. Теперь в Google Maps при отсутствии интернет-подключения вы сможете не просто просматривать карту области, которую заранее подгрузили, но и пользоваться поиском, видеть POI и даже задействовать навигацию с голосовыми подсказками. Это действительно то, чего очень долго ждали пользователи Google Maps.
Droidcon NYC
Эта конференция отметилась большим количеством докладов, посвященных именно разработке, и нет ничего удивительного, что она пользуется заслуженной популярностью. Достаточно даже посмотреть программу, чтобы остаться там надолго. Конечно, нужно выделить доклады Simple HTTP with Retrofit 2, Detect all memory leaks with LeakCanary, Fresco: How Facebook saved a century a day, Kotlin: New Hope in a Java 6 Wasteland и многие другие.
Android Dev Summit
На этой конференции мы увидели немало интересных докладов по самым актуальным темам, из которых особо можно выделить следующие:
- Борьба с Android 6.0: App Standby vs. Doze: Understanding System Sleep, «Mother, May I?» Asking for Permissions и Keep it Secret и Keep it Safe
- Support Library: Guts and Glory
- Android Testing
- Android Application Architecture
- Data Binding — Write Apps Faster
Что нас ждет в 2016 году
Несомненно все больше проектов будут разрабатываться в реактивном стиле с использованием RxJava. Также многие компании и разработчики будут стараться придерживаться таких паттернов как MVP и MVVM, благодаря которым к тому же ожидается рост покрытия тестами, так как это становится более доступным и менее затратным (особенно с учетом последних фреймворков для тестирования).
Стоит ожидать потенциально новых решений в работе с базами данных, так как существующие библиотеки все еще имеют много недостатков.
Еще мы надеемся приблизиться к мечте о minSdkVersion 19 (а может и 21).
И конечно, с каждым годом разработка под Android становится все более интересной, так что будем верить, что 2016 год принесет всем нам еще больших новых идей и решений.
Благодарности
В первую очередь хотелось бы поблагодарить всех активных участников нового сообщества Android разработчиков, которые помогали в написании этой статьи. Некоторых хотелось бы поблагодарить отдельно: atetc iamtodor nexus700120
Автор: e-Legion Ltd.