Android Live 🤖 – Telegram
Android Live 🤖
5.29K subscribers
52 photos
1 video
800 links
Самые свежие новости, новинки и тренды Android от практикующего разработчика.


Автор: @al_gorshkov,
Чат: @android_live_chat
Личный блог: @al_gorshkov_blog

Рекламу не размещаю
Download Telegram
​​Keyboard Transitions с MotionLayout
#view

Сегодня мне попалась интересная статья, рассказывающая о некоторых фичах при работе с Instets.
В первой части автор рассматривает работу с анимацией клавиатуры, которая появилась в Android 11.

По сути, главная задача — это связать MotionLayout и Instets при помощи WindowInsetsAnimation.Callback.
И конечно, отдельно рассматривается работа и на более низких версиях Android (да, 11 версия сейчас далеко не у всех пользователей).

Ссылка на статью тут.
​​Удалёнка зарубежом
#stream #youtube

Одним из «трендов» ушедшего года можно назвать удалённую работу. Многие компании, которые никогда не нанимали удалённых сотрудников сейчас охотно это делают, а разработчики, которым по душе был офис привыкают к новым правилам... 🙄
Тем не менее, вопросов остаётся много, особенно если вы хотите работать удалённо с зарубежной компанией.

Давайте вместе погрузимся в тему удалёнки и поговорим о ней с разработчиком, который последние 3 года работает на зарубежные компании — Артур Бадретдинов.
Сейчас Артур является Android Team Lead в компании Squire Technologies, а за свою удалённую карьеру посетил 24 страны!🤯

Как найти такую работу, как платить налоги, как привыкнуть к разнице в часовых поясах, какие особенности в менталитете есть при работе? Эти и другие вопросы мы обсудим на YouTube канале Android Live во вторник, 26 января в 18:30.
А ещё, вы можете задать интересующие вас вопросы в форме.

Ссылка на трансляцию тут. До встречи! 😉
​​На чём писать код для Android?
#benchmark

Скорость разработки напрямую зависит от машины, на которой установлена среда разработки: ведь с повышением сложности проекта растёт и время его сборки, а чем шустрее работает машина, тем больше кода мы можем написать.
Да и опытные разработчики не по наслышке знают, как много Android Studio съедает ресурсов. 🙄

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

Сегодня в одном из чатов наткнулся на репозиторий с тестовым проектом при помощи которого можно понять, на сколько шустро ваш компьютер справляется со сборкой проекта. Это не только поможет вам с выбором нового устройства в будущем, но и даст возможность проверить, насколько ваш текущий компьютер хорош относительно других.

Ссылка на репозиторий тут, там же и инструкция по тестированию своей машины. А тут можно почитать уже финальные результаты и решить для себя, что же прикупить для улучшения качества своей работы.
А на какой операционной системе вы работаете?
Anonymous Poll
48%
Windows
35%
Mac OS
17%
Linux
0%
Другое (сообщите в ЛС)
​​Android Dependency Analyzer
#tools

Ресурс, который поможет проанализировать размер зависимостей в Android-проекте: ведь размер приложения — это важная метрика.

Следует сделать два простых действия: перейти на сайт ➡️ Droidanalyser, ➡️ ввести необходимую зависимость. Опционально можно ввести адрес репозитория.

Например, можно понять, что androidx.appcompat:appcompat:1.2.0
занимает около 380 килобайт в проекте.

🔻К недостатку можно отнести относительно медленную скорость работу ресурса.

Уверен, что после анализа зависимостей вы будете внимательнее относиться к тому, стоит ли заносить в проект какую-то новую либу. 👌🏻
​​Инструменты для Room
#tools #comments

Room — отличная библиотека для работы с базой данных, которую сейчас используют многие приложения. Мне кажется, что это один из самых удачных и удобных инструментов из Jetpack. Плюс к этому — это и рекомендованный инструмент от Google.
Но работу с Room можно улучшить, используя следующие библиотеки:

🔹Roomigrantинструмент, который позволяет автоматически генерировать миграции для Room, используя compile-time генерацию кода. По сути, библиотека использует созданные Room схемы и делает миграцию на их основе. Не уверен, что библиотека сделает всю работу за вас, но уж точно поможет автоматизировать эту рутинную работу

🔹RoomExplorer — быстрый viewer базы данных вашего приложения в отдельной Activity. Кроме этого, можно писать запросы для базы данных и видеть результат их работы. По сути, дублирует инструмент из Android Studio, но может быть полезным в случае работы с тестовым билдом.

А какие инструменты для улучшения работы с Room вы знаете?
​​Podlodka Android Crew 3 сезон

Ребята из Podlodka снова делают конференцию для Android-разработчиков. На этот раз нас ждут две недели, которые разделены на секции UI и алгоритмов.

На первой неделе рассмотрим UI: лайфхаки верстки, Constraint best practice, анимации, дизайн-системы, рендеринг UI на уровне системы. Выглядит всё довольно интересно, ведь с вёрсткой мы сталкиваемся на практике очень часто, но даже в этой области всегда есть куда расти.

На второй неделе поговорим про алгоритмы: как готовиться к алгоритмической секции собеседований, где алгоритмы используются в повседневной разработке, как прокачиваться в этой области.

Начало конференции — 1 февраля, а билет сейчас стоит 3900 рублей. Подробнее о программе конфереции можно почитать тут, там же можно приобрести билет.

Для подписчиков Android Live есть две крутых новости.
Во-первых, вы можете получить билет бесплатно, просто оставив свой ник в Telegram в форме до этой пятницы 29 января 18:00. Розыгрыш проведём в этот же день.
Во-вторых, есть промокод на скидку 300 рублей при покупке билета — ANDROID_LIVE_DC3.

Кстати, если вы выиграете билет в розыгрыше, но предварительно купите билет, то вам вернут за него деньги, так что нет смысла тянуть с покупкой до пятницы 😉.
​​Проясним TransactionTooLargeException
#theory

Существует ряд ошибок, которые сложно поймать при разработке или тестировании. TransactionTooLargeException относится к ним: он может не появиться каждый раз во время написания кода, но способен испортить жизнь пользователям во время использования приложения. Дополнительной проблемой является stack, который появляется после этого краша и не несёт информации о том, в каком месте приложения случился crash.

Есть отличная статья, где рассказывается о борьбе с этим исключением: почему оно возникает, как его найти и какие способы оптимизации кода есть, чтобы не поймать такое исключение.

Кстати, одной из главных оптимизаций является передача небольшого количества данных через Bundle, но уверен, что это вы и сами знаете 😉.
​​ WorkManager 2.5.0
#updates #jetpack

Вышла новая версия WorkManager — 2.5.0. Что нового:

▪️управления процессами для установки фоновой работы. Полезная штука, если ваше приложение активно использует несколько процессов, и таким образом можно улучшить производительность фоновых операций. Для этого добавили новый артифакт: androidx.work:work-multiprocess:2.5.0 и метод для установки процесса по умолчанию для работы;

▪️повысили стабильность старта JobService из ActivityManager;

▪️ уменьшили размер буфера повторяемых задач с 7 дней до 1 + продолжительность keepResultsForAtLeast. Стоит быть осторожным, если вы выполняете свои задачи раз в несколько дней;

▪️добавили WorkManager Inspector, что на мой взгляд очень крутое обновление. Пока только в alpha версиях Android Studio, но уже выглядит обещающе и улучшит процесс отладки фоновых задач.

Подробнее про изменения можно почитать тут.
​​​​Результаты конкурса Podlodka Android Crew — 3 сезон
#конкурс

Итак, пришло время опубликовать результаты конкурса, который был описан тут.

В конкурсе принял участие 61 человек, при помощи генератора случайных чисел был выбран победитель — @max_ultra, с чем я его поздравляю! 🎊

Видео с выбором победителя тут. Обязательно участвуйте в новых конкурсах!
Жизнь разработчика в Германии
#интервью #экспаты

Друзья, наконец, вторая статья из рубрики, связанной с жизнью разработчиков в других странах готова.

Как всегда, она получилась объёмной и отвечает на все вопросы, которые вы задавали (и даже больше). Не скупитесь на лайки, потому что это мотивирует искать для вас авторов, а авторов — писать статьи. 🙃

Ссылка на статью тут, а вы обязательно пишите обратную связь в чат или мне в личные сообщения.
​​Kotlin Delegation
#kotlin

Kotlin delegates — одна из самых недооценённых фич языка.
Для многих разработчиков они кажутся сложными, а также многие не знают, для чего именно им нужно писать свои собственные делегаты. 🙄
Но на практике Kotlin delegates оказывается весьма полезной фичей, которая упрощает код и делает его более читаемым.

По сути, делегат передаёт обращения get()и set() к свойству: причём достаточно, чтобы у класса были методы getValue() и setValue() с определённой сигнатурой, без переопределения какого-то интерфейса.

Но одного определения будет недостаточно, поэтому вот пару полезных статей.
В этой автор рассказывает базовые принципы делегатов, а также дает пример для получения аргументов фрагмента, данных из SharedPreferences и получения данных из View.
В следующей рассказывается о других примерах применения этого инструмента.

Ну и не забывайте про документацию, где можно также вдохновиться полезными примерами. ✌️
​​Подробнее про Paging 3
#jetpack #room

Библиотека Paging 3 помогает отображать большие списки в RecyclerView. Сейчас она в статусе alpha, но уже хорошо работает.

Отмечу явные плюсы:
▪️поддержка Flow и Coroutines. Ну и кроме этого есть поддержка RxJava и LiveData, если она вам нужна;
▪️полностью написана на Kotlin;
▪️поддержка разделителей, статусов загрузки, состояний ошибки;
▪️интеграция с Room. Добавлю, что интеграция работает также и при использовании RawQuery из Room. Эта интеграция заметно упрощает работу с Paging 3.

Начать работу с этим классным компонентом поможет эта статья, а разобраться с состояниями загрузки, обновлениями и разделителями для списка — эта.

Добавлю также один баг, который важно учитывать при использовании Paging 3. Эта библиотека работает некорректно, если поместить RecyclerView в ScrollView. Будьте внимательны при использовании!
​​Kotlin 1.4.30 и новый компилятор
#kotlin

Сегодня вышла новая версия языка Kotlin. Появилось достаточно много изменений: ▪️inline-интерфейсы;
▪️изменения в работе inline-классов;
▪️поддержка JVM records.
Полный список изменений можно найти тут.

Плюс к этому JVM IR backend компилятор перешёл в стадию beta 🎊.
О новом компиляторе говорят уже давно, и вообще он обещает быть интересным. Однако, для начала, надо убедиться, что он достаточно стабилен для public релиза. И это то, где вы можете помочь ему стать лучше 📈.

Сделать это достаточно просто:
1️⃣Включите новый компилятор его в своём конфиг файле и соберите проект хотя бы раз. В идеале включить его по умолчанию для вашего проекта, потому что не только сборка, но и дебаг имеют значение в этом тестировании.
2️⃣В случае если будут баги, то можно репортить их в Youtrack или публичный Slack Kotlin.

Давайте вместе доведём новый JVM IR backend до стабильного состояния!
​​Модуляризация Android-приложений
#architecture

Разделение на модули — это довольно важная штука, особенно для больших приложений. Сегодня я нашел несколько свежих статей на эту тему, которые дают базовое представление о разделении приложений на модули с примером реализации.

В первой части рассматриваются причины разделения монолита на модули, а также показывается схема этого разделения. Основные причины — уменьшение скорости сборки, разделение на архитектуру и переиспользование компонентов.

Во второй и третьей частях рассматривается пример ручной и ленивой илициализации модулей их их сбрасывания.
​​Фидбек о канале. Пожалуйста не проходите мимо этого поста.

Всем привет. Это @al_gorshkov, автор этого канала и мне нужна ваша помощь.

Мне супер приятно получать от вас обратную связь в личных сообщениях. Это мотивирует и даёт понимание того, что то, что ты делаешь — не зря. И сейчас мне хотелось бы чуть больше понимать, в какую сторону двигаться дальше.

Я создал небольшую форму с вопросами о Telegram и YouTube каналах. Пожалуйста, ответь на вопросы, ведь всё анонимно, а заполнение займёт буквально 2 минуты. А мне даст мотивацию радовать вас еще более качественным контентом на канале. 🤝

Давайте вместе сделаем Android Live ещё лучше!
​​KMM, Swift UI и Jetpack Compose
#compose #kmm #crossplatform

Мы с вами уже не раз обсуждали Jetpack Compose на канале, и даже провели шикарную live-coding сессию, которую можно посмотреть тут.

Кроме просто замены xml-подхода в нативной разработке, Compose отлично стыкуется с KMM и UI-слоем для Android. Ну а для UI-слоя на iOS подходит Swift UI, который тоже является декларативным фреимворком.

Чтобы попробовать такой подход, есть хорошая статья, где по шагам описывается создание простого проекта с использованием описанных выше технологий. Для архитектуры автор хочет использовать MVI, хотя сейчас там только один экран, который сделан без архитектуры.

В любом случае, статья даёт возможность пощупать классные технологии. А запустить приложение, написанное при помщи Kotlin на iOS — бесценно.😁
​​Как сделать адаптеры в RecyclerView лучше?
#kotlin #recyclerview

При написании стандартных адаптеров в RecyclerView, мы часто сталкиваемся с дублированием кода. Особенно это заметно при использовании разных ViewType. Думаю, что многим знаком подобный код:

if (things.get(position) is Duck) {
return TYPE_DUCK
} else if (things.get(position) is Mouse) {
return TYPE_MOUSE
}


То есть при добавлении нового элемента в список, нам нужно менять адаптер в нескольких местах.

Существует несколько способов улучшения работы с адаптерами:

1️⃣ Использование layout в качестве идентификатора. Стоит помнить, что layout — это уникальный int, который можно использовать в качестве идентификатора. В этой статье автор предлагает использовать TypeFactory, где можно перечислить всю логику работы с идентификаторами для адаптера, и в случае добавления нового элемента – просто дописать строку в этой Factory. Хороший подход, который можно улучшить и использовать без добавления библиотек.

2️⃣ Использование Delegate для описание логики ViewHolder. Второй подход схож с первым. Можно прописать всю логику для работы с ViewHolder в одном классе Delegate. Потом просто регистрировать подходящие делегаты для нужного адаптера, не думая про имплементацию. Почитать подробнее про подход можно тут и уже есть библиотека, которую стоит изучить прежде чем затягивать к себе в проект.

3️⃣ Использование библиотек. Во втором подходе уже был описан пример созданной библиотеки, но кроме неё есть ещё их огромное множество. На мой взгляд, удачная библиотека описана в этой статье и называется Kiel. При помощи Kotlin DSL наш адаптер становится компактным, а кроме этого мы можем использовать библиотеку как с Paging Library, так и с Diff Utils. Стоит обратить внимание и применить подобный подход для своих приложений, если вам нравится DSL.

А как вы улучшаете свои адаптеры?
​​Миграция с SharedPreferences на Jetpack DataStore
#jetpack

Новая библиотека от Google призвана заменить уже давно знакомую библиотеку для хранения небольших данных — SharedPreferences.

Она существует в двух версиях: Preferences DataStore и Proto DataStore. Первая — даёт возможность хранить и получать доступ к данным по ключу, не требует предварительной схемы данных и не предоставляет type safety. Вторая — требует предварительную схему данных через protocol buffer, но при этом предоставляет type safety.

Почему же Google покусились на давно известную библиотеку? Главная проблема — это то, что при чтении данных из SharedPreferences необходимо открыть файл, где хранятся эти значения, и теоретически это может привести к ANR, если вызвать чтение из UI-потока.
Также в SharedPreferences нет type safety, что может привести к ошибкам во время работы приложения и крашам.

Jetpack DataStore избавилась от этих проблем, а также добавила возможность миграции данных, обработку повреждения данных и обработку ошибок при чтении.

В целом, пока эта библиотека в alpha-версии, поэтому стоит внимательно тащить её в основной проект. Уже есть обёртки для RxJava 2 и 3 версии, если вы используете эти библиотеки. Но если думаете мигрировать — вот краткий гайд, который расскажет, как это сделать. Выглядит достаточно просто, поэтому проблем быть не должно. 🤞🏻
​​Data-классы не нужны в pojo
#comments

В чате канала начали активно обсуждать такую тему: стоит ли использовать data-классы в pojo-моделях?

С одной стороны, переопределяются полезные методы, которые могут понадобиться при работе с pojo-классами. Также, data-класс подходит под определение pojo, так как это чаще всего «классы для данных».

Но ведь чаще всего переопределяемые методы не нужны pojo: мы делаем из них другие модели, которые уже могут быть data-классами. Поэтому, мы лишний раз генерируем несколько ненужных нам методов, которые потом не используем.

Например, если мы получаем json с сервера, то чаще всего нам нужно просто сделать из этого json некую модель (например entity для Room) и сохранить её. Никакие методы из pojo-классов не используются.

А как думаете вы? Обсудим в комментариях под постом.
​​IPC в Android
#theory

IPC — это понятие, означающее межпроцессное взаимодействие. Если мы говорим про это взаимодействие в рамках Android, то подразумеваем или общение между различными приложениями, или общение между разными процессами одного приложения (приложение, где некоторые их его компонентов запущены в разных процессах).
Поделюсь с вами несколькими статьями, которые расскажут про эту недооценённую тему больше.

В Android существует несколько видов межпроцессного взаимодействия:
🔹AIDL — приложение вызывает метод другого приложения на том же устройстве и эта процедура называется иначе – RPC (Remote Procedure Call). Так как эти методы могут быть вызваны многими приложениями одновременно, необходимо помнить про потокобезопасность. Расшифровывается он, кстати, как Android-IDL (Interface Definition Language). По факту, это один из самых базовых методов обмена сообщениями на языке. Понять, как настроить приложение на приём и отправку подобных сообщений можно тут.

🔹Messenger — метод похож на предыдущий, имеет такую же архитектуру. Его легче сделать в приложении, так как он по сути создаёт AIDL за вас, тем самым не заставляет разработчика делать лишнюю работу. Правда, цена такой простоты — меньшая гибкость по сравнению с AIDL. Почитать подробнее можно тут.

🔹Broadcast — наверное, самый популярный из описанных методов. Broadcast может быть отправлен только системой или другим приложением, а приложения могут слушать эти сообщения при помощи BroadcastReceiver. Важно помнить про области видимости ваших Broadcast, их следует настроить в AndroidManifest. Детальнее можно почитать тут.