Podlodka Crossplatform Crew
#conference
Тут ребята из Podlodka сообщают, что совсем скоро состоится неделя первой конференции Podlodka Crossplatform Crew. Старт 14 декабря. Что там будет?
🔹неделя интенсивов и воркшопов по кроссплатформенным технологиям;
🔹общение с крутейшими экспертами и другими участниками комьюнити;
🔹куча новых практик и идей, которые можно унести в свой багаж.
Никаких “Hello World!” на абстрактных примерах, только настоящий опыт внедрения и использования кроссплатформы в реальных проектах от топовых экспертов.
Тем, кто уже хорошо знаком с любой из платформ, неделя Crossplatform Crew будет особо полезна, потому что поможет понять, какая кроссплатформа лучше всего подойдет проекту, и подойдет ли вообще. В программе:
• интервью про кейсы внедрения Flutter, React Native, Kotlin Multiplatform Mobile в разных компаниях;
• воркшопы по интеграции разных технологий в существующий проект;
• рулетка кейсов и шоу “Прожарка”. Описывать бессмысленно – это надо видеть! 🤓
Подробное описание, спикеры и билеты доступны на сайте по выгодной цене.
Ну и традиционно, у моих подписчиков есть возможность выиграть один билет. Как и раньше, нужно просто оставить свой ник Telegram в форме. Форма открыта до 11 декабря, 13:00, розыгрыш будет в тот же день.
Если вы выиграете билет, но при этом вы уже купили один — то не переживайте, организаторы вернут вам деньги, так что затариться по выгодной цене лучше уже сейчас 🤓.
#conference
Тут ребята из Podlodka сообщают, что совсем скоро состоится неделя первой конференции Podlodka Crossplatform Crew. Старт 14 декабря. Что там будет?
🔹неделя интенсивов и воркшопов по кроссплатформенным технологиям;
🔹общение с крутейшими экспертами и другими участниками комьюнити;
🔹куча новых практик и идей, которые можно унести в свой багаж.
Никаких “Hello World!” на абстрактных примерах, только настоящий опыт внедрения и использования кроссплатформы в реальных проектах от топовых экспертов.
Тем, кто уже хорошо знаком с любой из платформ, неделя Crossplatform Crew будет особо полезна, потому что поможет понять, какая кроссплатформа лучше всего подойдет проекту, и подойдет ли вообще. В программе:
• интервью про кейсы внедрения Flutter, React Native, Kotlin Multiplatform Mobile в разных компаниях;
• воркшопы по интеграции разных технологий в существующий проект;
• рулетка кейсов и шоу “Прожарка”. Описывать бессмысленно – это надо видеть! 🤓
Подробное описание, спикеры и билеты доступны на сайте по выгодной цене.
Ну и традиционно, у моих подписчиков есть возможность выиграть один билет. Как и раньше, нужно просто оставить свой ник Telegram в форме. Форма открыта до 11 декабря, 13:00, розыгрыш будет в тот же день.
Если вы выиграете билет, но при этом вы уже купили один — то не переживайте, организаторы вернут вам деньги, так что затариться по выгодной цене лучше уже сейчас 🤓.
Kotlin Flow
#flow #kotlin #documentation
Совсем недавно Google добавили в раздел документации информацию про Kotlin Flow. Давайте посмотрим подробнее, что там есть.
Вначале описывается то, что из себя представляет
Для создания
🔹Flow последователен, поэтому все вызываемые suspend-функции ждут результата выполнения друг друга.
🔹flow builder не может «емиттить» данные через другой CoroutineContext.
Описан также хороший пример для понимая работы Flow.
Дальше есть пример использования оператора
Сразу за ним — использование оператора
📌Важно обратить внимание на использование оператора
Не забыли упомянуть и про обработку исключений, используя оператор
Подробнее можно почитать тут. Как по мне, получилась хорошая документация, описывающая базу для работы с
#flow #kotlin #documentation
Совсем недавно Google добавили в раздел документации информацию про Kotlin Flow. Давайте посмотрим подробнее, что там есть.
Вначале описывается то, что из себя представляет
Flow
: по сути, это тип, который похож на Iterator
, который также отдаёт последовательность данных, но при этом использует suspend-функции для работы. Работа любого Flow
делится на этапы создания, обработки и получения данных.Для создания
Flow
можно использовать специальный builder, в котором можно вызвать функцию emit
для публикации данных во Flow
. Есть также две особенности работы Flow
, о которых надо помнить:🔹Flow последователен, поэтому все вызываемые suspend-функции ждут результата выполнения друг друга.
🔹flow builder не может «емиттить» данные через другой CoroutineContext.
Описан также хороший пример для понимая работы Flow.
Дальше есть пример использования оператора
map
— как пример изменения данных, формируемых Flow. Сразу за ним — использование оператора
collect
для получения данных. 📌Важно обратить внимание на использование оператора
flowOn
, так как он распространяет своё действие на операторы, написанные выше. Не забыли упомянуть и про обработку исключений, используя оператор
catch
.Подробнее можно почитать тут. Как по мне, получилась хорошая документация, описывающая базу для работы с
Flow
. Годно.✌🏻Jetpack Compose и эквивалентные View
#compose #view #tips
При переходе на новую технологию или фреимворк, сложнее всего искать альтернативы уже знакомым конструкциям.
Для многих таким фреимворком сейчас может быть Jetpack Compose.
Тут @loskin поделился крутым ресурсом, который сопоставляет традиционные View с эквивалентами из Compose. Кроме этого, даст ещё и ссылку на пример из GitHub и на официальную документацию🔥.
А если перейти на начальную страницу, то можно найти подборку примеров приложений, использующих Jetpack Compose.
Даже если вы сейчас не пишите на Compose, то стоит сохранить сайт в закладки, так как в будущем он вам обязательно пригодится.
#compose #view #tips
При переходе на новую технологию или фреимворк, сложнее всего искать альтернативы уже знакомым конструкциям.
Для многих таким фреимворком сейчас может быть Jetpack Compose.
Тут @loskin поделился крутым ресурсом, который сопоставляет традиционные View с эквивалентами из Compose. Кроме этого, даст ещё и ссылку на пример из GitHub и на официальную документацию🔥.
А если перейти на начальную страницу, то можно найти подборку примеров приложений, использующих Jetpack Compose.
Даже если вы сейчас не пишите на Compose, то стоит сохранить сайт в закладки, так как в будущем он вам обязательно пригодится.
Подмена Runtime Permissions
#security #subscribers
Тут @vitach скинул свою статью, где описывает, как подменить Runtime Permissions на свежих версиях Android.
Если посмотреть на реализацию системного показа диалога с разрешениями, то можно увидеть
Идея заключается в наложении поверх этой системной
• FLAG_NOT_FOCUSABLE — убирает возможность взаимодействия с методом ввода;
• FLAG_NOT_TOUCH_MODAL — отправляет события touch за пределы нашего окна;
• FLAG_NOT_TOUCHABLE — убирает возможность получать события касания.
В результате мы получаем открытую фейковую
Баг работает на версиях Android >= 7.1.1, так как до этой версии показывался диалог с предупреждением о перекрытии окна.
Ссылка на код тут, а статья с описанием тут. Ну и читайте внимальнее те разрешения, которые даёте установленным приложениям.🙄
#security #subscribers
Тут @vitach скинул свою статью, где описывает, как подменить Runtime Permissions на свежих версиях Android.
Если посмотреть на реализацию системного показа диалога с разрешениями, то можно увидеть
GrantPermissionsActivity
, который запускается после запроса на выдачу разрешений и отображает нам диалог со знакомым интерфейсом.Идея заключается в наложении поверх этой системной
Activity
своей с флагом android:windowIsTranslucent=true
, который позволяет делать Activity
с прозрачным фоном, а также добавить парочку флагов, чтобы убрать фокус:• FLAG_NOT_FOCUSABLE — убирает возможность взаимодействия с методом ввода;
• FLAG_NOT_TOUCH_MODAL — отправляет события touch за пределы нашего окна;
• FLAG_NOT_TOUCHABLE — убирает возможность получать события касания.
В результате мы получаем открытую фейковую
Activity
, где можем написать любое разрешение или текст, но при этом, по факту, вызвать совершенно другое. Правда, в некоторых версиях системы у нас есть отличающийся дизайн этих диалогов, но всегда можно допилить UI, используя описанный подход.Баг работает на версиях Android >= 7.1.1, так как до этой версии показывался диалог с предупреждением о перекрытии окна.
Ссылка на код тут, а статья с описанием тут. Ну и читайте внимальнее те разрешения, которые даёте установленным приложениям.🙄
Результаты конкурса Podlodka Crossplatform Crew
#конкурс
Итак, пришло время опубликовать результаты конкурса, который был описан тут.
В конкурсе приняло участие 15 человек, при помощи генератора случайных чисел был выбран победитель — @YakovlevAleksey, с чем я его поздравляю! 🎊
Видео с выбором победителя тут. Обязательно участвуйте в новых конкурсах!
#конкурс
Итак, пришло время опубликовать результаты конкурса, который был описан тут.
В конкурсе приняло участие 15 человек, при помощи генератора случайных чисел был выбран победитель — @YakovlevAleksey, с чем я его поздравляю! 🎊
Видео с выбором победителя тут. Обязательно участвуйте в новых конкурсах!
Как использовать Ktor на сервере?
#ktor #kotlin #server
Странно видеть подобный заголовок на канале для Android-разработчиков. Ведь для нас создание сервера — это другой мир, в который не особо-то и хочется вникать. 😊
Для своих проектов можно использовать Firebase, но с ростом проекта он может стать дорогим. Можно выбрать другое решение — написать свой собственный сервер на всеми нами любимом Kotlin.
Есть библиотека Ktor, которая позволяет делать асинхронные запросы на клиенте и сервере, используя Kotlin и под капотом построенная на Coroutines. Звучит интересно, да и написать свой собственный сервер для своего приложения — тоже отличный вызов. 😎
Подробнее о том, как использовать этот подход можно почитать тут и тут.
Авторы рассказывают о том, как сделать первый проект, какие зависимости надо добавить, а также какой хостинг можно использовать для работы онлайн.
#ktor #kotlin #server
Странно видеть подобный заголовок на канале для Android-разработчиков. Ведь для нас создание сервера — это другой мир, в который не особо-то и хочется вникать. 😊
Для своих проектов можно использовать Firebase, но с ростом проекта он может стать дорогим. Можно выбрать другое решение — написать свой собственный сервер на всеми нами любимом Kotlin.
Есть библиотека Ktor, которая позволяет делать асинхронные запросы на клиенте и сервере, используя Kotlin и под капотом построенная на Coroutines. Звучит интересно, да и написать свой собственный сервер для своего приложения — тоже отличный вызов. 😎
Подробнее о том, как использовать этот подход можно почитать тут и тут.
Авторы рассказывают о том, как сделать первый проект, какие зависимости надо добавить, а также какой хостинг можно использовать для работы онлайн.
Jetpack Compose — Live coding сессия
#compose #youtube
Друзья, у меня для вас хорошая новость. Канал Android Live расширяется и переходит в том числе и на YouTube!
И первая трансляция будет связана с горячей темой — Jetpack Compose. 😎
Да-да, тот самый, новый фреимворк, который позволяет писать UI в декларативном виде и в будущем заменит текущий xml-подход.
Вы много читали о нём на канале, а может быть уже попробовали его в небольших проектах.
В любом случае у вас могли остаться вопросы, ответы на которые вы можете получить на стриме!
Гостем будет Григорьев Дмитрий — автор канала который целиком посвящён Jetpack Compose и имеет внушительный опыт написания приложений при помощи Jetpack Compose.
Вместе с ним мы сделаем простое приложение, где рассмотрим:
🔸 как лучше строить архитектуру;
🔸 как делать списки из разных типов view;
🔸 что делать с навигацией между разными экранами;
🔸 как сделать анимации;
🔸 что делать с текущими приложениями;
🔸 и много другое.
Уже сейчас вы можете дополнить трансляцию интересующими вас вопросамм, задав их в форме.
Стрим состоится 21 декабря в 18:30 по МСК. Ссылка на трансляцию появится позже, а пока можете подписаться на пока пустой канал Android Live, чтобы не пропустить новые видео. 🤓
#compose #youtube
Друзья, у меня для вас хорошая новость. Канал Android Live расширяется и переходит в том числе и на YouTube!
И первая трансляция будет связана с горячей темой — Jetpack Compose. 😎
Да-да, тот самый, новый фреимворк, который позволяет писать UI в декларативном виде и в будущем заменит текущий xml-подход.
Вы много читали о нём на канале, а может быть уже попробовали его в небольших проектах.
В любом случае у вас могли остаться вопросы, ответы на которые вы можете получить на стриме!
Гостем будет Григорьев Дмитрий — автор канала который целиком посвящён Jetpack Compose и имеет внушительный опыт написания приложений при помощи Jetpack Compose.
Вместе с ним мы сделаем простое приложение, где рассмотрим:
🔸 как лучше строить архитектуру;
🔸 как делать списки из разных типов view;
🔸 что делать с навигацией между разными экранами;
🔸 как сделать анимации;
🔸 что делать с текущими приложениями;
🔸 и много другое.
Уже сейчас вы можете дополнить трансляцию интересующими вас вопросамм, задав их в форме.
Стрим состоится 21 декабря в 18:30 по МСК. Ссылка на трансляцию появится позже, а пока можете подписаться на пока пустой канал Android Live, чтобы не пропустить новые видео. 🤓
Android Live 🤖 pinned «Jetpack Compose — Live coding сессия #compose #youtube Друзья, у меня для вас хорошая новость. Канал Android Live расширяется и переходит в том числе и на YouTube! И первая трансляция будет связана с горячей темой — Jetpack Compose. 😎 Да-да, тот самый…»
Room и опциональные параметры
#room
Есть достаточно интересная фича Room о которой не написано в документации, но которая может здорово облегчить жизнь разработчикам.
Думаю, причина заключается в том, что эта функция лишь косвенно связана с Room, а больше связана с написанием SQL-запросов. 🙂
Опытным путём получилось её найти, и спешу поделиться этим лайфхаком с вами.
Допустим, у вас в приложении есть список людей. При этом по умолчанию выводится полный список, но пользователь приложения может выбрать параметр с именем человека, и вам надо отфильтровать список по этому параметру.
В Kotlin у нас есть возможность использовать опциональные параметры для функции, и первое решение, которое приходит в голову — это написать запрос, используя их:
При такой записи параметр считается за часть запроса, и не передаёт
Но можно чуть-чуть поменять запрос, и всё работает корректно:
При такой записи параметр
Особенно круто эта фича заходит, если фильтр состоит из нескольких полей (3 и более).
А какие у вас есть неочевидные кейсы при работе с Room?
#room
Есть достаточно интересная фича Room о которой не написано в документации, но которая может здорово облегчить жизнь разработчикам.
Думаю, причина заключается в том, что эта функция лишь косвенно связана с Room, а больше связана с написанием SQL-запросов. 🙂
Опытным путём получилось её найти, и спешу поделиться этим лайфхаком с вами.
Допустим, у вас в приложении есть список людей. При этом по умолчанию выводится полный список, но пользователь приложения может выбрать параметр с именем человека, и вам надо отфильтровать список по этому параметру.
В Kotlin у нас есть возможность использовать опциональные параметры для функции, и первое решение, которое приходит в голову — это написать запрос, используя их:
@Query("SELECT * FROM User WHERE name = :name")
fun getUsers(name: String? = null): List<User>
При такой записи параметр считается за часть запроса, и не передаёт
name
, в этом случае список будет пустым. Но можно чуть-чуть поменять запрос, и всё работает корректно:
@Query("SELECT * FROM User WHERE (:name IS NULL OR name = :name)")
fun getUsers(name: String? = null): List<User>
При такой записи параметр
name
будет игнорироваться, если он будет null, и возвратится весь список, имеющийся в базе данных. Особенно круто эта фича заходит, если фильтр состоит из нескольких полей (3 и более).
А какие у вас есть неочевидные кейсы при работе с Room?
Android Study Jams. Ещё митапы
#intro
В начале месяца я рассказывал вам о мероприятии для начинающих разработчиков — Android Study Jams, которое было организовано студенческим сообществом из Саратова и где я был спикером.
Мероприятие прошло хорошо, и у тех, кто хотел побывать на нём, но не смог, есть ещё целых два шанса прикоснуться к разработке под Android.
Первое мероприятие будет сегодня, 17 декабря в 17:30 по МСК. Зарегистрироваться можно тут, а организатором является DSC Брянск ✌️
А если у вас не получится присоединиться сегодня, или останутся вопросы по приложению, то есть шанс задать их завтра, 18 декабря в 18:30 по МСК. Детали тут, а организатором является DSC Воронеж.
Здорово, когда в разных городах создаются новые сообщества и организуются мероприятия, где с нуля можно попробовать технологии.
#intro
В начале месяца я рассказывал вам о мероприятии для начинающих разработчиков — Android Study Jams, которое было организовано студенческим сообществом из Саратова и где я был спикером.
Мероприятие прошло хорошо, и у тех, кто хотел побывать на нём, но не смог, есть ещё целых два шанса прикоснуться к разработке под Android.
Первое мероприятие будет сегодня, 17 декабря в 17:30 по МСК. Зарегистрироваться можно тут, а организатором является DSC Брянск ✌️
А если у вас не получится присоединиться сегодня, или останутся вопросы по приложению, то есть шанс задать их завтра, 18 декабря в 18:30 по МСК. Детали тут, а организатором является DSC Воронеж.
Здорово, когда в разных городах создаются новые сообщества и организуются мероприятия, где с нуля можно попробовать технологии.
Почему Kotlin Synthetics Deprecated?
#kotlin
Несколько месяцев назад Android Kotlin Extensions Gradle плагин был помечен depricated. Он давал нам две классных фичи:
• Synthetics — плагин, который позволяет заменить findViewById;
• Parcelize — плагин, который позволяет создавать Parcelable при помощи одной аннотации, без использования boilerplate.
Parcelize никуда не уходит, а только перемещается в отдельный плагин kotlin-parcelize, а вот Synthetics уходит навсегда. Давайте посмотрим предпосылки, почему это произошло.
Но прежде рассмотрим все существующие подходы для поиска View.
1️⃣findViewById — функция, которая проходит по иерархии View и находит по идентификатору ту, которая необходима.
Имеет ряд существенных недостатоков:
➖метод поиска дорогой и разработчики часто используют этот метод повторно не задумываясь о последствиях производительности;
➖метод не null safe, то есть если в дереве не найдётся View с переданным идентификатором, то будет
➖нет кастования до требуемой View до Android API 26;
➖много boilerplate кода, особенно когда в классе много View.
Есть библиотека Butter Knife, которая заметно уменьшала количество кода, однако и сократила скорость сборки приложения, к тому же не решала ряд проблем. Сейчас она также depricated.
2️⃣Kotlin Synthetics — по сути вызывал описанный выше метод единожды и кэшировал полученные значения.
Из плюсов:
➕нет boilerplate кода, ведь всё что требуется — это настроить плагин в Gradle и использовать идентификаторы прямо из xml-файла;
➕type safety, то есть вам не надо делать никаких кастов.
Но давайте пройдёмся по недостаткам:
➖частично null safe. К счастью, если вы удалите какую-то view из xml, то в коде также будет подсветка удалённой View. Однако, если вы используете несколько конфигурационных файлов, то есть шанс нарваться на
➖загрязнение namespaces. Если вы имеете несколько одинаковых идентификаторов в разных xml-файлах, то есть риск импортировать неверный файл и также получить
➖работает только в Kotlin. Может быть не критичным для тех проектов, который написаны на Kotlin, но критично для тех, у кого есть Java.
Именно из-за описанных недостатков он и был помечен depricated.
Давайте обратимся к альтернативе. ⤵️
3️⃣View Binding — в целом, урощённая версия Data Binding, который по сути «биндится» только для ссылок на View, не связываясь с данными.
Плюсы:
➕нет boilerplate кода;
➕полностью null safe;
➕type safety;
➕нет влияния на build time в отличии от Data Binding;
➕поддерживается как в Java, так и в Kotlin
Отмечу один минус: чуть больше строк кода в сравнении с Kotlin Synthetics, ведь необходимо создать экземпляр переменной binding, которую придётся использовать потом повсюду.
Хотя я и сам очень любил Kotlin Synthetics, и мирился с его недостатками, но теперь придётся переезжать на View Binding. 🤔
Ссылка на документацию по инструменту тут.
#kotlin
Несколько месяцев назад Android Kotlin Extensions Gradle плагин был помечен depricated. Он давал нам две классных фичи:
• Synthetics — плагин, который позволяет заменить findViewById;
• Parcelize — плагин, который позволяет создавать Parcelable при помощи одной аннотации, без использования boilerplate.
Parcelize никуда не уходит, а только перемещается в отдельный плагин kotlin-parcelize, а вот Synthetics уходит навсегда. Давайте посмотрим предпосылки, почему это произошло.
Но прежде рассмотрим все существующие подходы для поиска View.
1️⃣findViewById — функция, которая проходит по иерархии View и находит по идентификатору ту, которая необходима.
Имеет ряд существенных недостатоков:
➖метод поиска дорогой и разработчики часто используют этот метод повторно не задумываясь о последствиях производительности;
➖метод не null safe, то есть если в дереве не найдётся View с переданным идентификатором, то будет
NullPointerException
;➖нет кастования до требуемой View до Android API 26;
➖много boilerplate кода, особенно когда в классе много View.
Есть библиотека Butter Knife, которая заметно уменьшала количество кода, однако и сократила скорость сборки приложения, к тому же не решала ряд проблем. Сейчас она также depricated.
2️⃣Kotlin Synthetics — по сути вызывал описанный выше метод единожды и кэшировал полученные значения.
Из плюсов:
➕нет boilerplate кода, ведь всё что требуется — это настроить плагин в Gradle и использовать идентификаторы прямо из xml-файла;
➕type safety, то есть вам не надо делать никаких кастов.
Но давайте пройдёмся по недостаткам:
➖частично null safe. К счастью, если вы удалите какую-то view из xml, то в коде также будет подсветка удалённой View. Однако, если вы используете несколько конфигурационных файлов, то есть шанс нарваться на
NullPointerException
.➖загрязнение namespaces. Если вы имеете несколько одинаковых идентификаторов в разных xml-файлах, то есть риск импортировать неверный файл и также получить
NullPointerException
.➖работает только в Kotlin. Может быть не критичным для тех проектов, который написаны на Kotlin, но критично для тех, у кого есть Java.
Именно из-за описанных недостатков он и был помечен depricated.
Давайте обратимся к альтернативе. ⤵️
3️⃣View Binding — в целом, урощённая версия Data Binding, который по сути «биндится» только для ссылок на View, не связываясь с данными.
Плюсы:
➕нет boilerplate кода;
➕полностью null safe;
➕type safety;
➕нет влияния на build time в отличии от Data Binding;
➕поддерживается как в Java, так и в Kotlin
Отмечу один минус: чуть больше строк кода в сравнении с Kotlin Synthetics, ведь необходимо создать экземпляр переменной binding, которую придётся использовать потом повсюду.
Хотя я и сам очень любил Kotlin Synthetics, и мирился с его недостатками, но теперь придётся переезжать на View Binding. 🤔
Ссылка на документацию по инструменту тут.
Jetpack Compose — Live coding сессия
#compose #youtube
Друзья, уже сегодня, 21 декабря в 18:30 мы с вами погрузимся в мир Jetpack Compose и создадим рабочее приложение.
По ходу сессии вы сможете задать вопросы нашему гостю Григорьеву Дмитрию, автору канала Jetpack Compose.
Напоминаю, что мы с вами рассмотрим:🔹
🔹как лучше строить архитектуру;
🔹как делать списки из разных типов view;
🔹что делать с навигацией между разными экранами;
🔹как сделать анимации;
🔹что делать с текущими приложениями;
🔹и много другое.
Ссылка на трансляцию тут.
#compose #youtube
Друзья, уже сегодня, 21 декабря в 18:30 мы с вами погрузимся в мир Jetpack Compose и создадим рабочее приложение.
По ходу сессии вы сможете задать вопросы нашему гостю Григорьеву Дмитрию, автору канала Jetpack Compose.
Напоминаю, что мы с вами рассмотрим:🔹
🔹как лучше строить архитектуру;
🔹как делать списки из разных типов view;
🔹что делать с навигацией между разными экранами;
🔹как сделать анимации;
🔹что делать с текущими приложениями;
🔹и много другое.
Ссылка на трансляцию тут.
Быстрая настройка CI/CD для Android при помощи GitLab
#cicd
CI/CD — это инструмент, который позволяет автоматизировать повторяющиеся действия. Например, это может быть прогон тестов или загрузка билда в Slack, Firebase, а также анализ кода. Вариантов множество, но эти самые распространённые.
Даже если вы единственный человек в команде, то вам стоит настроить один раз CI/CD для однотипных действий.
Есть довольно много различных систем, но если вы используете в качестве git-системы GitLab, то можно использовать его систему для этих целей и не платить деньги за ещё один сервис.
Есть полезная статья, которая ответит на начальные вопросы, связанные с настройкой: создание билда, прогон тестов и загрузка в Slack. Выглядит действительно очень просто, поэтому нет смысла не начинать использовать полезный инструмент.🤓
#cicd
CI/CD — это инструмент, который позволяет автоматизировать повторяющиеся действия. Например, это может быть прогон тестов или загрузка билда в Slack, Firebase, а также анализ кода. Вариантов множество, но эти самые распространённые.
Даже если вы единственный человек в команде, то вам стоит настроить один раз CI/CD для однотипных действий.
Есть довольно много различных систем, но если вы используете в качестве git-системы GitLab, то можно использовать его систему для этих целей и не платить деньги за ещё один сервис.
Есть полезная статья, которая ответит на начальные вопросы, связанные с настройкой: создание билда, прогон тестов и загрузка в Slack. Выглядит действительно очень просто, поэтому нет смысла не начинать использовать полезный инструмент.🤓
Quick Guide для миграции приложений на Android 11
#tips
В этом году мы много писали о нововведениях, связанных с Android 11: поддержка 5G, notification chat bubble, notifications priority conversations, scoped storage, package visibility и другие.
Большинство приложений, в целом, готово и будут работать на свежей версии Android, однако стоит посмотреть, не было ли изменений в тех областях, на которые завязано ваше приложение.
Нашёл хороший чеклист, где описываются изменения в работе Android 11.
Тут есть как критичные изменения, такие как: foreground service type, one time permissions или scoped storage, или незначительные, например плавный показ клавиатуры в приложении или notification bubbles.
Детальнее можно почитать тут и быть уверенным, что приложение полностью готово к новой системе. 👌🏻
#tips
В этом году мы много писали о нововведениях, связанных с Android 11: поддержка 5G, notification chat bubble, notifications priority conversations, scoped storage, package visibility и другие.
Большинство приложений, в целом, готово и будут работать на свежей версии Android, однако стоит посмотреть, не было ли изменений в тех областях, на которые завязано ваше приложение.
Нашёл хороший чеклист, где описываются изменения в работе Android 11.
Тут есть как критичные изменения, такие как: foreground service type, one time permissions или scoped storage, или незначительные, например плавный показ клавиатуры в приложении или notification bubbles.
Детальнее можно почитать тут и быть уверенным, что приложение полностью готово к новой системе. 👌🏻
Прокачиваем Logcat в Android Studio
#tips
Android Studio имеет огромный набор инструментов, которыми мы не пользуемся. А некоторыми из них пользуемся так же, как они настроены по умолчанию, без тонкой надстройки для себя. К такому инструменту может относиться один из самых распространённых — Logcat.
Вот как его можно настроить:
1️⃣ Цветовая схема. Мы можем показать 5 различных типов сообщений в зависимости от их важности. По умолчанию все они выводятся белым и отличаются только префиксом в начале сообщения. Можно улучшить читаемость, настроив цвет текста для каждого типа. Для этого надо выбрать File > Settings > Editor > Colors Scheme > Android Logcat. Несколько хороших цветовых схем, одной из которых пользуюсь я тут.
2️⃣Формат вывода. По умолчанию, каждое сообщение содержит следующую информацию: дата и время, идентификатор процесса, package name, tag и сообщение. Часто нам не нужно столько информации, поэтому это также легко можно настроить и вывести только необходимую.
3️⃣Расположение Logcat. Изначально панель с логами выводится в самом низу, что в целом удобно для большинства разработчиков. Но если у вас широкий монитор, или их несколько, вы можете показывать эту панель в любом удобном месте, таким образом расширив окно для ввода кода.
Подробнее о настройках можно почитать тут.
#tips
Android Studio имеет огромный набор инструментов, которыми мы не пользуемся. А некоторыми из них пользуемся так же, как они настроены по умолчанию, без тонкой надстройки для себя. К такому инструменту может относиться один из самых распространённых — Logcat.
Вот как его можно настроить:
1️⃣ Цветовая схема. Мы можем показать 5 различных типов сообщений в зависимости от их важности. По умолчанию все они выводятся белым и отличаются только префиксом в начале сообщения. Можно улучшить читаемость, настроив цвет текста для каждого типа. Для этого надо выбрать File > Settings > Editor > Colors Scheme > Android Logcat. Несколько хороших цветовых схем, одной из которых пользуюсь я тут.
2️⃣Формат вывода. По умолчанию, каждое сообщение содержит следующую информацию: дата и время, идентификатор процесса, package name, tag и сообщение. Часто нам не нужно столько информации, поэтому это также легко можно настроить и вывести только необходимую.
3️⃣Расположение Logcat. Изначально панель с логами выводится в самом низу, что в целом удобно для большинства разработчиков. Но если у вас широкий монитор, или их несколько, вы можете показывать эту панель в любом удобном месте, таким образом расширив окно для ввода кода.
Подробнее о настройках можно почитать тут.
Ресурсы с иконками
#tips
Сегодня поделюсь с вами пачкой ресурсов, которые использую, если мне необходимы красивые иконки для приложения. Они могут понадобиться, если вы работаете над pet-проектом или не хотите ждать, когда ваш дизайнер нарисует иконку... 🙄
▪️Material Design Google — этот ресурс содержит множество иконок в стиле Material от Google. Главной фишкой является несколько стилей одной и той же иконки: filled, outlined, rounded two-tone и sharp. Примерный аналог можно найти, используя набор иконок, встроенный в Android Studio, но тут их больше.
▪️Material Design Icons — ресурс является альтернативной первому ресурсу, но главной фишкой тут является наличие иконок от сторонних дизайнеров, которые часто выглядят гораздо круче, чем стоковые.
▪️Feather Icons — хороший ресурс с набором outlined иконок, где главная фишка — настройка ширины обводки этой самой иконки.
▪️Boxicons — ещё один ресурс с набором нестандартных иконок: например, логотипами компаний. Их тут относительно немного, но может помочь, если нужна подобная иконка.
▪️IBM Icons — набор иконок от IBM, где также можно найти любопытные иконки. Большинство из них выглядят не в Material стиле, но радует их большое разнообразие.
#tips
Сегодня поделюсь с вами пачкой ресурсов, которые использую, если мне необходимы красивые иконки для приложения. Они могут понадобиться, если вы работаете над pet-проектом или не хотите ждать, когда ваш дизайнер нарисует иконку... 🙄
▪️Material Design Google — этот ресурс содержит множество иконок в стиле Material от Google. Главной фишкой является несколько стилей одной и той же иконки: filled, outlined, rounded two-tone и sharp. Примерный аналог можно найти, используя набор иконок, встроенный в Android Studio, но тут их больше.
▪️Material Design Icons — ресурс является альтернативной первому ресурсу, но главной фишкой тут является наличие иконок от сторонних дизайнеров, которые часто выглядят гораздо круче, чем стоковые.
▪️Feather Icons — хороший ресурс с набором outlined иконок, где главная фишка — настройка ширины обводки этой самой иконки.
▪️Boxicons — ещё один ресурс с набором нестандартных иконок: например, логотипами компаний. Их тут относительно немного, но может помочь, если нужна подобная иконка.
▪️IBM Icons — набор иконок от IBM, где также можно найти любопытные иконки. Большинство из них выглядят не в Material стиле, но радует их большое разнообразие.
Touch Event Management
#subscribers
Тут @Vel_daN, один из подписчиков канала, написал отличную статью о взаимодействии с touch event. Мы не так часто используем эти функции напрямую и переопределяем этих слушателей у себя, однако это может быть полезно, если нужно взаимодействовать с несколькими View сразу.
В статье рассматривается пример открытия бокового меню при наличии на экране
У автора, кстати, много интересных статей про
Также мы многое обсуждаем в чате канала. Например, автору можно задавать свои вопросы и, возможно, они послужат идеями для следующих статей 😉.
#subscribers
Тут @Vel_daN, один из подписчиков канала, написал отличную статью о взаимодействии с touch event. Мы не так часто используем эти функции напрямую и переопределяем этих слушателей у себя, однако это может быть полезно, если нужно взаимодействовать с несколькими View сразу.
В статье рассматривается пример открытия бокового меню при наличии на экране
RecyclerView
: это кажется довольно простой задачей, однако если мы хотим сделать открытие этого меню из середины экрана при заполненном списке, то получаются проблемы, связанные с перехватом событий touch.У автора, кстати, много интересных статей про
MotionLayout
, а недавно появилась статья про работу с ConstraintLayout
из кода.Также мы многое обсуждаем в чате канала. Например, автору можно задавать свои вопросы и, возможно, они послужат идеями для следующих статей 😉.
Новый год 2021 🎄
Вот и подходит к концу 2020 год 🥳 Для многих он оказался непростым: самоизоляция, резкий переход на удалёнку, пандемия, отсутствие путешествий, да и общая обстановка была не очень позитивная. 🙄
Но он заканчивается, и я надеюсь, что будущий год принесёт больше позитива в нашу жизнь. Желаю всем нам набраться сил на этих каникулах, а потом заряженными и настроенными на позитив решить все сложные и интересные задачи, а также легко править can’t reproduce баги. 🤓
Спасибо вам, мои подписчики за то, что читаете канал и даёте обратную связь. Меня это заряжает делать новый контент и делиться им с вами.
До новых встреч в 2021 году 💥
@al_gorshkov
Вот и подходит к концу 2020 год 🥳 Для многих он оказался непростым: самоизоляция, резкий переход на удалёнку, пандемия, отсутствие путешествий, да и общая обстановка была не очень позитивная. 🙄
Но он заканчивается, и я надеюсь, что будущий год принесёт больше позитива в нашу жизнь. Желаю всем нам набраться сил на этих каникулах, а потом заряженными и настроенными на позитив решить все сложные и интересные задачи, а также легко править can’t reproduce баги. 🤓
Спасибо вам, мои подписчики за то, что читаете канал и даёте обратную связь. Меня это заряжает делать новый контент и делиться им с вами.
До новых встреч в 2021 году 💥
@al_gorshkov
Набор статей для разработчиков
#subscribers #compose
Тут @unniked поделился ссылкой на репозиторий, где сохраняет полезные статьи для Android-разработчиков.
Всё разделяется на несколько разделов: Java, Kotlin, UI, Architecture, Jetpack, NDK и многие другие. Статей много и каждый, вне зависимости от уровня знаний, найдет для себя что почитать. 🤓
Ну и отдельно автор выделяет всеми нами ожидаемый Jetpack Compose, где также собрано множество статей для любого уровня.
У многих сейчас неделя выходных, и это может быть отличной возможностью подтянуть свои знания по Android. ✌🏻
#subscribers #compose
Тут @unniked поделился ссылкой на репозиторий, где сохраняет полезные статьи для Android-разработчиков.
Всё разделяется на несколько разделов: Java, Kotlin, UI, Architecture, Jetpack, NDK и многие другие. Статей много и каждый, вне зависимости от уровня знаний, найдет для себя что почитать. 🤓
Ну и отдельно автор выделяет всеми нами ожидаемый Jetpack Compose, где также собрано множество статей для любого уровня.
У многих сейчас неделя выходных, и это может быть отличной возможностью подтянуть свои знания по Android. ✌🏻
Где разработчики зарабатывают больше
#sites
Есть классный ресурс, о котором узнал только сегодня — это сервис Levels.fyi, который собирает актуальную информацию о зарплатах IT-специалистов.
Во-первых, можно узнать об уровнях разработчиков в известных компаниях. Не все знают, что уровни разработчиков — это не только стандартные Junior-Middle-Senior.
Во-вторых, множество удобных фильтров: по городу и стране, тегам, вакансии и т.д.
В-третьих, огромная база компаний и разделение зарплат на обычную зарплату, годовой бонус и акции, что также радует.
В целом, сервис больше ориентирован на зарубежный рынок, хотя и наши компании тоже встречаются. 🙃
#sites
Есть классный ресурс, о котором узнал только сегодня — это сервис Levels.fyi, который собирает актуальную информацию о зарплатах IT-специалистов.
Во-первых, можно узнать об уровнях разработчиков в известных компаниях. Не все знают, что уровни разработчиков — это не только стандартные Junior-Middle-Senior.
Во-вторых, множество удобных фильтров: по городу и стране, тегам, вакансии и т.д.
В-третьих, огромная база компаний и разделение зарплат на обычную зарплату, годовой бонус и акции, что также радует.
В целом, сервис больше ориентирован на зарубежный рынок, хотя и наши компании тоже встречаются. 🙃