Forwarded from Mobile Developer (Алексей Гладков)
Кстати, если кто-то хочет начать делать проект на КММ, но не хочет заморачиваться с собственными решениями, то есть репозиторий, где собраны почти все либы, которые работают для КММ
https://github.com/terrakok/kmm-awesome
https://github.com/terrakok/kmm-awesome
GitHub
GitHub - terrakok/kmp-awesome: An awesome list that curates the best Kotlin Multiplatform libraries, tools and more.
An awesome list that curates the best Kotlin Multiplatform libraries, tools and more. - GitHub - terrakok/kmp-awesome: An awesome list that curates the best Kotlin Multiplatform libraries, tools a...
👍3
Forwarded from Android Broadcast (Кирилл Розов)
This media is not supported in your browser
VIEW IN TELEGRAM
#compose
Compose Image on Steroids - набор Compose API для расширения ваших возможностей по работе с изображениями в новомодном UI фреймворке от Google
Compose Image on Steroids - набор Compose API для расширения ваших возможностей по работе с изображениями в новомодном UI фреймворке от Google
👍1
Forwarded from Android Good Reads (Egor Tolstoy)
Еще один скриншот нового легкого UI IntelliJ, который появится и в Android Studio.
👍3👎2
Forwarded from Mobile AppSec World (Yury Shabalin)
Как установить более старую версию приложения поверх нового и не потерять данные в Android
По умолчанию, Android-система не позволяет устанавливать более старую версию поверх новой для одного приложения. В целом, это правильный подход, так и должно быть, потому что внутренние базы и структуры данных уже могут быть изменены под новую версию и старая может работать некорректно.
Но, иногда такая необходимость возникает. И тут на помощь нам придет статья, в которой описано несколько способов как это совершенно легально провернуть и оставить данные на месте.
Это может быть крайне полезно!
#android #downgrade
По умолчанию, Android-система не позволяет устанавливать более старую версию поверх новой для одного приложения. В целом, это правильный подход, так и должно быть, потому что внутренние базы и структуры данных уже могут быть изменены под новую версию и старая может работать некорректно.
Но, иногда такая необходимость возникает. И тут на помощь нам придет статья, в которой описано несколько способов как это совершенно легально провернуть и оставить данные на месте.
Это может быть крайне полезно!
#android #downgrade
🔥1
Forwarded from Голос из-под шторки | Миша Левченко
Почти 3 года назад я “продал” TEA своей команде в Авто.ру. С тех пор наша команда написала 180 TEA-компонентов - от простых экранов с парой кнопок до сложных форм-визардов с кучей логики. Тогда одним из ключевых требований дизайна, которые я перед собой ставил, был интероп с тогдашним стеком приложения - MVP + Clean Architecture, RxJava, Dagger 2. С тех пор я много думал о том, как бы выглядела архитектура, если убрать ограничение на совместимость с наследием эпохи Clean Architecture. Эта статья - компиляция моих заметок на эту тему.
t.me
The Elm Architecture в Android проекте: 3 года спустя
Почти 3 года назад я “продал” TEA своей команде в Авто.ру. С тех пор наша команда написала 180 TEA-компонентов - от простых экранов с парой кнопок до сложных форм-визардов с кучей логики. Тогда одним из ключевых требований дизайна, которые я перед собой ставил…
👍2
Forwarded from Mobile Compose
#Article #Blog #UI
Drawing custom text spans in Compose UI
Автор статьи, ориентируясь на разнообразные подчеркивания текста в приложении BuzzKill, решил вручную реализовать их в Jetpack Compose. Результат - небольшая готовая библиотека ExtendedSpans. Об этапах реализации, а также достигнутых результатах — в сегодняшней статье.
Drawing custom text spans in Compose UI
Автор статьи, ориентируясь на разнообразные подчеркивания текста в приложении BuzzKill, решил вручную реализовать их в Jetpack Compose. Результат - небольшая готовая библиотека ExtendedSpans. Об этапах реализации, а также достигнутых результатах — в сегодняшней статье.
Saket Narayan
Drawing custom text spans in Compose UI
Exploring how squiggly underlines and rounded corners can be drawn without any official APIs for drawing custom spans.
👍2
Forwarded from Mobile AppSec World (Yury Shabalin)
Детальный разбор эволюции троянского приложения Flubot
Очень здоровская статья про развитие и эволюцию банковского зловреда под Андроид.
Основной особенностью на мой взгляд, является то, что это современный (первая версия датирована 2020 годом), написанный самостоятельно (а не скопированный с других зловредов) проект, который эволюционирует и развивается получше и побыстрее многих коммерческих приложений 😁
Очень интересно почитать про те приемы, которые они использовали, чтобы оставаться менее заметными и их было сложнее определить.
В общем, рекомендую почитать, может даже мы что-то у них позаимствуем :)
#malware #android #analisys
Очень здоровская статья про развитие и эволюцию банковского зловреда под Андроид.
Основной особенностью на мой взгляд, является то, что это современный (первая версия датирована 2020 годом), написанный самостоятельно (а не скопированный с других зловредов) проект, который эволюционирует и развивается получше и побыстрее многих коммерческих приложений 😁
Очень интересно почитать про те приемы, которые они использовали, чтобы оставаться менее заметными и их было сложнее определить.
В общем, рекомендую почитать, может даже мы что-то у них позаимствуем :)
#malware #android #analisys
Fox-IT International blog
Flubot: the evolution of a notorious Android Banking Malware
Authored by Alberto Segura (main author) and Rolf Govers (co-author) Summary Flubot is an Android based malware that has been distributed in the past 1.5 years inEurope, Asia and Oceania affecting …
👍1
Forwarded from Android Good Reads (Egor Tolstoy)
Обновленные рекомендации по использованию Compose в RecyclerView
Начиная с
Начиная с
RecyclerView 1.3.0-alpha02 и Compose UI 1.2.0-beta02, Composables больше не уничтожаются при выходе за границы экрана. Вместо этого они сохраняются и переиспользуются. Благодаря такому подходу исчез большой перфоманс-оверхед из-за необходимости постоянно пересоздавать composables.👍3💯1
Forwarded from Mobile Developer (Алексей Гладков)
Просто мегастатья, посвящённая оптимизации сборки, уменьшению веса и тд
https://habr.com/ru/post/533578/
Что внутри:
🤌 Как работает компиляция сборки
🤌 Как работает ProGuard
🤌 Что такое D8, R8
🤌 Как это помогает в оптимизации
Если хотите пройти собес на синьора - не пропустите эту статью
https://habr.com/ru/post/533578/
Что внутри:
🤌 Как работает компиляция сборки
🤌 Как работает ProGuard
🤌 Что такое D8, R8
🤌 Как это помогает в оптимизации
Если хотите пройти собес на синьора - не пропустите эту статью
Хабр
Оптимизация сборок Android приложений: ProGuard, D8, R8. Тайны обфускации
Оптимизация сборки — вишенка на торте мобильного приложения. К счастью, существуют инструменты, проверенные временем и заслужившие доверие сообщества. К сожалению, ее не всегда воспринимают всерьез и...
👍3
Forwarded from Mobile Compose
#Article #Blog
movableContentOf and movableContentWithReceiverOf
Не так давно Jorge Castillo (автор книги Jetpack Compose Internals) создал блог “Effective Android”, в котором он публикует различные полезные материалы по Android разработке (естественно большая часть посвящена Compose).
В одной из таких статей разбираются функции movableContentOf и movableContentWithReceiverOf, которые позволяют нам сохранять состояние UI-контента и передавать его в последующие вызовы.
▫️P.S. В одном из предыдущих постов мы уже частично разбирали movableContentOf , может помочь для лучшего понимания
▫️P.S.S. В своем недавнем докладе я также уделял внимание этому механизму (ссылка с таймкодом)
movableContentOf and movableContentWithReceiverOf
Не так давно Jorge Castillo (автор книги Jetpack Compose Internals) создал блог “Effective Android”, в котором он публикует различные полезные материалы по Android разработке (естественно большая часть посвящена Compose).
В одной из таких статей разбираются функции movableContentOf и movableContentWithReceiverOf, которые позволяют нам сохранять состояние UI-контента и передавать его в последующие вызовы.
▫️P.S. В одном из предыдущих постов мы уже частично разбирали movableContentOf , может помочь для лучшего понимания
▫️P.S.S. В своем недавнем докладе я также уделял внимание этому механизму (ссылка с таймкодом)
Effective Android
movableContentOf and movableContentWithReceiverOf
Tracking compositions in Jetpack Compose
👍3
Forwarded from Mobile Developer (Pavel Kachan)
Мы многократно упоминали о важности копирования существующих приложений для становления крутым разработчиком. Но бывает сложно найти подробный дизайн известных приложений и выбрать готовый не сильно легче — либо бесплатно и не очень, либо здорово и относительно дорого.
Поэтому вот хороший и бесплатный дизайн мобильного банка от замечательного дизайнера Анастасии.
Дизайн мобильного банка:
https://www.figma.com/file/lu7nTUMx3k3mgQ9Hwjs4mj/Bank-App?node-id=0%3A1
Другие работы Анастасии:
https://www.behance.net/84be0c32
Поэтому вот хороший и бесплатный дизайн мобильного банка от замечательного дизайнера Анастасии.
Дизайн мобильного банка:
https://www.figma.com/file/lu7nTUMx3k3mgQ9Hwjs4mj/Bank-App?node-id=0%3A1
Другие работы Анастасии:
https://www.behance.net/84be0c32
Figma
Bank App
Created with Figma
👍2
Forwarded from Android Good Reads (Egor Tolstoy)
Интерактивный гайд по работе со стейтом с помощью Flow
Страница со статьей собрана на Compose for Web. Благодаря этому, можно не только смотреть на примеры кода, но и на ходу играть со стейтом и смотреть, как обрабатываются его изменения. Автор разбирает:
- Как реализовать UDF с помощью Flows
- Как прокидывать действия пользователя до стейта
- Как мерджить изменения в стейте
- Как решать конфликты при изменениях
Страница со статьей собрана на Compose for Web. Благодаря этому, можно не только смотреть на примеры кода, но и на ходу играть со стейтом и смотреть, как обрабатываются его изменения. Автор разбирает:
- Как реализовать UDF с помощью Flows
- Как прокидывать действия пользователя до стейта
- Как мерджить изменения в стейте
- Как решать конфликты при изменениях
👍2
Forwarded from Android Broadcast (Кирилл Розов)
Customize Android Studio to run third-party tools (without plugins) (3 мин)
Автор статьи делится тем как интегрировать любую внешнюю тулзу (без разработки плагинов!) в интерфейс Android Studio и работать с ней прямо из панели
#androidstudio
Автор статьи делится тем как интегрировать любую внешнюю тулзу (без разработки плагинов!) в интерфейс Android Studio и работать с ней прямо из панели
#androidstudio
👍1
Forwarded from Android Live 🤖
UDF с Kotlin Flow
#kotlin
Классный пример визуализации поведения Kotlin Flow в Android.
Автор рассмотрел основные кейсы работы
Получилась крутая визуализация, что будет полезно, если вы хотите лучше разобраться с
#kotlin
Классный пример визуализации поведения Kotlin Flow в Android.
Автор рассмотрел основные кейсы работы
Flow в контексте состояний, пользовательских действий и различных типов.Получилась крутая визуализация, что будет полезно, если вы хотите лучше разобраться с
Flow 🤓👍2
Forwarded from Разработка ждёт балета
Вообще мы у себя давно так делаем, оно появилось как-то само собой, чисто интуитивно, но оказывается у этого подхода есть умное название: Stacked PRs. Вкратце: не выкатываешь всю фичу разом на ревью, а отправляешь небольшими порциями в виде зависимых PRов. С github это всё довольно хорошо работает, но всё ещё приходится кое-что делать ручками. И вот тут в статье автор описывает, что хочется уметь делать минимальными усилиями, и какие тулы в этом могут помочь.
#git #tool
#git #tool
benjamincongdon.me
In Praise of Stacked PRs
Managing sets of small, dependent PRs enables faster review and increased developer velocity
👍1
Forwarded from Mobile Native ️️
Android Developer Options that you probably forgot
Полезная статья с обзором возможностей Developer Options.
От себя наиболее полезные опции выделяю: Strict Mode, Вытеснение активити, Debug GPU overdraw, Show view updates.
Иногда кстати, на собесах спрашивают например про отладку списков и в этом вопросе так же ожидают услышать про Developer Options, отрисовку кадров, перерисовку и вот это вот всё.
Читать (En)
Полезная статья с обзором возможностей Developer Options.
От себя наиболее полезные опции выделяю: Strict Mode, Вытеснение активити, Debug GPU overdraw, Show view updates.
Иногда кстати, на собесах спрашивают например про отладку списков и в этом вопросе так же ожидают услышать про Developer Options, отрисовку кадров, перерисовку и вот это вот всё.
Читать (En)
👍2
Forwarded from Kotlin Multiplatform Broadcast (Кирилл Розов)
Strings, Please! Eliminating Data Leaks Caused by Kotlin Assertions
В статье рассказывает про то как Kotlin генерит доп вызовы для выбрасывания исключений в Runtime, когда вы нарушаете Null Safety в Kotlin. Проблема в том что туда вставляются имена вызываемого кода, а при обфускации так и остаются оригинальными строками, что дает злоумышленникам проще разобраться в вашем коде.
Чтобы избавиться от этих проверок, используйте код на скриншотах, но только в релизных сборках. Для дебага проверки нужны.
Я уже давно предлагал и лаже описал способ как их выкосить с помощью конфига ProGuard/R8 (читайте здесь)
В статье рассказывает про то как Kotlin генерит доп вызовы для выбрасывания исключений в Runtime, когда вы нарушаете Null Safety в Kotlin. Проблема в том что туда вставляются имена вызываемого кода, а при обфускации так и остаются оригинальными строками, что дает злоумышленникам проще разобраться в вашем коде.
Чтобы избавиться от этих проверок, используйте код на скриншотах, но только в релизных сборках. Для дебага проверки нужны.
Я уже давно предлагал и лаже описал способ как их выкосить с помощью конфига ProGuard/R8 (читайте здесь)
👍1
Keynote доклад с прошедшего Droidcon Berlin 2022, посвященный современным подходам в Android разработке. Данный доклад можно охарактеризовать как набор базовых рекомендаций от Google, который разработчик может брать за основу при написании нового проекта:
👉 в качестве основного ЯП использовать Kotlin (Google активно переписывает актуальные библиотеки, повсеместно использует корутины и Flow, внедряет KSP на замену KAPT)
👉 для построения UI использовать Jetpack Compose (авторы предлагают делать выбор между Views&Compose и Compose: использовать старый подход только в случае невозможности реализации или отсутствия подходящего механизма на компоузе, при этом желательно проверять роадмап и создавать соответствующие issues)
👉 для построения архитектуры приложения использовать принципы, изложенные в Guide to app architecture (Clean Architecture + UDF)
👉 при измерении производительности приложения и ускорении запуска использовать соответствующие инструменты: Benchmark your app и Baseline Profiles
👉 для ускорения сборки проекта использовать доступный функционал Gradle (incremental builds, build cache, configuration cache, lazy APIs)
Посмотреть на реализацию данных рекомендаций на практике можно в тестовом приложении Now in Android.
👉 в качестве основного ЯП использовать Kotlin (Google активно переписывает актуальные библиотеки, повсеместно использует корутины и Flow, внедряет KSP на замену KAPT)
👉 для построения UI использовать Jetpack Compose (авторы предлагают делать выбор между Views&Compose и Compose: использовать старый подход только в случае невозможности реализации или отсутствия подходящего механизма на компоузе, при этом желательно проверять роадмап и создавать соответствующие issues)
👉 для построения архитектуры приложения использовать принципы, изложенные в Guide to app architecture (Clean Architecture + UDF)
👉 при измерении производительности приложения и ускорении запуска использовать соответствующие инструменты: Benchmark your app и Baseline Profiles
👉 для ускорения сборки проекта использовать доступный функционал Gradle (incremental builds, build cache, configuration cache, lazy APIs)
Посмотреть на реализацию данных рекомендаций на практике можно в тестовом приложении Now in Android.
droidcon
Keynote: Now in Modern Android
"Modern Android" best practices are a moving target, with ever-evolving guidance, libraries and tools coming from both the Android team and the community. In this talk we’ll examine some of the latest developments across Jetpack Compose, Material Design 3…
👍1
Forwarded from Android Good Reads (Egor Tolstoy)
Как CompositionLocal может помочь с аналитикой
CompositionLocal – это API в Compose, который позволяет получить доступ к каким-то данным из любого Composable без необходимости передачи их вручную через параметры функции. Пример использования – работа с темами.
CompositionLocal удобен и для того, чтобы настроить аналитику – ведь ее инициализация находится где-то в точке общей конфигурации приложения, а непосредственное логивание событий – в листьях дерева нод.
CompositionLocal – это API в Compose, который позволяет получить доступ к каким-то данным из любого Composable без необходимости передачи их вручную через параметры функции. Пример использования – работа с темами.
CompositionLocal удобен и для того, чтобы настроить аналитику – ведь ее инициализация находится где-то в точке общей конфигурации приложения, а непосредственное логивание событий – в листьях дерева нод.
👍2
В данном докладе автор рассказывает о частых ошибках, которые допускают разработчики при работе с корутинами.
Можно выделить следующие типы ошибок:
👉 последовательный вызов
👉 не предусматривать возможность отмены
👉 не делать
👉 не обрабатывать
👉 выставлять наружу
Данный доклад можно порекомендовать тем, кто только начинает осваивать корутины и использовать в своих проектах. Опытные разработчики с представленными ошибками уже давно столкнулись на практике и вряд ли узнают из видео что-то новое.
Можно выделить следующие типы ошибок:
👉 последовательный вызов
suspend функций, когда в этом нет необходимости (если результат вызова одной suspend функции не зависит от вызова другой, то данные действия можно выполнять параллельно, используя async в связке с await() или awaitAll())👉 не предусматривать возможность отмены
suspend функции (когда оборачиваем некоторое апи на коллбеках, не забывать об использовании suspendCancellableCoroutine вместо suspendCoroutine)👉 не делать
suspend функции безопасными для главного потока (в случае необходимости не забывать переключать контекст выполнения на другой поток с помощью withContext(Dispatchers.IO))👉 не обрабатывать
CancellationException (быть аккуратным при использовании блока try...catch, перехватывая только необходимые исключения или явно проверяя прилетевшее исключение на CancellationException с возможностью пробросить его дальше)👉 выставлять наружу
suspend функции из вьюмодели (при таком подходе могут возникнуть ошибки в случае использования неправильного внешнего CoroutineScope, автор рекомендует использовать viewModelScope, либо любой другой, созданный внутри вьюмодели)Данный доклад можно порекомендовать тем, кто только начинает осваивать корутины и использовать в своих проектах. Опытные разработчики с представленными ошибками уже давно столкнулись на практике и вряд ли узнают из видео что-то новое.
droidcon
5 Common Traps You Can Step Into When Using Coroutines
1. Talk denoscription Coroutines are a brilliant way to apply async programming in Kotlin projects, since they help us to avoid callback hell. On the surface, they seem to be very easy to use, however there are many not so obvious traps, you can step into if…
👍3