В мае вместе с CTO Pixonic Сергеем Ждановым (я — слева, он — справа) посетили Google I/O 2018 в Калифорнии. Хотелось посмотреть на тренды, технологии, пообщаться с разработчиками (я еще собирался поучаствовать в Codelabs, а то в прошлый раз не удалось туда попасть). В целом, если сравнивать с прошлым годом, Keynote был не такой впечатляющий, но все равно есть о чем рассказать по итогам конференции.
Не буду повторять, что и так уже все слышали, а расскажу, что заинтересовало меня, как разработчика мобильных игр, и что будет полезно знать другим. Начнем.
Что интересного в Android
Во-первых, был анонсировал Android P — сейчас он в бете, но уже можно скачать и посмотреть, как ваше приложение будет на нем работать.
Теперь из интересного:
- Самый важный, на мой взгляд, анонс — это Android App Bundle и Dynamic Delivery. Они дают возможность разбить apk приложения на много маленьких apk для разных устройств. Т.е. вы загружаете в стор один «бандл», а стор уже дробит его на apk в зависимости от процессора, версии OpenGL, языков — и на конкретный девайс загружается уже меньшая версия вашего приложения (аналог App Shrinking в App Store). Некоторые приложения (например, Duolingo) смогли сократить размер билда в 2 раза.
Главное ограничение для разработчиков: «Android App Bundles не поддерживают APK expansion files. Однако, в Google Play все еще остается требование на размер загружаемого приложения в 100Мб или меньше». К тому же в играх на Unity все ресурсы лежат запакованные в ассетах, нет нативного механизма их разделения по разрешениям экрана и языкам. Единственная полезная для нас вещь: разделение по архитектурам процессора. И в данный момент для сборки требуется использовать Gradle 3.2.0-alpha, поэтому желательно подождать стабильной версии. Также необходимо включить Google App Signing. - Battery Profiler. Новый тип профилировщика, который позволяет разобраться, как ваше приложение сжирает батарейку.
- App Time Limit. Позволяет пользователю ограничить время, которое он проводит в конкретном приложении. Т.е. если пользователь решит, что он будет тратить на вашу замечательную три-в-ряд-игру не более 23 часов в день, то
спать он будет всего час в день больше этого времени в деньна своем телефоне он играть не сможет. Мы исследовали вопрос существования API типа КакойЛимитПоставилЮзер(). Итого получается:
— в UsageStatsManager можно посмотреть, к какой категории принадлежит приложение по частоте использования;
— у приложений с низким приоритетом пуш-уведомления приходят с задержкой;
— фоновые процессы поднимаются реже;
— больше информации пока нет! - Dynamic features. То, что запрещено на iOS — можно на Android. Если вы делаете допфичу (к ней может быть привязан код/библиотека/ассеты/что угодно) и она не такая важная и не часто используемая, то пользователь может ее «догрузить» позже. Т.е. он заходит в приложение, видит фичу и если он хочет ею воспользоваться, то подгружает ее со стора. Это также позволяет уменьшить размер загружаемого apk и ускорить время запуска приложения, а значит уменьшить порог входа для пользователя. Вместо Dynamic features разработчикам игр на Unity можно использовать ресурсную систему. И не забывайте про ограничение в 100 Мб на бандл, если все-таки будете использовать Dynamic feature. Выгружать фичи, которые больше не нужны так же возможно.
- Android Jetpack. Так они назвали набор библиотек и инструментов для разработки под Android — Android Studio 3.2, библиотеки для тестирования и много всего прочего. Из приятного — нереально быстрый перезапуск приложения в эмуляторе (поднимается из snapshot'a).
- Kotlin. Второй год подряд Google продвигает
русский рэпнаш Kotlin. Я сходил на Codelabs, сделал там четыре лабы: одну на Kotlin и три на Java — и почувствовал всю боль и страдание при переходе на Java. Kotlin действительно проще и удобнее (сам я программирую в основном на C#).
- App Actions. Группа фич, из которых самая интересная это Action Links — по сути deep link для вашего приложения с метаданными, которые передаются в приложение. App Links нужно поддерживать: научить приложение открывать определенный контент по ссылке. Далее создается файл actions.xml, в котором описывается, что приложение умеет, какие действия выполняет, и как эти действия обернуть в ссылку внутрь приложения.
- Action Notifications. Это отличная возможность присылать уведомления пользователю, даже если у него не установлено ваше приложение (еще один способ привлечь новых пользователей или вернуть старых).
- Firebase Predictions. Теперь можно будет на основе событий от пользователя в аналитике предугадать, например, стоит ли ему предлагать определенную покупку.
- DisplayCutout. Возможность получить инфу о вырезах на экране под камеру. С появлением iPhone X появилось много смартфонов с вырезами, даже у известных брендов типа Asus. И эти вырезы надо учитывать при верстке UI (как мы это делаем для iPhone X, читайте тут).
- Требование использовать API Level не ниже 26 с ноября 2018 и обязательная поддержка 64-битных приложений с 2019 года. Для разработчиков на Unity это означает обязательный переход на IL2CPP на Android.
Что нового и полезного в Play Маркет
Была отдельная сессия о том, как разработчикам игр быть успешными на Google Маркете. Посмотрите обязательно, там очень много полезных вещей для разработчиков, маркетологов, аналитиков и владельцев продукта. Вкратце:
- Internal Test Track. Похожая функциональность Internal Testing есть в TestFlight на iOS. Раньше на то, чтобы выложить билд, добавить туда тестеров и они получили этот билд, уходило несколько часов. Теперь это будет происходить за секунды. Добавляете своих внутренних тестеров, публикуете билд и они сразу же получают к нему доступ.
- Early Access. Если у вас софт-ланч, то можно добавиться в программу Early Access. Это отдельный раздел в Google Play, и игроки смогут найти ваше приложение в сторе и получить к нему ранний доступ — стать бета-тестерами.
- Open Testing. Тоже бета-тестирование, пользователь получает доступ к, возможно, нестабильной версии приложения в обмен на ранний доступ к самым новым фичам. Разработчик получает возможность собирать фидбек без вреда оценки для приложения, так как ревью и оценки пользователя будут видны исключительно разработчику, в сторе они учитываться не будут. Очень удобно.
- Pre-Launch Report. Когда вы загружаете apk в Play Маркет, он проводит над ним ряд тестов на реальных девайсах и выводит первичные метрики — размеры частей приложения, сколько оно загружалось на разных девайсах и другие важный для разработчика метрики.
- Обновился Device catalog. Добавился, например, пункт, почему ваше приложение не поддерживает этот конкретный девайс и что нужно сделать, чтобы это исправить.
- Pre-registration. Как было с Mario Run — вы заранее показываете в сторе, что приложение скоро будет доступно и позволяете им зарегистрироваться за 1-2 месяца до релиза (во время релиза им приходит уведомление). Google утверждает, что некоторые игровые компании, которые уже успели протестировать Pre-registration, смогли повысить конверсию в установки и снизить стоимость на привлечение игроков.
- Organic Acquisition Insights. Появилась возможность узнать, из каких источников к вам на страницу приложения в сторе пришла органика — тоже очень важно для маркетологов.
- Play Instant Games. Это как Instant Apps, только для мини-игр (размер билда не более 10 Мб). На странице игры в сторе появляется отдельная кнопка, которая запускает игру буквально за несколько секунд. Важная фишка — кнопку Instant Play можно встроить прямо в рекламу, результат поискового запроса или кидать инвайты друзьям — он нажимает на ссылку и практически сразу начинает играть на своем девайсе. В случае с Unity пока не очень актуально. Минимальный размер билда на Android, которого я смог достичь на Unity 2018.1 — 8 Мб. Но Unity анонсировали Unity for Small Things, которая будет доступно с 2018.3. Там легковесная физика, графика, ECS и только 2D. Мы пробовали собрать Instant App из Unity, но билд занял больше 20 МБ и не работает (падает на инициализации Unity Player из-за ошибки недоступности какой-то операции записи в режиме Instant App). Так что для нас это пока не вариант, будем ждать Unity.
- Live Ops. Позволяет отображать внутриигровые события и акции прямо на странице проекта в сторе. Пока Google только экспериментирует с этим, но в будущем при нажатии на сообщение можно будет запустить приложение и сразу попасть на экран события.
Code Labs
В этом году я наконец сходил на Codelabs — это такой формат лабораторных работ (как в школе). На рабочем месте выдается iMac с установленными Android Studio и Unity, подключенными Google Pixel и часами (а в некоторых случаях комплектом Android Things). Далее выбираешь одну из тем и в течение примерно 45 минут знакомишься с ней. Что сделал я:
- Написал простенькое Android-приложение на Kotlin.
- Запрограммировал погодную станцию с забором данных с датчиков температуры и давления и отображением их на подключенном дисплее IoT-комплекта.
- Ознакомился с юнит- и UI-тестами на Java для Android-приложения со сложным UI.
- Воспользовался ML Kit (локальной и облачной версиями) для распознавания текста на языках без латиницы с помощью камеры мобильного устройства.
Формат мне очень понравился. Позволяет прощупать инструменты, фичи, быстро научиться делать что-то реально полезное. Думаю, он неплохо бы зашел на конференциях других крупных игроков рынка, например, на Unity Unite. Можно было бы попробовать, скажем, новый Rendering Pipeline и быстро научиться на нем что-то готовить. Недавно на Digital Dragons общались с Unity — закинул им эту идею.
Бонус
На одной из сессий I/O упомянули и наш флагманский проект War Robots, было приятно. Разработчик Pixonic Андрей Грузинов адаптировал игру для Chrome OS, и ребята из Google на I/O призывали всех делать так же (смотреть с 04:28, там всего секунд 15).
P.S. В целом этот Google I/O мне понравился. А теперь самое интересное — что запомнилось вам и что будете использовать?