Android N: как Google «закручивает гайки»
В марте этого года была представлена первая превью-версия Android N. Пока она существует в виде беты и дата финального релиза еще не определена (предположительно ОС увидит свет во второй половине 2016 года). Об основных нововведениях и тенденциях, уже сейчас, на этапе беты, прослеживающихся в обновлении, мы поговорили с первым в России Google Developer ExpertДенисом Неклюдовым.
— Здравствуйте! Расскажите, пожалуйста, в двух словах о себе и своей работе.
— Добрый день! Зовут меня Денис Неклюдов. Я работаю в небольшой компании, занимающейся разработкой мобильных приложений для финансовых организаций и стартапов. В компании я занимаю позицию team-lead-а, специализируясь именно на разработке под Android.
Помимо основной работы участвую в записи подкаста Android Dev, где мы с коллегами на профессиональном уровне подробно рассказываем о технологиях Google и разработке в целом.
— Что означает ваш Google Developer Expert? Что он дает вам в профессиональном плане?
— Статус Google Developer Expert я получил год назад. По задумке Google основная задача эксперта GDE — соединять создателей технологий компании и рядовых разработчиков, которые пользуются этими технологиями. Соответственно, эксперт может пользоваться ранним доступом к новым разработкам компании, имеет определенные привилегии при выступлениях на конференциях и т.п.
Лично мне статус GDE позволяет оперативно получать информацию о технологиях, затрагивающих мою профессиональную деятельность. Я использую это и в работе, и при записи выпусков Android Dev. А также заниматься моим любимым хобби: делиться знаниями с людьми на конференциях, в подкастах и в статьях.
— Наверняка вам уже довелось поработать с превью-версиями Android N. Каково ваше мнение о представленном обновлении, как разработчика?
— Для полноценного впечатления еще слишком рано, т.к. на данный момент вышла только вторая техническая preview-версия, далекая от финального релиза. Но основные заложенные в обновление фичи и идеи уже видны.
Не могу сказать, что Android N — это апдейт, который что-то глобально меняет, ломает или приносит в платформу. Это очередное полноценное ежегодное обновление, добавляющее недостающие детали и улучшающие существующие элементы, как прошлогодний Marshmallow.
— В новой версии Android N заявлено довольно много нововведений. Насколько они актуальны для текущего уровня развития аппаратного обеспечения мобильных устройств?
— Нововведений, определяющих большие нагрузки на железо (в частности, процессор и видеокарту) в новом Android нет. Да, появился многооконный режим, но устройства Android давно работают в многопоточном окружении, когда допускается одновременный запуск в фоне нескольких приложений и сервисов. Так что у современных устройств не будет проблем с отображением двух приложений в многооконном режиме.
Для тех, кто близко работает с железом, самое интересное там — поддержка нового игрового движка Vulkan, но, насколько мне известно, он тоже не так уж и требователен к ресурсам. Скорее наоборот — он оптимизирован за счет работы на более низком уровне и позволяет получить большее количество fps при той же производительности аппаратного обеспечения.
— Считается, что интерфейс предыдущих версий Android не очень подходит для устройств с большими экранами. Можно ли сказать (по заявленным нововведениям и их реализации в превью-версиях), что эта проблема будет решена в Android N, в частности за счет многооконного режима?
— На мой взгляд, утверждение о том, что Android плохо адаптирован под большие экраны, спекулятивно. Действительно, существует обывательское мнение о том, что приложения на iPad (написанные для iOS) выглядят симпатичнее и более адаптированы для планшетов, нежели «планшетные» версии приложений Android. Но это нюансы самих приложений. Это связано не с размерами экрана, а с UX при работе с планшетом.
Раньше, возможно, и были подобные сложности. Но еще в 2011 году, когда был представлен Android 4.0 и одна ОС стала работать как на планшетах, так и на других устройствах, у разработчиков появилась возможность делать приложения для планшетов и телефонов в едином установочном файле (едином файле apk). Т.е. вопрос был решен. Я не думаю, что заявленные нововведения как-то кардинально изменят пользовательский опыт от работы с Android-планшетом.
— Какие именно нововведения системы, на ваш взгляд, были наиболее ожидаемы разработчиками?
— Если честно, я не заметил в списках нововведений Android N каких-то wow-фич, о которых все мечтали (о которых можно было бы сказать: «Ну ничего себе, этого мы так ждали, и это они наконец-то сделали»). Существующих в Android инструментов по большому счету достаточно, а принципиальные недостатки, которые хотелось бы поправить, найти сложно. Но могу отметить наиболее мажорные нововведения.
Первый момент — это даже не wow-фича, а скорее наоборот, очередной шаг «закручивания гаек», которое Google осуществляет на протяжении последних нескольких релизов ОС. Он касается проектов внутри ОС, которые лишают приложение ресурсов при работе в фоновом режиме. В принципе, это очень логичный шаг, поскольку изначально Android позволял приложению работать как оно хочет и потреблять сколько угодно ресурсов (как бы давно у пользователя оно не было открыто). Но на рынке работает много недобросовестных разработчиков, которые активно пользуются ресурсами системы, даже когда их приложение в фоне. И с каждым релизом (и в Android Marshmallow, и сейчас в Android N) Google демонстрирует тенденцию ограничения ресурсов системы, а также доступа к сети, доступных давно не используемым, но запущенным в фоне приложениям. Это вполне логично и позволяет продлить работу батареи, избавив пользователя от головной боли о том, что у него в фоне работает куча сервисов, о которых он и понятия не имел.
Второй момент — долгожданная официальная поддержка блек-листа входящих вызовов. Наиболее актуальна она для разработчиков приложений контакт-менеджеров или менеджеров входящих звонков. Все знают о том, что ранее для реализации в Android блокировки нежелательных входящих звонков нужно было совершить магию с reflection, а это не самое приятное решение. Теперь же наконец появилось официальное API.
Важные нововведения, о которых не все журналисты говорят, но разработчики заметили сразу — это изменения в безопасности. В Android N появилась улучшенная запись сертификатов, что позволит делать более безопасные приложения, менее подверженные атакам злоумышленников.
Еще одно хорошее добавление — поддержка icu4j, позволяющей осуществлять различные штуки с локализацией приложений (в частности, работать с форматированием чисел и другими локале-зависимыми вещами).
— А как вы можете прокомментировать переход на новую версию Java?
— Это двоякий момент. С одной стороны переход на новую версию действительно нужен. Это естественный процесс, мы рады, что поддержка появилась. Но переход не столь ожидаем. Многие разработчики, давно мечтавшие о фишках Java 8, уже перешли на Kotlin от компании JetBrains, и Google не возражает против такого подхода. Таким образом, они получили возможность самореализоваться в красивом коде. Кроме того, существует проект retrolambda, который позволяет использовать лямбды при написании кода на Java 7. Он не сильно замедляет процесс компиляции, но при этом ускоряет разработку для любителей вставлять лямбды.
В любом случае разговор о версиях Java — это беседа о красоте кода. Если человек думает о разработке продукта, а не о самореализации в чистоте кода, все это вторично. Поэтому наличие новых фишек из Java 8 — это, безусловно, положительный момент; спасибо Google, что они к этому идут. Но многие фишки Java 8 будут поддержаны только в Android N, а основной или минимальной версией мы ее сможем поставить не скоро — к тому моменту выйдет Java 9, а может и Java 10. И снова это будут какие-то бэкпорты, альтернативные способы использования фич.
— Есть ли нововведения, которые, наоборот, усложнят работу, за исключением уже упомянутого выше «закручивания гаек» с ресурсами для приложений в фоновом режиме?
— Обрезание ресурсов — это, на самом деле, самое важное. Doze Mode, предназначенный для того, чтобы приложения получали все меньше и меньше ресурсов — ключевая проблема, особенно для ребят, которые в фоне долго держат какие-то открытые сокеты, пытаются получать изменения локации пользователя, изменения состояния сети и т.п. Сейчас они все должны держать в голове, что ситуация меняется и нужно переходить на встроенные google message service и push-нотификации.
Еще один момент, о котором стоит беспокоиться разработчикам, начинающим писать под Android N, — это динамическая смена DPI. Теперь пользователь может на лету поменять множитель DPI в своем устройстве, и вся верстка неожиданно изменит свою форму. Поэтому разработчик должен делать максимально резиновый интерфейс при верстке и учитывать, что пользователь не просто может сменить устройство на другое, но и на существующем девайсе сменить множитель DPI.
— Динамическая смена DPI — это «хвост» многооконного режима?
— Постулат о том, что разработчики должны делать резиновый интерфейс, связан с резиновой версткой и многооконным режимом, но динамическая смена DPI сделана больше для людей с плохим зрением. Это позволит им не просто увеличить размер шрифта, как раньше, но и улучшить весь интерфейс, сделать более крупным, чтобы было удобнее рассматривать отдельные элементы на экране. Я бы, к примеру, с удовольствием, покупая дедушке новый смартфон, уменьшил бы значение DPI, чтобы ему было все видно на экране.
— Выпущена еще только вторая Preview-версия для разработчиков. Не рано ли сейчас начинать перенос приложений, тем более дата окончательного релиза системы пока не назначена?
— Тут важно поговорить о категориях разработчиков. Если вы — конвейерный разработчик, который делает для заказчика приложение за приложением, то я не вижу особого смысла сейчас смотреть в сторону Android N и пытаться объяснить заказчику, что уже нужно заложить его. Особенно, если речь идет о приложениях-однодневках для 0,1 пользователя.
Если же вы — серьезная продуктовая компания, и ваш продукт уже имеет миллионы пользователей, то, безусловно, к чему тянуть? Вам в любом случае придется поддерживать Android N. Так сделайте это заранее, хотя бы на бета-версиях ваших будущих релизов. Заложите поддержку и посмотрите, как будут работать ваши приложения с учетом ограничений фонового режима, изменений верстки и т.п. Тем более, если у вас миллионы пользователей, то хотя бы у небольшого процента из них появится Android N, как только выйдет релиз (а может они уже сейчас используют бету). Почему бы не порадовать их поддержкой новых фич и адаптацией своего приложения для этой системы?
— Замечены ли какие-то проблемы в SDK для Android N?
— Насколько мы с коллегами пробовали, никаких особых проблем нет. Можно брать новые фишки и пытаться их использовать. Правда, насколько мне известно (может уже что-то изменилось), полной поддержки всех обещанных в Android N фишек Java 8 пока нет.
— На ваш взгляд, новые приложения разработчикам сейчас лучше сразу ориентировать на Android N или смотреть на более распространенные версии системы?
— Если отталкиваться от наиболее распространенной на рынке версии ОС, то надо разрабатывать под Android 5.1 lollipop и даже не думать о поддержке Marshmallow, т.к. у нее не так уж и много пользователей. Но такой подход изначально не верен, т.к. с каждым днем все больше пользователей обновляется. К примеру, на Marshmallow обновилось многие флагманы от Samsung, а это огромное количество пользователей. Поэтому нужно, конечно, разрабатывать под самые последние версии Android и тестировать и на предыдущих, и на самых популярных — это будет всегда выигрышный подход.
— Спасибо за беседу!
Доклады Дениса Неклюдова на конференции Mobius 2016 (Санкт-Петербург, 4 июня):