ru
Feedback
Android Live 🤖

Android Live 🤖

Открыть в Telegram

Самые свежие новости, новинки и тренды Android от практикующего разработчика. Автор: @al_gorshkov, Чат: @android_live_chat Личный блог: @al_gorshkov_blog Рекламу не размещаю

Больше
5 158
Подписчики
Нет данных24 часа
+57 дней
-1030 день
Архив постов
​​UDF с Kotlin Flow #kotlin Классный пример визуализации поведения Kotlin Flow в Android. Автор рассмотрел основные кейсы работы Flow в контексте состояний, пользовательских действий и различных типов. Получилась крутая визуализация, что будет полезно, если вы хотите лучше разобраться с Flow 🤓

​​Зависимости в многомодульном приложении #android При написании многомодульных приложений одним из важных пунктов является управлением зависимостями, которые распространяются на весь проект. Есть несколько хороших подходов для того, чтобы обновлять зависимости одновременно во всех модулях, и вот вам один из них, описанный в статье. Автор использует Kotlin DSL с его более удобным синтаксисом для написания кода в gradle-файлах, и объединяет все зависимости при помощи кастомного buildSrc. В итоге мы можем управлять зависимостями, используя только один файл, а добавлять в модуль таким образом: implementation(Libs.Kotlin.stdlib) implementation(Libs.AndroidX.appcompat) implementation(Libs.AndroidX.coreKtx)

Блог об Android разработке Короткие посты с картинками о различных аспектах, с которыми сталкиваешься во время разработки: •
Блог об Android разработке Короткие посты с картинками о различных аспектах, с которыми сталкиваешься во время разработки: • Да кто этот ваш Context Главная цель архитектуры или зачем столько страданий Handler & Looper Kotlin Coroutine — корутины за 100 слов Xml — зачем префиксы android, tools, app MVI — архитектура за 100 слов Карта канала — t.me/dolgo_polo_dev/36 #партнёрский

​​Абстракция для Strings #android Попался любопытный пример работы со строками в Android. Дело в том, что при использовании строк в больших проектах может возникнуть архитектурная проблема с доступом к Context и получению строк с его использованием. Автор предлагает использовать sealed-класс для обработки подобных кейсов. sealed class TextResource { companion object { fun fromText(text : String) : TextResource = SimpleTextResource(text) fun fromStringId(@StringRes id : Int) : TextResource = IdTextResource(id) fun fromPlural(@PluralRes id: Int, pluralValue : Int) : TextResource = PluralTextResource(id, pluralValue) } } Его просто применять на любых уровнях абстракции. Подробнее в этой статье.

​​Lifecycle of Composables in Jetpack Compose #compose #новичкам Довольно подробный гайд о том, что из себя представляет Jetpack Compose. Будет сильно полезно новичкам, ну и, конечно, тем, кто не особо представляет, как фреимворк работает под капотом. Тут и: 🔸 жизненный цикл composable-функции; 🔸 обновление одной composable-функции из другой; 🔸 логирование событий; 🔸 и о том, как корректно использовать рекомпозицию. Ну и круто, что всё построено на одном примере, который вы вместе с автором можете построить. 👌🏻 Ссылка на туториал тут.

Ежегодный опрос команд российской разработки В этом году начался ежегодный, уже шестой опрос про отечественные мобильные команды разработки. Из него можно узнать: 📖 откуда мобильщики получают новые знания; 💪 какие команды мобильной разработки самые сильные; 🌎 сколько человек решило уехать, а сколько – осталось; 🏡 сколько мобильщиков работает удаленно, а сколько – в офисе; 🌟 в каких компаниях мобильные разработчики хотят работать больше всего. Вот результаты прошлого года, а поучаствовать в опросе этого года можно тут. Опрос займёт не больше минуты. Не забудьте выбрать на одном из шагов также канал Android Live, для меня это очень важно 🤝.

​​App Quality Insights from Firebase Crashlytics #android Начиная с Android Studio Electric Eel у нас появилась возможность смотреть информацию из Crashlytics прямо внутри IDE. Всё будет работать при помощи инструмента App Quality Insights и будет показываться стек вызовов, статистика, вызовы и всё, что мы смотрим внутри окна браузера. Выглядит прям круто, с нетерпением жду хотя бы Beta-версии, чтобы попробовать все в деле. 🔥

​​Как устроен viewModelScope? #android При работе с coroutines мы частенько можем забыть отменить нужную нам джобу в тот момент, когда она нам больше не нужна. К счастью для нас, существует viewModelScope, который уничтожает ненужные coroutines в тот момент, когда уничтожается ViewModel. ❓Давайте рассмотрим чуть детальнее, как он работает внутри. Класс ViewModel содержит внутри Map объектов, кототорые могут содержать любой тип объектов. Нам интересен метод clear(), который вызывается перед методом onCleared() и который мы можем переопределить в нашей модели. Тут вызывается метод closeWithRuntimeException(), который как раз и завершает нужный нам Scope, так как он имплементирует интерфейс Closeable. Подобное поведение можно было довольно просто организовать и самостоятельно, однако пришлось бы сделать кастомный Scope и завершить его в нужном нам месте. Разработчики Jetpack нам чуть-чуть упростили задачу. Ещё больше почитать о внутренней работе ViewModel можно тут.

💣 Разработайте свои первые приложения с помощью Flutter на открытых уроках в OTUS! 🔸 12 июля в 20:00 мск — создадим простую
💣 Разработайте свои первые приложения с помощью Flutter на открытых уроках в OTUS! 🔸 12 июля в 20:00 мск — создадим простую аркадную игру от начала и до подготовки к публикации в магазинах приложений. 👉 Регистрация на урок 🔸 20 июля в 20:00 мск — создадим умный будильник с интеграцией с Google Fit 👉 Регистрация на урок 📚 Вашим наставником на вебинарах станет Дмитрий Золотов — DevOps, FullStack разработчик, Flutter Developer в Яндексе. ❇️ Уроки пройдут в рамках онлайн-курса «Flutter Mobile Developer» для программистов с опытом. Поэтому перед занятиями необходимо пройти вступительный тест. #партнёрский

​​Screenshot tests для Compose #compose Тестирование при помощи скриншотов — довольно эффективный способ тестирования UI. При использовании Jetpack Compose у нас есть аннотации @Preview, которые, по сути и являются слоем для UI. Есть библиотека Showkase, которая помогает преобразовать аннотированные методы в элементы UI для предварительного просмотра. Автор статьи рассказывает о том, как он соединил эту либу с Screenshot testing library от Facebook. Но он решил пойти чуть дальше и попробовал интегрировать Showkase с библиотекой Paparazzi, которая позволяет получить скриншоты приложения без физического устройства или эмулятора. 🤓 В результате у автора получилось вынести тестирование UI при помощи скриншотов на CI. Если скриншоты отличаются от тех, что были получены в новом PR, то создаётся ветка, где показывается diff между двумя ветками. Тут автор рассказывает, как можно интегрировать подобный подход в своём приложении.

​​Screen response time #android Одной из важных метрик, связанных со скоростью работы приложения является то, как быстро рендерятся View, да и в целом экран. Если посмотреть на наших коллег с Web, то там это одна из ключевых метрик и существует множество полезных инструментов для того, чтобы корректно её измерить. С Android всё не так просто, но тем не менее есть парочку инструментов, которые могут нам помочь сделать приложения ещё более качественными. 🧑‍💻Автор статьи делится своими наблюдениями по оптимизации времени рендеринга экранов приложения. Парочку советов из статьи: 1️⃣ Делайте Inflate layout асинхронно — особенно полезный совет в сложных экранах, где создание новых View довольно затратно. Например, можно использовать AsyncLayoutInflater, а тут можно взять AsyncLayoutInflater на основе Coroutines. 2️⃣ Делайте View плоскими — достаточно распространённый совет, который позволяет уменьшить количество фаз onMeasure. 3️⃣ Ленивая инициализация объектов — инициализация объектов довольно затратный процесс, поэтому правильно настроенное создание объектов может здорово помочь сэкономить при рендеринге. В статье можно найти ещё несколько примеров, которые реально применить для любого проекта.

🔥 AvitoTech ищет Android-разработчиков… …сразу в три команды кластера mobile! Вот чем предстоит в них заниматься: 🏄‍♂️ Кома
🔥 AvitoTech ищет Android-разработчиков… …сразу в три команды кластера mobile! Вот чем предстоит в них заниматься: 🏄‍♂️ Команда Speed: развивать системы сборки тестовый фреймворк, тестовый раннер, CI/CD-инфру и инструменты для автотестирования; 🎨 Команда Mobile Design System: работать над консистентностью UI, строить компонентную архитектуру, создавать элементы интерфейса и развивать backend-driven UI; 🏗 Команда Mobile Architecture: упрощать жизнь продуктовым разработчикам через создание гибкой, расширяемой архитектуры мобильных приложений. Залетайте на сайт за подробностями: bit.ly/3Oazhh7 #партнёрский

​​Glance Widget и Work Manager #android Совсем недавно Google решил переосмыслить поведение виджетов и у нас появилось новое API для их создания — Glance. Очень круто, что всё работает в Jetpack Compose стиле, что подразумевает общее API и для виджетов, и для основных элементов экрана. Вот неплохой пример создания виджета, где автор рассказывает то, как создать виджет со сменой изображения, используя WorkManager. Сам API ещё в alpha, но видно, что идёт развитие и переосмысление виджетов. Правда, интересно, станут ли они снова популярными среди пользователей системы. 🤔

​​Spring & Fling анимации в Jetpack compose #compose Physics-based анимации — это тип анимаций, которые, по сравнению с обычными анимациями, дают более естественные и плавные эффекты. В Android существует несколько разных типов подобных анимаций, и Jetpack Compose поддерживает некоторые из них. Автор статьи рассказывает, как добавить Spring & Fling анимации в проект, сделав анимированной любую из написанных View.

💣 Никому не нравится, когда приложение тормозит. Но знаете ли вы, почему так происходит? Разберем этот вопрос на открытом ур
💣 Никому не нравится, когда приложение тормозит. Но знаете ли вы, почему так происходит? Разберем этот вопрос на открытом уроке «UI Profiling» 28 июня в 20:00. 🔥 На занятии рассмотрим основные причины такого поведения и инструменты, призванные найти и исправить эту проблему. Кроме оценки производительности приложения на вашем устройстве, мы рассмотрим несколько сервисов для измерения производительности в бою — на телефонах ваших пользователей. 🎤 Спикер: Артур Бадретдинов, ведущий разработчик в американском стартапе. 🦾 Занятие пройдет в рамках онлайн-курса «Android Developer. Professional» для разработчиков с опытом. ❇️ Для участия в вебинаре пройдите вступительный тест #партнёрский

​​Kotlin Build Reports #kotlin Начиная с версии Kotlin 1.7.0 у нас появилась возможность создания отчётов о сборке. Там содержится информация о различных этапах сборки, а также почему невозможно использовать инкрементную компиляцию. Штука крайне полезная, и её можно использовать, чтобы разобраться, почему сборка занимает так много времени. 👨‍💻 Пока что фича экспериментальная, но попробовать можно уже сейчас. Для этого надо: 1️⃣ В gradle.properties добавляем kotlin.build.report.output=file. 2️⃣ На самом деле, этого достаточно, но есть пару опциональных свойств, которые можно добавить для удобства, детальнее лучше посмотреть тут.

​​Kotlin-Swift interopedia #kmm Полезнейшая таблица, которая показывает совместимость между методами в Kotlin и методами в Swift. Подобная табличка есть также и в доке от Jetbrains, но лучше использовать обе. Будет супер-полезно, если вы разрабатываете совместное API с iOS разработчиками и договариваетесь об использовании каких-то нужных вам фич. 👨‍💻 Ну и примеры кода для каждого кейса тоже очень радуют.

Оффер от Яндекса за 2 дня для мобильных разработчиков🚀 9-10 июля Яндекс проводит Weekend Offer для мобильных разработчиков,
Оффер от Яндекса за 2 дня для мобильных разработчиков🚀 9-10 июля Яндекс проводит Weekend Offer для мобильных разработчиков, участники которого смогут присоединиться к командам Маркета, Еды, Такси и многих других сервисов. Если вы хотите делать продукты для миллионов пользователей и у вас есть опыт коммерческой разработки на iOS, Android, Flutter от 3 лет — регистрируйтесь на сайте и решайте задачи предварительного этапа. 9 июля организатор проведет две онлайн-секции с кодом и уже на следующий день лучшие участники получат офферы от Яндекса. Задачи доступны до 23:59 6 июля. #партнёрский

​​Things every Kotlin Developer should know about Coroutines #kotlin Попался классный набор статей, где автор делится, фактически, полной информацией о Coroutines, правда в структурированной и удобном для чтения виде. Получился здоровский аналог документации, который поможет вникнуть в тему, ну или напомнить себе о каких-то вещах, которые забылись. Статей целых 5️⃣: Part 1: CoroutineContext Part 2: CoroutineScope Part 3: Structured Concurrency Part 4: Exception Handling Part 5: Cancellation

​​Пара фич Android Studio #android Периодически попадаются статьи, которые рассказывают о редких, но довольно полезных фичах Android Studio, которые здорово экономят время. Да, чаще это весьма очевидные советы, но автор этой статьи удивил и порадовал нестандартными решениями. 1️⃣ Прячем ненужные файлы. При использовании библиотек, генерирующих много кода (например, Dagger) можно исключить эти файлы из поиска Android Studio при помощи кастомного Scope. Для этого переходим: Preferences -> Appearance & Behaviour -> Scopes -> + -> local и добавляем маску !file:*intermediates*/&&!file:*generated*/&&!file:R.java. Можно пойти дальше при помощи Preferences -> Editor -> File Types -> Ignored Files and Folders, и скрыть из поиска целые директории, например /build, /generated, что может быть полезно в очень больших проектах. 2️⃣ Быстрые прототипы — крутая фича, которая позволяет быстро набросать или проверить какую-то идею прямо в проекте. Для этого можно использовать Scratch files: создать новый можно при помощи Cmd + Shift + N, выбираете нужный тип файла и получаете песочницу прямо внутри текущего проекта. Попробуйте, очень удобно. 3️⃣ Множественный курсор — известная мне ранее фича, которая позволяет редактировать несколько строк проекта одновременно. Очень полезно при рефакторинге, экономит много времени. При помощи Control + G ставится курсор между одинаковыми частями кода, а при помощи Shift + Option + click поставить курсор вообще в любую область файла. 4️⃣ Расширенный Copy/Paste — крутая штука, которая позволяет видеть историю буфера обмена. Для этого надо использовать сочетание Cmd + Shift + V. 5️⃣ Восстановление из локальной истории — часто приходится восстановить те изменения, которые уже были добавлены в файл, но ещё не залиты в Git. Это можно сделать при помощи right-click -> Local History -> Show History, где можно восстановить требуемый код. 👉 В статье есть ещё больше советов.