Привет, Хабр!

Вот и вторая часть репортажа о конференции Mobius 24.

День начался сразу с первого доклада и теперь просторный зал Альфа принадлежал андроидам, в отличие от вчерашнего дня :-)

Часть 1

Multiplatform UI with ComposeАлексей Гладков

Алексей поделился полезными советами, как поддержать Compose на разных платформах и конфигурациях экрана. 

Судя по тому, что многие в зале на ходу конспектировали его доклад, с болью адаптации Compose-экрана под разные устройства мы встречаемся часто. Хотя фронтендеры с проблемами вёрстки сталкиваются постоянно, их опыт не всегда подойдет для Compose Multiplatform.

Мы посмотрели, как удобно реализовать архитектуру и навигацию в проекте, который будет собираться под разные платформы, какие common-компоненты лучше выделить. Хороший совет продумать обработку keyboard shortcut-ов для улучшения UX пользователей десктопа, и Compose Multiplatform даёт такую возможность.

Понравилась идея использовать репозиторий с Flow настроек приложения (AppSettings), чтобы слушать изменения и оперативно отрисовывать UI.

В проекте Compose Multiplatform Wizard можно найти весь актуальный на даный момент стек библиотек, единственное, онн обновляется очень часто, примерно раз в неделю.

Общие советы, которые дал нам Алексей: смотреть на разные форм-факторы дисплеев, по возможности проектировать абстрактные экраны, рассматривать компонент экрана как контейнер, что близко к устройству супераппа. И, конечно, толкать дизайнеров, чтобы заранее продумывали UI под разные платформы)

Презентация

Нетворкинг

Всегда интересно посоревноваться в написании кода, и особо популярной сегодня была активность от  ВК - code in the dark. За 20 минут нужно сверстать экран без запуска превью, соревнуются разрабы iOS и Android. Я записалась в прошлый день, но претендентов было много, до меня очередь не дошла, зато классно было смотреть это шоу: выводили код участников на два больших экрана. Болела, конечно же, за Android)

Бессмертное приложениеМатвей Плохов, Avito

У Матвея получился увлекательный доклад про мощь китайских форумов и почти детективная история обхода ограничений китайских вендоров. На новых версиях Android продлить жизнь приложения становится всё сложнее. Зачем это может быть нужно? Например, чтобы отправить уведомление, когда нет интернета, или открывать приложение при подключении зарядки.

Для начала, мы погрузились в теорию о времени жизни компонентов Android (Foreground, Visible, Service, Background), посмотрели на отличия WorkManager и AlarmManager. Вспомнили про Content Provider, Sticky-сервисы (до Android 8), Foregroung сервисы с любимой картинкой уведомления от Duolingo.

Было интересно послушать про OnePixel Activity - способ увеличить работу приложения в фоне с помощью создания Activity, когда пользователь выключил экран, и удаления её при включении. 

Это один из способов открыть Activity из бэкграунда, который в новых версиях андроида уже не сработает. Вывод - современные версии всё более строги ко времени жизни приложения и пути обхода придётся придумывать более хитрые.

Презентация

«Ленивый граф», или Как мы оптимизировали старт приложенияАлександр Таганов, Тинькофф

По мере роста проекта увеличивается и время инициализации DI, индексации и сборки в целом. Один из выходов - использовать ManualDI, в проект Александра он уже интегрирован. Следующий шаг - попробовать ленивую инициализацию зависимостей, то есть отложить их создание до момента использования. Мы рассмотрели синхронный старт экрана, ленивую вью модель и ленивые зависимости (при которых граф зависимостей бьется на части) и сравнили результаты замеров времени инициализации. Когда мы используем ленивый граф зависимостей, inject во вью модель происходит при клике на кнопку (вызове UseCase). Это даёт преимущество по времени выполнения, но всё равно, инициализация вью модели занимает много времени. Копнув глубже, обнаружили, что под капотом у Dagger.Lazy - synchronized блок и double check. Решение здесь - написать свой кастомный интерфейс.
На практике получилось избавиться от AppComponent, и время сборки проекта сократилось в 4 раза. Минус здесь - необходимость оборачивать зависимости в интерфейс Lazy, что усложняет синтаксис.

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

Презентация

5 уроков, вынесенных из опыта реализации pixel-perfect тестирования дизайн-системы в AndroidРустам Гумеров, Тинькофф

Работая в небольшом быстро меняющемся проекте, отвыкаешь от необходимости доводить UI до пиксель перфект и забываешь, что это важно для UX. В больших проектах возникает такая задача, а вместе с ней - вопрос тестирования дизайн-системы.

Каждое изменение её кирпичика нужно проверить, баг это или новая фича. Ручное регресс-тестирование - сравнить скриншот с пиксель-перфект фигмой - очень трудоёмкая задача, которую хочется автоматизировать. Особенно делать такие проверки для каждого merge request.

Функция автоматической проверки может строить карту пикселей, попарно сравнить пиксели с эталоном и вычислить разницу

Для этого можно написать инструментальный тест (параметризованный JUnit-тест). Медленный прогон тестов можно автоматизировать кастомным JunitRunner.
Выводы сделали такие:
“Robolectric Native Graphics закрывает большую часть кейсов скриншот-тестирования.
Если его недостаточно, то придется глубоко изучить Android UI.
Разработка фреймворка тестирования обеспечила масштабирование ДС.
Нет проблем поддержки скриншот- тестов, когда тулинг удобный.”
В конце было много вопросов из зала, тема интересная)

Презентация

Радикальная оптимизация сборки: вынос сборки Android-проектов с машины разработчика на серверПавел Васильев, Positive Technologies

Преимущества сборки gradle-проекта на удалённой машине очевидны, однако, её нельзя считать полноценным способом оптимизации сборки, так что не пренебрегаем традиционными методами оптимизации gradle.

Большой проект требует мощного железа, и не всегда оно есть у разрабов. На помощь приходит сборка на сервере. Для неё нужно обеспечить безопасность (конфиденциальность кода) и возможность переключиться на локальную сборку в случае потери связи с сервером. Также нужна отладка по adb, а не на эмуляторе, а ещё удобнее GUI, а не CLI.

Для GUI избыточный RDP мало подойдёт, Павел рекомендует воспользоваться ssh X11 forwarding (шаринг одного окна) или JetBrains Remote Development.

У CLI тоже есть свои плюсы, он простой и быстрый. Файлы проекта можно передать на удалённую машину через Git или утилитой rsync.

Есть проекты Mainframer и его форк Mirakle - gradle плагины для удаленной сборки, у которых rsync и ssh под капотом.
Недостаток здесь - передача данных по сети.

Павел поделился опытом написания собственного плагина для AS на основе Mirakle, этот способ сочетает в себе и удобство среды разработки, и быстроту. Вот репозиторий этого проекта.

Презентация

Единая авторизация Ozon ID. Как мы повышаем комфорт юзеров, снижая затраты компании.Денис Долгополов, Ozon

Денис рассказал о видах авторизации, о том, как устроены флоу, более подробно потом поговорили про OTP, MobileID, внешние сервисы, доверенное устройство, мультиаккаунт и биометрию. Вспомнили, как OTP пришел на замену логину и паролю. Рассмотрели способы защититься от автоматического чтения кода из СМС. Очень простой и удобный способ авторизации MobileID – запрос на авторизацию отправляется оператору через мобильный интернет, но у этого есть свои ограничения.

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

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

Презентация

Нетворкинг

Сегодня было ещё несколько розыгрышей мерча от ВК, RuStore и СберТеха, всё очень зрелищно и драйвово.

Здорово пофоткались в фотозоне и пообщались с ребятами из Тинькофф).

Закрытие

Эпичным было и закрытие, разыгрывали много призов. Кто не в курсе - был астрологический день Ильи, и призы по забавной случайности доставались в основном Ильям) Наградили самых активных участников, многие выходили с огромными баулами мерча. Яркий финал - общее фото спикеров и экспертов.

Спасибо вам, всем организаторам и участникам за этот опыт!

Ребята, вы крутые!

Буду мечтать повторить его и в следующем году :-)

Больше фото в моём ТГ канале https://t.me/android_w_m

Комментарии (0)