Android Live 🤖
Ir al canal en Telegram
Самые свежие новости, новинки и тренды Android от практикующего разработчика. Автор: @al_gorshkov, Чат: @android_live_chat Личный блог: @al_gorshkov_blog Рекламу не размещаю
Mostrar más5 158
Suscriptores
Sin datos24 horas
+57 días
-1030 días
Archivo de publicaciones
5 158
🔥 Как устроена операционная система Android
💣 Заглянем внутрь этой ОС на открытом уроке 21 июня в 20:00. Мы разберем ее устройство с точки зрения архитектуры, что лежит в ее основе, как она загружается, как приложения общаются между собой и другие интересные детали.
📌 На вебинаре выступит Даниил Попов, разработчик эстонской компании Bolt Technology OÜ. Занятие пройдет в рамках онлайн-курса «Android Developer. Professional» от OTUS и позволит протестировать процесс обучения.
🦾 Программа рассчитана на разработчиков с опытом создания Android-приложений.
️️✅ Пройдите вступительный тест, чтобы зарегистрироваться
#партнёрский
5 158
Navigation в Jetpack Compose
#compose
Использование правильно настроенной навигации в приложении — очень важная вещь, которая в будущем, при росте проекта, спасает от многих проблем.
И если в привычной Android-разработке уже существует несколько различных подходов, то с появлением Jetpack Compose приходится искать другие варианты.
Тут автор очень круто сравнивает текущие подходы к навигации и пытается подобрать идеальный вариант. В сравнение попали следующие библиотеки:
👉 Navigation-compose;
👉 Compose-navigation-reimagined;
👉 Voyager;
👉 Navigator-compose;
👉 Simple-stack-compose-integration;
У каждой из них он рассмотрел плюсы и минусы, в некоторых указал, как эти минусы разрешить.
🏆 В итоге, по мнению автора, победила библиотека Voyager, которая вот-вот выйдет в релизную версию.
5 158
App Shortcuts в Android
#android
Вероятно, каждый из нас встречал shortcuts при использовании таких приложений, как WhatsApp, Facebook, Google Chrome. Весьма полезная штука, если вы хотите сделать какую-то быструю навигацию внутри приложения не заставляя пользователя заходить в само приложение.
❓Как её сделать?
На самом деле, всё довольно просто: необходимо добавить пару конфигурационных файлов.
1️⃣ Создаём файл
shortcuts.xml внутри файлов с ресурсами
2️⃣ Добавляем непосредственно </shortcut> внутри этого файла, где создаём его идентификатор и label. Внутри тэга переопределяем тот Intent, который хотим запустить при клике.
3️⃣ Добавляем <meta-data android:name="android.app.shortcuts" внутри AndroidManifest.xml, чтобы всё заработало.
А если вдруг вам нужно сделать динамические shortcuts, то всегда есть возможность воспользоваться ShortcutManager.
Чуть больше информации и примеры кода можно найти в этой статье.5 158
🔥 Задумываетесь о карьере разработчика под Android? Проверьте, подходит ли вам эта профессия на практике! 23 июня в 20:00 пройдет открытый урок специализации «Android Developer».
💣 Мы создадим приложение-таймер для варки яиц с функцией звукового сигнала. Для этого мы будем использовать MVVM, StateFlow, Coroutine.
⁉️ Как будет работать наше приложение? Выбираем степень крутости, нажимаем пуск, приложение само выставляет время и засекает, а по окончанию подает звуковой сигнал и возможно вибрацию.
📕 Занятие проведет преподаватель Антон Мачихин, Android-разработчик в Альфа-Банке.
🟢 Регистрируйтесь на занятие по ссылке https://otus.pw/eXkU/
#партнёрский
5 158
Mobius на день возвращается в теплый ламповый офлайн 🔥
В программе вас ждут:
✔ Кирилл Розов, «История Android от L до T».
✔ Денис Загаевский, «KMM: Reduce'им сложность».
✔ Геннадий Евстратов, «SUI на Flutter».
✔ Алексей Михайлов, «Делаем удобное взаимодействие с Kotlin из Swift».
✔ Рустам Кенджаев, «Взгляд разработчика на качество продукта».
✔ Роман Аймалетдинов, «Coroutines: боль обработки ошибок».
А также дискуссии после докладов и BoF-сессии (вживую, а не в Zoom!), живое общение и нетворкинг, партнерские стенды с развлечениями, мини-докладами и мерчем, вечеринка для участников и та самая атмосфера 😉
📍Санкт-Петербург, Park Inn by Radisson Pulkovskaya. 22 июня.
Подробности и билеты вы сможете найти по ссылке.
Если покупаете билет за свой счет (а не за счет компании), то воспользуйтесь промокодом
androidlive2022JRGpc для получения скидки. Промокод работает только для билетов категории «для частных лиц».
#партнёрский5 158
KotlinDL 0.4
#kotlin
Оказывается, существует библиотека для машинного обучения от JetBrains, которая, конечно же, написана на Kotlin, и уже предлагает довольно много всяких плюшек.
❓Что же появилось в новой версии?
1️⃣ Pose Detection — появилась возможность определения положения тела человека по 17 ключевым точкам на суставах человека.
2️⃣ NoTop модели — представляют из себя более облегчённые классические модели и нужны для более тонкой настройки обучения. Добавился прям целый список этих моделей, что делает работу с библиотекой ещё более удобной.
3️⃣ Новые модели: EfficientDet и EfficientNet.
4️⃣ Добавлено парочку callbacks, что также повышает работу с моделями.
5️⃣ Изменения в Image Preprocessing DSL: удалили
CustomPreprocessor, добавили несколько Preprocessors.
Я не эксперт по ML, но очень радует, что эта сфера развивается и становится всё более популярной. И особенно радует, что у нас развивается ещё одна библиотека для работы с машинным обучением.
👨💻 Подробнее про новинки и больше примеров кода можно почитать тут.5 158
Жизнь в ОАЭ
#интервью #экспаты
Давненько на канале не выходили интервью с разработчиками, которые переехали жить и работать в другие страны.
Думаю большинство из вас видели анонс про ОАЭ. Но, виноват. Сильно задержал публикацию, хотя само интервью уже было готово.
Однако теперь всё отредактировано и его уже можно почитать тут. В комментариях можете задавать дополнительные вопросы автору, если они появятся.
Кстати, Антон тоже ведёт свой Telegram канал как раз про жизнь в Дубае, так что подписывайтесь, если вам интересна эта тема. 🇦🇪
Ну и до следующих анонсов новых стран, уже есть парочку идей😉
5 158
How to write the best Usecase/Interactors ever!
#android
Попалась на глаза неплохая статья, которая рассказывает о принципах написания корректных
UseCases. Если вы совсем не знакомы с тем, что это за слой архитектуры, то стоит ознакомиться с этой статьёй.
ℹ️ ВообщеUseCase — весьма полезный класс, который сильно облегчает взаимодействие между Repository и ViewModel. Правда, существует много разных подходов, связанных с корректным управлением жизненным циклом этого UseCase.
🤔 Автор рассказывает о том, как лучше сделать базовый класс для ваших UseCase, а также как с наименьшим количеством повторяющегося кода запускать, показывать индикатор загрузки и отменять запущенные UseCase.
🖖 Идея с CoroutinesUseCaseRunner удобная, так что рекомендую попробовать подобный подход в своих проектах.5 158
💣 Хочешь попробовать себя в Android-разработке?
📌 Приглашаем 16 июня в 20:00 на открытый урок в OTUS, где мы создадим приложение для трекинга воды. Занятие проведет Даниил Попов, разработчик в компании Bolt Technology OÜ (Эстония).
🚀 Мы разработаем приложение для отслеживания количества воды, которое человек пьет в сутки. Для этого мы нарисуем стаканчик и будем заполнять его по мере того, как пользователь отмечает сколько воды он выпил за сутки.
💻 Вебинар пройдет в рамках специализации «Android Developer». Это возможность оценить материалы курса и познакомиться с экспертом.
❇️ Для участия необходимо зарегистрироваться.
#партнёрский
5 158
Parallax Effect в Jetpack Compose
#compose
Попалась красивая реализация эффекта параллакса, которая написана на Jetpack Compose.
Не уверен на 100%, что вам есть где использовать этот эффект в приложении, но любопытно посмотреть на саму реализацию. Тем более, на столь популярном в последнее время Compose.
@Composable элементы меняют своё положение на основе ориентации устройства и приходящих данных с SensorManager. Далее, создаётся DisposableEffect, который используется для репозиционирования Image.
Автор добавил немного модификаторов для тени и карточки. В итоге получился приятный и красивый эффект.
Чуть больше деталей реализации, ну и, конечно, примеры кода можно найти тут. 🤓5 158
Как мы уменьшили ANR в 3 раза
#android
Ошибка "Приложение не отвечает" — весьма неприятное событие для пользователя, ведь в этом случае он вынужден закрывать приложение и делать незавершённое действие с начала.
Кроме этого, эти ошибки довольно непросто повторить и поправить, ведь они могут то появляться, то исчезать, а также иметь зависимость от устройств.
Вот неплохая статья, которая описывает то, откуда вообще появляются ANR и то, как с ними бороться.
Автор говорит, что они ощутимо снизили процент этих ошибок в своём приложении, а также значительно улучшили время старта приложения.
5 158
🟢 Для новичков, обучение с нуля
🎯 Начать карьеру в этой области с нуля поможет специализация «Android Developer». Вас ждет 10 месяцев освоения трендов Android-разработки на Kotlin от экспертов-практиков из ведущих IT-компаний.
Вы шаг за шагом получите все необходимые для работы навыки: от синтаксиса Kotlin и принципов создания приложений до технологии и инструментов Middle+ уровня.
👉 Оставьте заявку и забронируйте место со скидкой
🔴 Для опытных Android-разработчиков
🦾 Как Android-разработчику перейти на новый уровень? Для этого нужно уметь проектировать архитектуру приложений, глубоко разбираться в Android SDK, выстраивать инфраструктуры с нуля, тестировать приложения и знать современные библиотеки и фреймворки.
Именно этим навыкам обучают на онлайн-курсе «Android Developer. Professional». На протяжении 5 месяцев вы будете работать над собственным проектом — тонким клиентом к сервису с публичным API, которое усилит ваше портфолио
👉 Пройдите вступительный тест и занимайте место на курсе по спец.цене.
#партнёрский
5 158
Material You в Jetpack Compose
#design #compose
Не так давно в Android появилась фича, которая позволяет адаптировать темы приложения под цвета пользовательского интерфейса.
То есть теперь у пользователя, в теории, может быть не только светлая и тёмная темы, но и множество вариантов, в зависимости от преобладающего цвета в его обоях.
Попалась любопытная статья, где автор применяет библиотеку
Material Design 3 к своему небольшому приложению, написанному на Compose.
Тут можно подсмотреть, как лучше хранить цвета и ресурсы для тем в Compose, как лучше сделать динамические темы, да и то, как начать переезд на эту фичу в своём приложении.
Выглядит здорово, надеюсь на поддержку этой фичи в основных приложениях.5 158
Тесты для уведомлений
#android #tests
Попалась любопытная статья, где описывается хороший кейс для тестирования уведомлений в Android.
Вообще, если в проекте и пишутся тесты, то нотификациям уделяется совсем мало внимания: иногда создаётся интерфейс, который мОкается в тестах, но который при этом не имеет отношения непосредственно к показу этих уведомлений.
Автор делится своим опытом, как корректно подключить NotificationManager, как проверить, какое действие выполнилось при открытии пуша, и показывает в реальном приложении написанные для уведомлений тесты.
5 158
Mobius 2022 Spring — три дня докладов, воркшопов, круглых столов и дискуссий обо всем, чем живет мобильная разработка.
Конференция пройдет 25–27 мая, на 80% в онлайне, но в этот раз будет еще и offline-день. 22 июня в Санкт-Петербурге соберутся все, кто соскучился по живым выступлениям, дискуссионным зонам и тусовкам.
В программе набралось много докладов про разработку для Android — от UI до архитектур. Вот некоторые из них:
✔ «Positional memoization, или Как работает одна из главных концепций Jetpack Compose».
✔ «Анимации в Compose».
✔ «Deep Dive Into Deep Link».
✔ «Вращаем невращаемое, или Как повернуть экран звонка».
✔ «Вы за это заплатите! Цена чистой архитектуры».
✔ «Многомодульность и Koin 3».
✔ «Системный подход к улучшению старта Android-приложения».
Найти полную программу и купить билеты можно на сайте. А по этому промокоду вы получите скидку на персональный билет:
androidlive2022JRGpc
#партнёрский5 158
Gradle version catalogs
#gradle
Если ваш проект состоит из одного модуля, то управление зависимостями — довольно простая задача. Но как только вы переходите на многомодульность, то всё становится несколько сложнее.
Есть несколько вариантов решения этой задачи:
1️⃣ Управлять вручную — в каждом из модулей у вас будут повторяться те библиотеки, которые вы добавляете. Думаю, что нет смысла говорить, что этот подход не очень хороший.
2️⃣ Блок ext — подход, которым часто пользуется сам Google, и который как раз решает проблему из первого пункта. Правда в таком случае нет автозаполнения кода при написании.
3️⃣ buildSrc — можно использовать специальный gradle-модуль, где как раз и описать эти зависимости.
Но есть ещё один, менее известный, но очень удобный подход — это Version Catalogs. Он доступен в версии Gradle 7.4, и очень удобно описывает все зависимости проекта.
Подробная инструкция с тем, как всё добавить к себе тут.
Android Studio поддерживает этот формат файлов, а ещё есть плагин, который перенесёт задачу обновления компонентов на CI. 🤓
5 158
Kotlin Contracts
#kotlin
Не очень часто используемой, но интересной и полезной фичей являются
Contracts.
Основная цель контрактов — помочь компилятору Kotlin в анализе кода в случаях, когда разработчик знает о коде больше деталей, чем может увидеть компилятор.
Вообще копилятор делает много крутых оптимизаций и проверок, однако порой он ведёт себя слишком строго и разработчику приходится добавлять или какие-то костыли, или дополнительные проверки для того, чтобы скомпилировать код. Контракты как раз и позволяют сказать компилятору, что всё с кодом нормально и что разработчик понимает, что тут делается.
Я нашёл парочку примеров, где контракты могут быть полезны, ну и станет понятнее, что это вообще за фича:
- автор добавил контракт для проверки пустого списка, который может быть null;
- тут автор использует контракты для проверки лямбда-функций и при инициализации в них переменных;
Будет круто, если поделитесь своими примерами использования этой фичи в своих проектах.5 158
Koin 3.2 - New DSL
#koin
Тут совсем недавно вышло крутое обновление библиотеки Koin, которое позволяет гораздо проще настраивать сам Koin — Constructor DSL.
Раньше типичный модуль в Koin выглядел следующим образом:
class MyClassA()
class MyClassB(val a : MyClassA)
// Let Koin find dependencies for you with get()
module {
single { MyClassA() }
single { MyClassB(get()) }
}
Как видно, в MyClassB нужно добавить get() по количеству параметров, которые в этот класс передаются. Если таких параметров будет много, то и число этих get() будет кратно увеличиваться.
В новой же версии мы получаем более удобную структуру:
class MyClassA(val id : String)
module {
singleOf(::MyClassA)
}
// in calling code
val classA : MyClassA by inject { parametersOf("_id_")}
То есть теперь все вызовы get() останутся в прошлом, и мы получим гораздо более красивый и читаемый код.
Больше примеров кода и инфа о других изменениях по ссылке.5 158
Тут в голове родилась одна идея, но прежде реализации, хотел бы узнать:
Какие сервисы вы используете для прослушивания подкастов?
5 158
Отмена долгих операций
#coroutines #kotlin
Тут ребята из Delivery Club рассказывают о том, как правильно организовать свой код, если все длительные операции считать отменяемыми.
В качестве примера были взяты Coroutines, что здорово.
Даже если в проекте вам не обязательно делать все операции отменяемыми, автор довольно годно рассматривает различные состоятия Coroutines, какое поведение будет при отмене, если имеются дочерние задачи, да и в целом, как сделать отмену контролируемой. 👌🏻
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
