Compose Animation Playground
Репозиторий с реализациями различных анимаций на Jetpack Compose (transition, scale, slide, expand, crossfade, etc).
GitHub → Compose-Animation-Playground
Репозиторий с реализациями различных анимаций на Jetpack Compose (transition, scale, slide, expand, crossfade, etc).
GitHub → Compose-Animation-Playground
🔥10👍3🤩2
Marquee with Jetpack Compose
Реализация marquee эффекта у текста на Jetpack Compose. За основу автор взял этот проект и немного допилил.
Код можно посмотреть на GitHub тут и тут.
Читать (En)
Реализация marquee эффекта у текста на Jetpack Compose. За основу автор взял этот проект и немного допилил.
Код можно посмотреть на GitHub тут и тут.
Читать (En)
👍3🔥3
Safe button click in Android
Сегодня небольшое, частичное дополнение к этому посту. Казалось бы на простую тему, но очень важную – safe button click.
И так, в Android по дефолту реализация кликов никак не ограничена. Что имеется ввиду? Если например взять обычную кнопку (Button), повесить на нее listener и кликнуть быстро несколько раз – onClick() будет вызван несколько раз и это не есть хорошо, объясню почему.
Кейс 1. Предположим у вас приложение под какой-нибудь интернет-магазин/маркетплейс или что-то подобное. У вас есть фича "Заказы", соответственно экранчик с оформлением заказа и кнопка "Оформить заказ", при нажатии на которую, запрос на бэк. Так вот, будет не очень прикольно, если создастся несколько заказов. А что если вместо заказов, будет например функциональность оплаты? Понятно, что есть 3DS и все такое, но риск все равно есть.
Кейс 2. Предположим у вас по клику стартует новая
Кейсов можно придумать множество, от простых до достаточно критичных. Для примера я взял наиболее понятные.
Теперь про то, как такое решать?
Наиболее популярное решение, которое я видел –
Реализовать такое можно по-разному, кто-то решает через Rx, кто-то через корутины, кто-то через кастомные обработчики. Я больше предпочитаю кастомный обработчик с delay + kotlin extension для View.
Вот несколько примеров с реализациями
👉 Kotlin Expert [Safe Click Listener in Android]
👉 Android Safe Click Listener
👉 Ensure single click on Android
👉 How to prevent multiple clicks in Android Jetpack Compose
Сегодня небольшое, частичное дополнение к этому посту. Казалось бы на простую тему, но очень важную – safe button click.
И так, в Android по дефолту реализация кликов никак не ограничена. Что имеется ввиду? Если например взять обычную кнопку (Button), повесить на нее listener и кликнуть быстро несколько раз – onClick() будет вызван несколько раз и это не есть хорошо, объясню почему.
Кейс 1. Предположим у вас приложение под какой-нибудь интернет-магазин/маркетплейс или что-то подобное. У вас есть фича "Заказы", соответственно экранчик с оформлением заказа и кнопка "Оформить заказ", при нажатии на которую, запрос на бэк. Так вот, будет не очень прикольно, если создастся несколько заказов. А что если вместо заказов, будет например функциональность оплаты? Понятно, что есть 3DS и все такое, но риск все равно есть.
Кейс 2. Предположим у вас по клику стартует новая
Activity. Как думаете, что будет, если тыкнуть кнопку несколько раз? Совершенно верно, Activity без проблем запустится несколько раз. Последствия зависят от логики, риски могут быть достаточно серьезными. В многих, в том числе и крупных/известных приложениях встречал такое поведение.Кейсов можно придумать множество, от простых до достаточно критичных. Для примера я взял наиболее понятные.
Теперь про то, как такое решать?
Наиболее популярное решение, которое я видел –
delay на клик. То есть, давать возможность нажать на кнопку 1 раз в 1 или несколько секунд. Надеюсь суть понятна.Реализовать такое можно по-разному, кто-то решает через Rx, кто-то через корутины, кто-то через кастомные обработчики. Я больше предпочитаю кастомный обработчик с delay + kotlin extension для View.
Вот несколько примеров с реализациями
👉 Kotlin Expert [Safe Click Listener in Android]
👉 Android Safe Click Listener
👉 Ensure single click on Android
👉 How to prevent multiple clicks in Android Jetpack Compose
👍22🔥3🤔1
Kotlin vs Java: The Clean Code Edition
Интересная статейка с сравнением одного и того же кода написанного на Kotlin и на Java.
P.S. Уже и забыл, когда писал последний раз на Java. Kotlin 💪
Читать (En)
Интересная статейка с сравнением одного и того же кода написанного на Kotlin и на Java.
P.S. Уже и забыл, когда писал последний раз на Java. Kotlin 💪
Читать (En)
👍11🔥1🤡1
Как сделать удобное взаимодействие с Kotlin из Swift: обзор проблем и решений
Статья про некоторые проблемы и возможные решения при разработке на KMM под iOS и Android.
👉 Что у Kotlin Multiplatform Mobile внутри
👉 Интеграция на разных платформах: в чем проблема c iOS
👉 Ограничения в работе Swift и Kotlin
👉 Как хотелось бы улучшить работу Kotlin со стороны Swift
👉 Решения (Sourcery, компиляторные плагины Kotlin, Gradle-плагины)
Читать (Ru)
Статья про некоторые проблемы и возможные решения при разработке на KMM под iOS и Android.
👉 Что у Kotlin Multiplatform Mobile внутри
👉 Интеграция на разных платформах: в чем проблема c iOS
👉 Ограничения в работе Swift и Kotlin
👉 Как хотелось бы улучшить работу Kotlin со стороны Swift
👉 Решения (Sourcery, компиляторные плагины Kotlin, Gradle-плагины)
Читать (Ru)
👍8🔥2🤔1
Retain Cycle in Swift
Полезная статья с примерами про Retain Cycle, ARC, типы ссылок (Strong, Weak, Unowned) в Swift.
Читать (En)
Полезная статья с примерами про Retain Cycle, ARC, типы ссылок (Strong, Weak, Unowned) в Swift.
Читать (En)
👍4🔥1🤔1
11 Best Android Libraries for 2022
Наткнулся значит вчера на статью с громким заголовком, дай думаю посмотрю, что там за best libraries в 2022.
И так, читаю Dagger 2, Retrofit – думаю ну ок, иду дальше EventBus – что простите? 😳, ButterKnife – серьезно? 😀 И тут я пошёл читать комментарии 😉
Если серьезно, статью можно не читать 😁, гораздо интереснее почитать комменты.
Наткнулся значит вчера на статью с громким заголовком, дай думаю посмотрю, что там за best libraries в 2022.
И так, читаю Dagger 2, Retrofit – думаю ну ок, иду дальше EventBus – что простите? 😳, ButterKnife – серьезно? 😀 И тут я пошёл читать комментарии 😉
Если серьезно, статью можно не читать 😁, гораздо интереснее почитать комменты.
🤡30😁9👍1👏1😱1
Android, MVVM with Clean Code
Такую статью можно и почитать. Глобально ничего нового, простой пример реализации проекта с MVVM + Clean Architecture (Hilt, Room, Retrofit, Coroutines, LiveData, UseCases, Unit testing).
Код на GitHub → A MVVM sample architecture
Читать (En)
Такую статью можно и почитать. Глобально ничего нового, простой пример реализации проекта с MVVM + Clean Architecture (Hilt, Room, Retrofit, Coroutines, LiveData, UseCases, Unit testing).
Код на GitHub → A MVVM sample architecture
Читать (En)
🔥12👍7❤🔥1
iOS Clean architecture? My way on a very simple feature [MVVM, Repository, URLSession, Swift]
В продолжении вчерашней статьи, еще одна. По сути, всё тоже самое, только в iOS.
Пример реализация MVVM простым способом, Repository, независимая логика загрузки из любого источника данных, Http клиент на базе URLSession + возможность мокать, тестировать фичи на каждом слое.
Код на GitHub → iOS Clean architecture Sample
Читать (En)
В продолжении вчерашней статьи, еще одна. По сути, всё тоже самое, только в iOS.
Пример реализация MVVM простым способом, Repository, независимая логика загрузки из любого источника данных, Http клиент на базе URLSession + возможность мокать, тестировать фичи на каждом слое.
Код на GitHub → iOS Clean architecture Sample
Читать (En)
👍3🔥1👏1
Kotlin Coroutines. Подборка
Напоминаю, что на канале есть толковые статьи и целые серии статей по корутинам. Собрал все ссылки на посты в один пост.
👉 Things every Kotlin Developer should know about Coroutines
👉 Design of Kotlin Coroutines
👉 Mastering Coroutines in Kotlin — Complete guid
👉 Почему исключения в Kotlin Coroutines это сложно и как с этим жить?
👉 Kotlin Coroutines Tutorial for Android : Advanced
👉 A Perception of Exception in Kotlin Coroutines
@mobile_native
Напоминаю, что на канале есть толковые статьи и целые серии статей по корутинам. Собрал все ссылки на посты в один пост.
👉 Things every Kotlin Developer should know about Coroutines
👉 Design of Kotlin Coroutines
👉 Mastering Coroutines in Kotlin — Complete guid
👉 Почему исключения в Kotlin Coroutines это сложно и как с этим жить?
👉 Kotlin Coroutines Tutorial for Android : Advanced
👉 A Perception of Exception in Kotlin Coroutines
@mobile_native
🔥13👍8❤🔥4
Управление зависимостями в Android
Иногда работаю на part time над разными проектами и всегда обращаю внимание на то, как устроена работа с gradle и зависимостями. Способов управлять зависимостями как вы знаете существует несколько, вот и решил набросать пост на эту тему.
Давайте вкратце обрисуем ситуации.
Если у вас приложение монолит, то по сути можно не заморачиваться, зависимости можно закинуть куда-нибудь в ext build.gradle проекта и использовать потом в модуле. Либо вообще руками прописывать все зависимости непосредственно в модуле. Самый простой и древний способ.
Если у вас многомодульный проект, нужно как-то и где-то менеджерить зависимости, чтоб можно было гибко ими управлять, переиспользовать в модулях и т.д. И это можно сделать несколькими способами.
Способ 1 – Kotlin код + kts. Достаточно распространенный способ, который встречается во многих проектах. Есть некоторые проблемы c перформансом.
Как подрубить? В проект нужно добавить модуль buildSrc, подрубить к нему kotlin-dsl и можно объявлять зависимости в обычном, привычном Kotlin коде.
А затем в
Посмотреть пример можно тут, тут и здесь.
Способ 2 – Version Catalog. В Gradle 7.0 добавили новую фичу Version Catalog. С помощью Version Catalog можно подключать несколько зависимостей одной строкой, предварительно объявив нужные зависимости в одну группу/бандл.
Как подрубить? В gradle, которая лежит в корне проекта нужно добавить файлик libs.versions.toml, в котором и объявляются зависимости в определенном формате.
А затем в
Посмотреть пример можно тут, тут и здесь
Полезные ссылки
👉 Using Version Catalog on Android projects
👉 Clean Dependency Management in Multi Module Android Projects
👉 Gradle version catalogs for an awesome dependency management
👉 Migrate from Groovy to Kotlin DSL
👉 The New Way of Writing Build Gradle with Kotlin DSL
👉 Kotlin DSL: Gradle noscripts in Android made easy
👉 Stop using Gradle buildSrc. Use composite builds instead
👉 GitHub – Android-Starter-2022
👉 GitHub – Now in Android App
👉 GitHub – RefreshVersions
Иногда работаю на part time над разными проектами и всегда обращаю внимание на то, как устроена работа с gradle и зависимостями. Способов управлять зависимостями как вы знаете существует несколько, вот и решил набросать пост на эту тему.
Давайте вкратце обрисуем ситуации.
Если у вас приложение монолит, то по сути можно не заморачиваться, зависимости можно закинуть куда-нибудь в ext build.gradle проекта и использовать потом в модуле. Либо вообще руками прописывать все зависимости непосредственно в модуле. Самый простой и древний способ.
Если у вас многомодульный проект, нужно как-то и где-то менеджерить зависимости, чтоб можно было гибко ими управлять, переиспользовать в модулях и т.д. И это можно сделать несколькими способами.
Способ 1 – Kotlin код + kts. Достаточно распространенный способ, который встречается во многих проектах. Есть некоторые проблемы c перформансом.
Как подрубить? В проект нужно добавить модуль buildSrc, подрубить к нему kotlin-dsl и можно объявлять зависимости в обычном, привычном Kotlin коде.
object Deps {
const val androidxAppCompat = "…"
}А затем в
build.gradle.ktsможно обращаться вот так
dependencies {
implementation(Deps.androidxAppCompat)
}Посмотреть пример можно тут, тут и здесь.
Способ 2 – Version Catalog. В Gradle 7.0 добавили новую фичу Version Catalog. С помощью Version Catalog можно подключать несколько зависимостей одной строкой, предварительно объявив нужные зависимости в одну группу/бандл.
Как подрубить? В gradle, которая лежит в корне проекта нужно добавить файлик libs.versions.toml, в котором и объявляются зависимости в определенном формате.
А затем в
build.gradle.ktsможно обращаться вот так
dependencies {
implementation(libs.compose)
}Посмотреть пример можно тут, тут и здесь
Полезные ссылки
👉 Using Version Catalog on Android projects
👉 Clean Dependency Management in Multi Module Android Projects
👉 Gradle version catalogs for an awesome dependency management
👉 Migrate from Groovy to Kotlin DSL
👉 The New Way of Writing Build Gradle with Kotlin DSL
👉 Kotlin DSL: Gradle noscripts in Android made easy
👉 Stop using Gradle buildSrc. Use composite builds instead
👉 GitHub – Android-Starter-2022
👉 GitHub – Now in Android App
👉 GitHub – RefreshVersions
👍34🔥4❤🔥1
How to Create a State Machine on Jetpack Compose
Пример реализации паттерна State Machine в Jetpack Compose с помощью библиотечки FlowRedux.
Читать (En)
Пример реализации паттерна State Machine в Jetpack Compose с помощью библиотечки FlowRedux.
Читать (En)
👍8🔥2👏1
When to use Swift For-in and ForEach
Статья с примерами использования for-in и forEach в Swift. Чем они отличаются и для каких кейсов больше подходит for-in или forEach.
Читать (En)
Статья с примерами использования for-in и forEach в Swift. Чем они отличаются и для каких кейсов больше подходит for-in или forEach.
Читать (En)
👍5🔥2👏1
Faster Jetpack Compose <-> View interop with App Startup and baseline profile
Статья с примером того, как можно ускорить работу Jetpack Compose с помощью библиотеки App Startup и Baseline Profiles.
Читать (En)
Статья с примером того, как можно ускорить работу Jetpack Compose с помощью библиотеки App Startup и Baseline Profiles.
Читать (En)
👍8❤1🔥1
Уроки по архитектуре (clean architecture в Android)
Ловите плейлист с видео уроками по архитектуре. Там про MVI, MVVM, Сlean Architecture с детальным разбором слоев (data, domain, presentation, usecases, repository) и модулей, DI (Dagger2 и Hilt) и тестирование. И всё это с разбором на практических примерах 👍
Смотреть (Ru)
Ловите плейлист с видео уроками по архитектуре. Там про MVI, MVVM, Сlean Architecture с детальным разбором слоев (data, domain, presentation, usecases, repository) и модулей, DI (Dagger2 и Hilt) и тестирование. И всё это с разбором на практических примерах 👍
Смотреть (Ru)
YouTube
MVI в Android на практике
Показываю реальный пример на пальцах для "чайников" :) с применением паттерна MVI в Android. Все показываю на практике в коде и на диаграмме. Также разбираем MVI в архитектуре Clean Architecture (Чистая архитектура).
MVI расшифровывается как: Model View…
MVI расшифровывается как: Model View…
👍32🔥11👏3
Kotlin Coroutines use cases for Data/Adapters Layer
А вот статейка от Kt.Academy с различными примерам использования корутин в Data слое.
Читать (En)
А вот статейка от Kt.Academy с различными примерам использования корутин в Data слое.
Читать (En)
👍16⚡1🔥1
Индекс эффективности мобильной рекламы 2022 от Appodeal
У Appodeal вышло новое исследование про рекламную монетизацию - Mobile In-App Ad Monetization Performance Index.
В топ, как и ранее попали и российские компании. Appodeal выделила в исследовании три рекламных формата: видео с вознаграждением, интерстишиалы и баннеры.
Из наших отметим Рекламную сеть Яндекса: она оказалась лучшей в Восточной Европе по доле выплаченного вознаграждения издателям для баннеров на мобилках (iOS, Android), а также в полноэкранных форматах на Android. По eCPM на полноэкранной и баннерной рекламе в iOS на втором месте совместно с MyTarget.
Кроме того Яндекс показал лучший eCPM на видео с вознаграждением и полноэкранных форматах на iOS на рынке Ближнего Востока
Полный отчет можно посмотреть тут: Performance index 2022 Edition
У Appodeal вышло новое исследование про рекламную монетизацию - Mobile In-App Ad Monetization Performance Index.
В топ, как и ранее попали и российские компании. Appodeal выделила в исследовании три рекламных формата: видео с вознаграждением, интерстишиалы и баннеры.
Из наших отметим Рекламную сеть Яндекса: она оказалась лучшей в Восточной Европе по доле выплаченного вознаграждения издателям для баннеров на мобилках (iOS, Android), а также в полноэкранных форматах на Android. По eCPM на полноэкранной и баннерной рекламе в iOS на втором месте совместно с MyTarget.
Кроме того Яндекс показал лучший eCPM на видео с вознаграждением и полноэкранных форматах на iOS на рынке Ближнего Востока
Полный отчет можно посмотреть тут: Performance index 2022 Edition
👍13👎3🔥2🤔1💩1
Deep Dive Into Deep Link
Все части из цикла статей про диплинки. Принцип работы, поведение на разных версиях ОС и устройствах, проблемы которые могут возникнуть, обработка scheme приложением и т.д.
👉 Часть 1. Введение и исходная задача
👉 Часть 2. Проблемы: устройство, версия ОС
👉 Часть 3. Оболочка ОС, приложение
👉 Часть 4. Проблемы: ссылки без схемы, второй хост, перехваты всего
👉 Часть 5. Нюансы: port, mime, path, диспетчеризация, обратная совместимость
Все части из цикла статей про диплинки. Принцип работы, поведение на разных версиях ОС и устройствах, проблемы которые могут возникнуть, обработка scheme приложением и т.д.
👉 Часть 1. Введение и исходная задача
👉 Часть 2. Проблемы: устройство, версия ОС
👉 Часть 3. Оболочка ОС, приложение
👉 Часть 4. Проблемы: ссылки без схемы, второй хост, перехваты всего
👉 Часть 5. Нюансы: port, mime, path, диспетчеризация, обратная совместимость
🔥15👍3👏2
Собеседование Android system design
Досматриваю собес про Android System Design. Если еще не смотрели, обязательно посмотрите.
Респект Киррилу и ребятам, отдельный рескепт Серёге за очередной крутой собес. Андрей видно парень с опытом, со многими штуками работал и натыкался на различные кейсы – можно хантить 😉. Собес понравился 🔥
Теперь на что стоит обратить внимание.
1. Схема и точка.
Нужно уметь рисовать схемы, если не умеете – учитесь. Возьмите какую-нибудь простую функцию и попробуйте спроектировать в виде схемы с нужными модулями, связями и т.д.. Это не только показывает скилл разработчика, но и помогает при разработке и ускоряет ее. Условно можно представить как инструкцию, по которой вы потом пишите код шаг за шагом.
2. Сбор Требований.
Всегда старайтесь собрать всевозможные требования, задавайте любые вопросы, даже если вам кажется что "тут все понятно и очевидно". Как показывает опыт и практика, часто заказчик/бизнес думает и представляет всё по своему. Важно уточнить все эти моменты до начала реализации и убедиться, что все друг друга поняли.
3. Рассуждения вслух.
Эта тема уже много где затрагивалась. Рассуждайте вслух, это во-первых может вас самих натолкнуть на новые мысли, а во-вторых, при необходимости интервьюер может скорректировал ход ваших мыслей в более верном направлении.
4. Аргументация выбора.
С этим по идее понятно, можете пересмотреть фидбек, там Серёга подробно про это говорит. Нужно уметь аргументировать свой выбор, но для этого вы должны понимать как работает выбранный вами инструмент/архитектура/паттерн, какие плюсы/минусы, для каких кейсов больше подходит и т.д.
Варианты стоп-фраз: "ну так все делают", "это популярный фреймворк", "это крутая библиотека/подход/паттерн", "так google/apple рекомендует делать" 😉
Полезные ссылки/посты
👉 Simple Framework For Mobile System Design Interviews (про который говорили в собесе)
👉 Mobile System Design Interviews Series
👉 System Design Interview For Mobile Engineers
👉 Тред с ресурсами по system design от Евгения Мацюка
Досматриваю собес про Android System Design. Если еще не смотрели, обязательно посмотрите.
Респект Киррилу и ребятам, отдельный рескепт Серёге за очередной крутой собес. Андрей видно парень с опытом, со многими штуками работал и натыкался на различные кейсы – можно хантить 😉. Собес понравился 🔥
Теперь на что стоит обратить внимание.
1. Схема и точка.
Нужно уметь рисовать схемы, если не умеете – учитесь. Возьмите какую-нибудь простую функцию и попробуйте спроектировать в виде схемы с нужными модулями, связями и т.д.. Это не только показывает скилл разработчика, но и помогает при разработке и ускоряет ее. Условно можно представить как инструкцию, по которой вы потом пишите код шаг за шагом.
2. Сбор Требований.
Всегда старайтесь собрать всевозможные требования, задавайте любые вопросы, даже если вам кажется что "тут все понятно и очевидно". Как показывает опыт и практика, часто заказчик/бизнес думает и представляет всё по своему. Важно уточнить все эти моменты до начала реализации и убедиться, что все друг друга поняли.
3. Рассуждения вслух.
Эта тема уже много где затрагивалась. Рассуждайте вслух, это во-первых может вас самих натолкнуть на новые мысли, а во-вторых, при необходимости интервьюер может скорректировал ход ваших мыслей в более верном направлении.
4. Аргументация выбора.
С этим по идее понятно, можете пересмотреть фидбек, там Серёга подробно про это говорит. Нужно уметь аргументировать свой выбор, но для этого вы должны понимать как работает выбранный вами инструмент/архитектура/паттерн, какие плюсы/минусы, для каких кейсов больше подходит и т.д.
Варианты стоп-фраз: "ну так все делают", "это популярный фреймворк", "это крутая библиотека/подход/паттерн", "так google/apple рекомендует делать" 😉
Полезные ссылки/посты
👉 Simple Framework For Mobile System Design Interviews (про который говорили в собесе)
👉 Mobile System Design Interviews Series
👉 System Design Interview For Mobile Engineers
👉 Тред с ресурсами по system design от Евгения Мацюка
YouTube
Собеседование Android system design
Экспертное собеседование в Android system design. Обсудят адаптацию system design под Android разработчика, будут проектировать библиотеку.
Интервьюер - Сергей Боиштян, AvitoTech, Senior Android Developer Experience Engineer
🔗 Ген партнер Android Broadcast…
Интервьюер - Сергей Боиштян, AvitoTech, Senior Android Developer Experience Engineer
🔗 Ген партнер Android Broadcast…
🔥24👍10👀1
Android App Starter Template
Еще один проект-шаблон, который может стать отправной точкой для новых проектов с использованием best practices разработки и чистой архитектурой. Это интерпретация и адаптация официальных рекомендаций по архитектуре от Google.
👉 Modularization
👉 Gradle Version Catalog
👉 Ktor
👉 Coroutines
👉 Jetpack Compose
👉 Hilt
👉 DataStore
👉 Testing
Код на GitHub → Android App Starter Template
Еще один проект-шаблон, который может стать отправной точкой для новых проектов с использованием best practices разработки и чистой архитектурой. Это интерпретация и адаптация официальных рекомендаций по архитектуре от Google.
👉 Modularization
👉 Gradle Version Catalog
👉 Ktor
👉 Coroutines
👉 Jetpack Compose
👉 Hilt
👉 DataStore
👉 Testing
Код на GitHub → Android App Starter Template
👍21🔥5⚡2
Easy SharedPreferences with Delegated Properties in Kotlin
Довольно популярный пример реализации Kotlin Delegated Properties для префов.
Смотреть (En)
Довольно популярный пример реализации Kotlin Delegated Properties для префов.
Смотреть (En)
👍12🤔3🔥2