uk
Feedback
Android Live 🤖

Android Live 🤖

Відкрити в Telegram

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

Показати більше
5 158
Підписники
-224 години
+17 днів
-1030 день
Архів дописів
Серверные приложения на Kotlin — это как на Java, но быстрее и удобнее. Как использовать этот язык для создания бэкенда? Полу
Серверные приложения на Kotlin — это как на Java, но быстрее и удобнее. Как использовать этот язык для создания бэкенда? Получите все необходимые навыки за 5 месяцев на практическом онлайн-курсе «Kotlin Backend Developer» от Otus: — Изучите возможности и фреймворки Kotlin — Сможете использовать корутины для асинхронного программирования — Погрузитесь в тонкости разработки бэкенда — Освоите востребованные инструменты Cassandra, AWS, ELK-stack и т.д. — Реализуете 3 своих серверных приложения После обучения вы сможете разрабатывать очень сложные бэкенд-проекты и овладеете профессиональными навыками, которые необходимы если вы нацелены дорасти до тим лида. 🔥 Успейте занять место со скидкой -20% https://otus.pw/bWFh/

​​Что за Material Navigation Rail? #design #view Одной из фич, которая была детально рассмотрена на прошедшем Google I/O — это работа с гибкими устройствами, планшетами и большими экранами. Видео тут, а одним из упоминаний была пока не самая популярная View — Material Navigation Rail. По сути — это вертикальный Bottom Navigation Bar. Однако, эта View подходит не во всех случаях: например, пользователь использует приложение в альбомной ориентации. В этом случае пространство внизу занято Bottom Navigation Bar, что делает использование контента менее удобным. В статье отлично описывается то, как использовать этот компонент, как настроить различные свойства и стили. Выглядит неплохо, и если ваше приложение предусматривает горизонтальный режим — обратите внимание на него.

​​Базовая информация о темах в Android #theme #design #beginners Использование тем и стилей в Android на первый взгляд достаточно простая, но при детальном рассмотрении — запутанная вещь.😑 Со временем роста проекта использование неправильно настроенных тем и стилей может быть чревато тем, что в приложении появятся противоречивые цвета или несколько оттенков одного и того же цвета. А с миграцией на Compose, ситуация может только ухудшиться, ведь использование стилей там идёт в другом, но похожем ключе. В Android существует довольно много элементов для тем, среди них: Attributes, Styles, Theme, TextAppearance… все они предполагают похожие элементы, но действуют по-разному. Чтобы вам было легче разобраться во всём этом многообразии, советую прочитать эту статью. Автор не только описывает каждый из элементов стилей, но и подсказывает, когда какой правильно применить и как настроить тему в Android. На канале также были полезные статьи на тему стилей, так что если вы хотите сильнее углубиться в настройку тем, то прочитайте ещё и этот пост.

Сегодня Android установлен более чем в 80% смартфонов. А значит, разработчик мобильных приложений для этой операционки — мега
Сегодня Android установлен более чем в 80% смартфонов. А значит, разработчик мобильных приложений для этой операционки — мега-востребованный специалист, который никогда не останется без работы. Как построить карьеру в Andriod-разработке? Почему обучение может оказаться неэффективным? Какие самые распространенные ошибки в обучении допускают разработчики? Образовательная платформа GeekBrains приглашает на вебинар, где вы узнаете об этом всё и даже больше, а так же, сможете пообщаться с деканом факультета «Android-разработка» Александром Аникиным - Senior Android Developer с профильным опытом более 5 лет. Никаких денег, дополнительного ПО и воды — вместо них четкие рекомендации, полезные материалы и сертификат об окончании обучения. Вебинар пройдёт 26 мая, в 19:00. Записывайтесь уже сейчас: https://gb.ru/link/8s~wRd

​​​​Что показали на Google I/O? Статья от Google #conference В дополнение к предыдущему посту, вот summary от Google: что добавилось для Android-разработчиков после уже прошедших докладов. В целом, в предыдущем посте описаны основные моменты, но почитать ещё раз чуть детальнее о новинках всё равно стоит. А может вам просто нравится читать статьи от Google. Ссылка на статью тут.

​​Что показали на Google I/O? #conference Вчера прошёл первый день конференции Google I/O. Было достаточно много заявлений о том, в каких областях развивается Google, на какие темы компания делает акцент и т.д. Мы же коснёмся некоторых из новинок, которые касаются нас, разработчиков. 🔹WearOS обновился. Было много рассказано о коллаборации с TizenOS от Samsung, и что самое интересное — в будущих версиях Samsung будет использовать обновлённый WearOS. Добавили оптимизацию батареи, улучшили скорость работы. Компания говорит о том, что носимые устройства крайне важны, особенно сейчас и их роль будет увеличиваться. Посмотрим, мне кажется, что подобная коллаборация полезна обоим компаниям. 🔹Firebase Extensions. Эта штука уже была добавлена ранее, но сейчас появилась пара новых фич. Суть в том, что есть некий набор расширений, которые вы можете интегрировать себе в приложение за пару часов, и некоторые из этих расширений сделаны не Google, а сторонними компаниями. Добавена оплата подписки через Stripe, а также отправка сообщений через MessageBird. Не уверен, что будет полезно российскому рынку, но посмотрим. Кроме этого, добавлены обновления в личном кабинете Firebase: например, возможность получения быстрой информации о крашах, улучшения каких-то характеристик в новом релизе и т.д. Пока что в alpha, но выглядит любопытно. Теперь давайте поговорим про Keynote Android. Тут также есть неплохие новинки: 🔹новые цвета тем. Теперь помимо стандартных, обычной и ночной темы, есть возможность использовать целую палитру цветов в своих темах. Рассказали, что теперь тема может автоматически выбираться на основании, например, фона устройства. 🔹обновление виджетов 🎉. Теперь виджеты также должны быть синхронизированы с цветами основного телефона. Но самое главное — новое API для построения виджетов. Сессию про виджеты можно посмотреть тут. 🔹launch animations. Теперь система сама создаёт анимацию для вашего приложения. Её можно кастомизировать, но из коробки появилась красивая, плавная анимация старта приложения. 🔹обновления notifications. Изменили внешний вид уведомлений, в целом стало симпатичнее. Было сказано, что если вы использовали стандартное API для работы, то ничего не придётся менять, всё будет выглядеть симпатично и на новых версиях системы. Кроме того, теперь нельзя использовать полностью кастомные view в уведомлениях. 🔹обновления toasts. Как ни странно, не забыли и про этот элемент. Теперь Toast будет показывать иконку приложения из которого он был отправлен. Также, уменьшили длину сообщения (рекомендуется использовать сообщение не больше 2 строк), убрали возможность слишком частой отправки toast пользователю. 🔹добавили blur для кастомных view. Теперь можно добавлять blur из коробки, не нужно придумывать свои собственные решения. Эту штуку давно просили, пообещали хорошую производительность при использовании. 🔹поменяли внешний вид ripple-эффекта и overscroll mode. В целом, это касается изменений дизайна, которые будут включены по умолчанию в системе. Выглядит также свежо и более логично. 🔹haptick playback. Добавили фичу, которой можно отправить media-файл, и он сгенерирует модель для того, чтобы ваш телефон вибрировал в такт этой мелодии 😁. 🔹approximate location. Теперь пользователь может выбирать, давать ли разрешение на точное местоположение девайса или примерное. 🔹добавили задержку на показ нотификаций в foreground-сервисах. Крутое обновление: если ваше приложение делает какое-то быстрое действие в фоне, то теперь пользователя не будут беспокоить уведомления, которые сообщают ему об этом. 🔹изменения на старт foreground-сервисов из фона. Если вы так делали, то теперь придётся немного изменить логику работы. Чуть больше деталей можно посмотреть тут. В целом, конференция показала довольно много интересных штук, хотя многие ожидали больших анонсов и изменений. Какие вещи с конференции вам понравились больше всего?

Друзья, 20 мая в 18:00 (GMT+3), компания Andersen проводит бесплатный онлайн-митап для Androd-разработчиков. Ссылка на трансл
Друзья, 20 мая в 18:00 (GMT+3), компания Andersen проводит бесплатный онлайн-митап для Androd-разработчиков. Ссылка на трансляцию и регистрацию. Вас ждут увлекательные доклады от крутых спикеров. Мария Агеева, Кирилл Розов и Андрей Ляшук расскажут о своем опыте, поделятся своими докладами и ответят на ваши вопросы. Кроме того, мы разыграем 3 годовых сертификата на крутые продукты, которые помогут вам в работе. Жмите на колокольчик, чтобы не пропустить интересную встречу! Бесплатный онлайн-митап для тех, кто хочет пополнить багаж знаний в сфере разработки. Ждём!

Google I/O 2021 #conference Просто напоминаю, что уже сегодня, через несколько часов, начнётся самая масштабная конференция для Android-разработчиков. В этом году она полностью онлайн и бесплатная, поэтому каждый из вас может поприсутствовать на ней. Расписание тут, а также следите за анонсами на канале, ведь конференция принесёт нам много интересностей🙃

​​Для чего нужны value классы? #kotlin Начиная с версии 1.5, в Kotlin появились value-классы. На первый взгляд, это новая функциональность, однако, по сути, она заменяет собой уже известные нам inline-классы, которые, в отличии от inline-функций не встраивались в код. Чтобы избежать этой путаницы, теперь их вывели в отдельную сущность и сделали value-классами. Чтобы понять, для чего нам нужны эти классы, можно воспользоваться примером из статьи. Допустим, у нас есть фукнция, которая на вход принимает параметр в виде duration для показа какого-то сообщения с задержкой: fun showTooltip(message: String, duration: Long) { ... } Сходу непонятно, передавать этот параметр в секундах или в миллисекундах. И даже если переименовать параметр в durationInMillis и добавить описание функции, всё равно есть риск допустить ошибку. Хорошим решением здесь является создание обёртки, которая заставит явно указать единицы измерения. Например: class Duration private constructor ( val millis: Long ) { companion object { fun millis(millis: Long) = Duration(millis) fun seconds(seconds: Long) = Duration(seconds * 1000) } } В этом случае мы спокойно можем модифицировать нашу функцию, чтобы принимать на вход Duration, а дальше создавать нужную нам задержку. Проблема в том, что каждый раз будет создаваться объект и тратиться лишняя память. Для таких случаев идеально подходят value-классы. Всё что нужно — это добавить ключевое слово value перед классом: @JvmInline value class Duration private constructor ( val millis: Long ) { companion object { fun millis(millis: Long) = Duration(millis) fun seconds(seconds: Long) = Duration(seconds * 1000) } } Взамен мы получим класс, который заменит примитив, и мы получим оптимизацию. Чуть больше почитать об этом можно в этой же статье.

​​ListAdapter для RecyclerView #recyclerview Почти все приложения так или иначе используют RecyclerView. И одной из самых важных частей в ней является Adapter. По умолчанию используется RecyclerView.Adapter, где нам требуется переопределить методы для создания и заполнения ViewHolder и указать число элементов в списке. После этого, важно сделать корректное обновление списка: при этом не стоит использовать стандартный метод notifyDataSetChanged(), который обновит полный список, а лучше применить DiffUtil, который корректно обновит только новые элементы. Со временем адаптер может обрасти довольно большим количеством boilerplate code. Для упрощения работы лучше использовать ListAdapter, который: • требует для работы DiffUtil.ItemCallback; • рассчитывает разницу между двумя списками в background-потоке; • добавляет метод submitList(), который принимает на вход новый список, поэтому не нужно больше думать о сохранении списка внутри адаптера. Чуть больше примеров использования этого класса можно найти тут.

​​Android Live на Boosty #android_live За время ведения канала у меня было несколько диалогов с подписчиками, которые изъявляли желание поддержать развитие канала. Однако, я старался избегать этой мысли, не было уверенности в том, что это нужно. Но в последнее время, подписка на цифровой контент и поддержка его индивидуальных создателей получили широкое распространение и в нашем обществе. Многим хочется сделать так, чтобы контент выходил регулярнее и становился ещё лучше. Наконец, на Android Live появились возможность поддержки канала рублём. Сделать это можно при помощи сервиса Boosty одноразовым или ежемесячным платежом. Уже сейчас там есть цель и два уровня подписки. Думаю для начала этого достаточно, посмотрим, зайдёт ли эта возможность. Ну и ответы на пару вопросов, которые могут возникнуть: 0️⃣ Будет ли в будущем контент распространяться за плату? Нет, такого точно не будет, канал останется бесплатным. 1️⃣ Зачем мне поддерживать канал? Поддерживая канал, вы даёте мне понимание того, что контент интересен. Плюс к этому, я смогу инвестировать эти средства в развитие канала: покупка рекламы, оборудования и т.д. 2️⃣ Можно ли доверять Boosty? В целом да. Я не заметил никаких скрытых платежей, сервис принадлежит большой компании и там есть возможность одноразового доната. Кроме того, комиссия за вывод средств одна из самых низких. 3️⃣ Можно ли как-то ещё помочь каналу? Материально пока что нет. Для меня это эксперимент, может быть в будущем такая возможность появится. Но если захотите скинуть кусочек биткоина на развитие — пишите😀. Ну а если вы хотите помочь каналу не рублём, а делом — также пишите, сможем что-нибудь придумать. Ссылка на Boosty тут.

Уверены, вы создаете крутое приложение. А незрячий может им пользоваться? О том, как сделать продукт доступным расскажет онла
Уверены, вы создаете крутое приложение. А незрячий может им пользоваться? О том, как сделать продукт доступным расскажет онлайн-курс для разработчиков (iOS, web и android), дизайнеров и исследователей. Начало 22 мая. В программе: теория, практика и тестирование работ вместе с незрячими и слабовидящими людьми. Теорию будут читать: - Валерия Курмак (AiC), - iOS: Миша Рубанов (Додо Пицца) - Android: Женя Кузнецов (Яндекс Go) - Web: Глафира Жур (SpurIT) Другие приглашенные спикеры расскажут о доступности в геймдизайне, информационной архитектуре, дизайн-системах и куче еще всего. Этот курс для тех, кому важно: 😎 обеспечить доступность своего приложения для любого, включая незрячего и парализованного, 👨‍🦯 прокачаться в создании интерфейсов для людей 💪 повысить свою конкурентоспособность на зарубежном и российском рынке, ✍️ систематизировать знания по инклюзивной разработке, 🧠 стать частью сообщества продвинутых профессионалов. Приходите: https://www.kurmak.info/

​​Операторы shareIn и stateIn #kotlin #flow Операторы позволяют конвертировать cold flow в hot flow: они могут передавать информацию, которая приходит от потока и транслировать её нескольким подписчикам. Эти операторы используются, если требуется улучшить производительность, добавить буфер, если нет подписчиков, ну или добавить механизм кэширования. Между shareIn и stateIn по сути, существует только одна разница: первый преобразует Flow в SharedFlow, а второй — в StateFlow. Вот хорошая статья, которая детально описывает применение этих операторов на примерах. Главное запомнить, что никогда не стоит использовать эти операторы при возвращении Flow из функции: в этом случае у вас будет создаваться новый SharedFlow или StateFlow при каждом вызове функции, и он будет оставаться в памяти до тех пор, пока не очистится Scope или GB не уберёт его при отсутствии ссылок. В любом случае, это поведение неверное.

​​Раздел безопасности в Google Play #security #googleplay Google сделали преанонс safety section в Google Play, который поможет пользователям понять, какую информацию собирает приложение, безопасны ли эти данные, а также дополнительную информацию о безопасности этого приложения. Теперь разработчики должны предоставить причины использования тех или иных данных и объяснить пользователю для чего они потребуются. Кроме этого, добавили ряд дополнительных характеристик, например: 🔹следует ли приложение практикам безопасности, например шифрование данных — думаю, что тут будут в том числе анализироваться подключённые библиотеки. 🔹следует ли приложение рекомендациям, связанными с приложениями для детей, описанным тут; 🔹есть ли у пользователей выбор, делиться определёнными данными или нет; 🔹приложение позволяет удалить данные пользователя, если пользователь удаляет приложение с устройства. Так что теперь все приложения, которые публикуются в Google Play будут обязаны предоставлять эту информацию. Со 2 квартала 2022 года, вся эта информация должна быть в новых приложениях или обновлениях. Ну и скоро нас ожидают руководства для подготовки своих приложений. Подробности можно почитать тут. Вообще эта тенденция, на мой взгляд, положительна и, надеюсь, не добавит много головной боли при подготовке и обновлении приложений. А что думаете вы по этому поводу?

Kotlin продолжает стремительно набирать актуальность в бэкенде. Хотите освоить востребованную технологию? Начните знакомство
Kotlin продолжает стремительно набирать актуальность в бэкенде. Хотите освоить востребованную технологию? Начните знакомство с ней 7 мая с демо-занятия «ООП в Kotlin» в OTUS. За 1,5 часа вы разберете элементы объектной модели этого языка, создадите автоматизированные тесты и несложную ООП-программу. Демо-занятие является частью онлайн-курса «Kotlin Backend Developer». Программа ориентирована на разработчиков с опытом программирования. Для регистрации на урок пройдите вступительный тест https://otus.pw/nXML/

Ребята, а мы начинаем через 5 минут. Самое время налить чай и узнать о том, как сделать ваши кастомные View максимально быстрыми. Ссылка тут.

​​Hilt is stable! #library Hilt — это рекомендованное Google решение для DI. Со вчерашнего дня оно перешло в статус stable, а это значит, что теперь можно использовать его в production. Hilt гораздо проще, чем Dagger, даёт возможность писать меньше boilerplate-кода и гораздо лучше интегрирован с Jetpack-библиотеками. Например, у неё есть интеграции с ViewModel, WorkManager, Navigation, и Compose. Чуть больше информации об этой библиотеке можно взять тут, тут официальная документация, а тут пример приложения с этой библиотекой. Интересно, будет ли Hilt поддерживать KMM в будущем? 🤔

​​Релиз Koin 3.0.1 #koin #kmm Совсем недавно вышла стабильная версия Koin — 3.0.1. Давайте кратко рассмотрим, что нового там добавилось: 🔸переход на mavenCentral вместо JCenter — это было ожидаемо, и теперь нужно поменять зависимости. 🔸поменялся состав зависимостей. Например, раньше были отдельные зависимости для Android: ViewModel, Scope. Теперь всё это объединили в единую зависимость Android. Кроме того, добавилась зависимость для Jetpack Compose, которая пока находится в нестабильной версии. 🔸стабильная поддержка KMM🎉. Наверное, это самая ожидаемая часть релиза: теперь можно подключать Koin в проекты KMM, что даёт нам ещё один крутой фреимворк для внедрения зависимостей. Проект с примером тут. 🔸правки в API, которые улучшают стабильность фреимворка и дают больше возможностей для улучшений. 🔸AndroidX теперь по умолчанию. Теперь нет поддержки support-библиотек, но я думаю, что вы уже давно мигрировали свои проекты на AndroidX. 🔸интеграция с Jetpack Compose — как уже сказал выше, зависимости выделены в отдельный модуль, но теперь также появилсь возможность использовать Koin в проектах с Jetpack Compose. Примеры приложений можно найти тут. 🔸переделали дизайн сайта с документацией. Ссылка осталась прежней. Если нужно больше деталей — переходите на статью с анонсом релиза.

​​Паттерн Builder в Kotlin #patterns Паттерн Builder используется для того, чтобы упростить создание объектов со сложной логикой создания или в случае наличия большого числа конструкторов. По сути, этот правильно сконструированный Builder избавляет нас от того, чтобы думать о том, как создать объект, какой конструктор использовать, а вместо этого возвращает готовый объект или ошибку. Этот паттерн широко используется в различных библиотеках или подходах. Например, в Android одним из самых распространённых примеров является создание AlertDialog при помощи Builder. Вот хорошая статья, которая рассказывает о правильном создании объектов при помощи Builder. Пару тезисов оттуда: 0️⃣ Как ни странно, при создании объекта через Builder важно верно определить конструктор, который будет принимать параметры без которых объект не может существовать. В примере с AlertDialog таким параметром будет Context. Например, в прошлых версиях Android у нас была возможность сделать Notification, который не показывался бы системой, а также приложение не падало с исключением – пример неверно созданного Builder. 1️⃣ Для каждого поля необходимо выставить параметр по умолчанию, например null. При использовании шаблона Builder рекомендуется сделать конструктор private, чтобы ограничить создание объекта только для внутреннего Builder. 2️⃣ Важно сделать верификацию объектов. Автор дает сразу 3 примера, где можно верифицировать добавляемые объекты: сразу после использования метода, при вызове метода build() или уже внутри объекта. Хорошей практикой в данном примере будет использование 2 и 3 подхода одновременно. 3️⃣ Для того, чтобы сделать свой Builder можно использовать Kotlin DSL, который идеально подходит для этого паттерна. Кроме того, не стоит забывать о именованных параметрах, особенно когда вы указываете переменные одного типа. В целом, этот паттерн один из самых популярных, и широко применяется на практике. Используйте его, если у вас есть большое число конструкторов, и вы заметно улучшите читаемость вашего кода. ✌️

​​Опыт перехода с Mac на Ubuntu #offtop Любопытная статья, которая описывает опыт Android-разработчика при переходе с Macbook на кастомный компьютер с Ubuntu. Основным моментом из-за которого он запланировал переход — неготовность платить раз в несколько лет за покупку нового Macbook. Конфигурация его компьютера здесь. В результате он выделил пару минусов: • огромный компьютер, который сложно транспортировать; • баги подключения bluetooth-наушников к некоторым приложениям; • горячие клавиши, которые нужно выучить заново. В остальном — только плюсы: • более шустрая работа git; • более мощный терминал для работы; • ускоренная сборка билдов; • довольно низкая цена за итоговый компьютер. Статья не изобилует различными сравнениями и бенчмарками, но личное мнение всегда интересно. Интересно, как будет сравниваться его компьютер с новыми чипами от Apple, ведь стабильной версии Android Studio вроде как нет (но есть alpha). А был ли у вас опыт перехода с одной операционной системы на другой? Какие ощущения?. Будет интересно, если расскажите в комментариях.