Telegram Web
​​10 случаев, когда можно обойтись без мыши при работе с IntelliJ IDEA
#tips

Тут мне скинули классную статью от JetBrains, где даются советы по работе с IntelliJ IDEA без мыши. Думаю, что это особенно актуально и полезно, когда работаешь с одного ноутбука.

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

В общем, крайне рекомендую, вероятно вы тоже возьмете парочку советов себе в копилку.😎
​​Заблуждения Clean Architecture
#architecture

Clean Architecture — самый распространённый набор рекомендаций к архитектуре среди Android-разработчиков.
И вроде разделение на слои выглядит простым и логичным, однако если копнуть глубже, то выясняется много интересных деталей.

Например, как лучше настроить mapping объектов между слоями, как выполнять переходы между ними, что входит в понятие Entities, сколько методов должно быть в Interactor, а вообще UseCase и Interactor — одно и то же.

Отличная статья, которая даёт ответы на большинство основных вопросов. Вероятно, после прочтения статьи у вас также возникнет переосмысление текущих подходов к архитектуре.
Хотя, как правильно заметил создатель этого подхода — Uncle Bob, «все мы пираты по натуре и правила, о которых я говорю тут, на самом деле, скорее рекомендации» 🏴‍☠️
​​Awesome KMM
#kmm #kotlin

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

Тут и плагины, которые нужны для написания приложений, и библиотеки для сети, логгирования, сохранения данных, авторизации в соц.сетях… в общем, каждый найдёт то, что ему нужно. Ну и можно предложить свою библиотеку в список, если разработчики что-то забыли добавить 😉
​​Как управлять конфликтами версий в Gradle?
#gradle #tips

Отличный гайд, где описывается, как разрешить проблемы при добавлении одинаковой зависимости, но с разной версией.

Подобная проблема, на самом деле, довольно распространённая, так как ваши текущие библиотеки могут обновляться не так быстро, как ваш основной модуль, что может привести к сложностям в сборке всего проекта.
​​Kotlin Multiplatform Wizard
#kmm #kotlin

Кроме отличного набора библиотек для KMM, ребята из JetBrains сделали Wizard, где можно быстро создать проект под KMM, выбрав необходимые таргеты и некоторые библиотеки.

В итоге получаем пустой проект с настройками для выбранных платформ, в котором можно быстро начать писать код. Ну или можно просто скопировать настройки build.gradle, чтобы не настраивать его самостоятельно. В общем, добавляйте в закладки, пригодится. 😎
​​Релиз Android-приложения каждый день
#gradle #tools

Выпуск новой версии приложения — довольно трудоёмкий процесс для большинства разработчиков. Ведь нужно проверить последние фичи, перевести новые строки, проверить, не сломались ли текущие вещи… ну и верить, что Proguard не поломал что-то, если добавили новую библиотеку. 🙃

Ребята из команды Todoist поделились секретами автоматизации процесса создания билдов в своей команде.

Что было:
большие ветки в git с кодом — каждый раз, когда разработчик пытался влить в develop свою фичу, его ожидали конфликты с уже влитыми фичами и попытки всё исправить, что отнимало время.

блокер в виде переводов — приложение переводится на 15 языков, что также затягивало процесс: надо было сделать какой-то файл для переводчиков и дождаться ответа от них, а когда всё завершится, влить это в готовую ветку. Ну и проверить, что переводчик не поломал формат строк.

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

Что добавили:
feature flags — добавили возможность включения и отключения частей приложения удалённо, что позволяет не ожидать полностью завершённой фичи в главной ветке, ведь пользователь этого не увидит. При этом заметно уменьшается число конфликтов при слиянии веток.

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

автоматический changelog — добавляют его на основе pull request от разработчиков.

В итоге получилось заметно снизить время загрузки конкретного билда, что улучшило много показателей приложения. 👏🏻
​​Определяем подмену локации и клон приложения
#tools

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

Разработчики решили подсчитать, сколько курьеров использует подмену локации или клон приложения.
Цифры оказались довольно значительными: около 8% клонирует приложение, и столько же использует подмену локации. Для масштабного приложения — это большие цифры.
Вероятно, курьеры это делают для избежания штрафов за просроченный заказ или же пробуют выбрать для себя наиболее прибыльную доставку.🤪

Вот несколько проверок, которые добавились:
- проверка на root и режим разработчика;
- простая проверка на mock локации при помощи isFromMockProvider;
- список приложений, которые запрашивают разрешение на ACCESS_MOCK_LOCATION ;
- проверка переименования package name;
- проверка storage path, куда установлено приложение;
- проверка запуска на виртуалке и эмуляторе;

Результаты радуют, ведь удалось убрать практически все попытки подмены локации и клонирования приложения. 👍🏻
​​Kotlin 2021 Keynote
#kotlin

Тут у ребят из JetBrains идёт целая серия роликов, которая посвящена новинкам и будущему продуктов, связанных с Kotlin.

Вчера было первое мероприятие, где рассказывалось об основных новинках. Детальный разговор о каждой пойдёт дальше, но вот основные тезисы:
◆ в версии 1.6 выходит новый IR компилятор, который будет называться K2. Обещают буст производительности;
◆ KMM выходит в beta статус уже следующей весной, что также принесёт сразу несколько улучшений: и новую модель памяти, и обратную совместимость с Kotlin/Native и более стабильные инструменты. Ждём-ждём, держу кулачки за эту технологию🤜🤛;
◆ Compose Multiplatform выходит stable уже в этом году. Будет поддержка Android, web и desktop;
◆ появляются новые версии Ktor, Kotless и Data Science библиотек;
◆ Dokka, инструмент для создания документации в Kotlin-проектах, переходит в beta и получит редизайн;
◆ выходит Kover — новый gradle-плагин для проверки качества кода;
◆ ну и самое главное, у Kotlin появляется талисман😁. Скоро будет возможность выбрать ему имя.

Следим за анонсами дальше, ссылка на следующие видео тут.
​​Как защитить premium-фичи от взлома
#android

Крутая статья, где описывается процесс исследования своего приложения на предмет доступа к премиальным фичам.

В двух словах, это происходит так: злоумышленник исследует приложение на предмет того, не сохранял ли разработчик флаг в SharedPreferences, или каком-то другом локальном хранилище, и переписывает этот флаг в true.

Подобные решения появляются из-за неопытности разработчиков, а также по причине желания использовать премиальные фичи на устройствах без Google Play Services.

Больше деталей и о том как избежать подобных проблем в своём приложении можно почитать тут.
​​GroupingBy vs groupBy
#kotlin

В Kotlin есть целый набор операторов для работы с коллекциями. Одни из самых распространённых — groupBy, который возвращает Map<K, List<V>>, где V — элемент исходной коллекции, а K — ключ, по которому мы группируем нашу коллекцию.

Например, если мы хотим сгруппировать пользователей по идентификатору, который имеет тип String, то на выходе мы получим Map<String, List<User>>. Иначе говоря, мы превращаем нашу изначальную коллекцию в несколько меньших, сгруппированных по определённому признаку.

Это крутой метод, но не многие знают про groupingBy, который может быть полезен для задач, где особенно важна производительность, ведь он не создаёт промежуточный список для каждой маленькой коллекции. Вместо этого метод возвращает объект Grouping, который по сути является обёрткой над Iterator.

В нём гораздо меньше функции, однако, если вам очень важна производительность, подобный метод может помочь. Ну и просто будете знать, что существует такая альтернатива, вдруг пригодится на собеседовании. 😁

Подробнее о кейсах и о том, как его использовать можно почитать тут.
​​MVI
#architecture #beginners

Архитектура MVI достаточно распространённый подход к созданию мобильных приложений. Но многие разработчики не используют её по причине усложннённости по сравнению с MVVM и MVP. Ну и стоит заметить, что многие используют MVI некорректно, получая не тот результат, который ожидали.

Есть крутейший цикл статей, который поможет проникнуться и наконец начать использовать MVI-подход в приложениях.
Автор рассказывает про Model, View and Intent, State Reducer, независимые UI-компоненты и ещё столько же статей про основные аспекты MVI.

Одним словом, крайне рекомендую. 👍
​​Android Dev Summit
#conference

Думаю, что большинство из вас в курсе, но всё же напомню.
Уже сегодня состоится конференция для Android-разработчиков от Google — Android Dev Summit, где у нас будет множество прекрасных докладов.

Доклады разделены на следующие темы:
🔹Jetpack Compose, now with Material You — понятно из названия, что нам расскажут про интеграцию Material You с Compose: тут и про анимации, и про темы, и про цвета, и про виджеты.

🔹 Building for large screens — расскажут о том, как строить свои приложения для больших экранов. Тема не новая, ведь мы всегда имеем в наличии планшеты, однако последний тренд говорит нам о сгибаемых экранах, под которые вскоре придётся адаптировать свои приложения.

🔹 Modern Android Development — тут опишут лучшие практики для современной Android-разработки: Flow, WorkManager, Room, AndroidX Media, Gradle Plugin. В общем, крутой раздел, который будет интересен большинству разработчиков.

🔹 Private and secure by design — небольшой раздел, где расскажут о современных штуках, связанных с данными пользователей, что стоит ожидать нам, разработчикам в ближайшем будущем.

🔹 Android 12 — расскажут о том, на что стоит обратить внимание в последней версии Android.

Ну и ещё парочку разделов про приложения на Android Auto, TV и играх.
Ссылка на все доклады тут.
​​Modern Android Development
#conference

Google решили не мелочиться и выложить все видео с Dev Summit в самом его начале. Отдельный плюс за то, что все доклады короткие и их можно легко посмотреть.

Я потихоньку смотрю 🤓
Делюсь с вами самыми интересными для меня докладами из плейлиста Modern Android Development.

1️⃣Room 2.4.0 — хорошее видео, где рассказывается о новинках в последней версии Room: автомиграциях, MultiMap и т.д. Будет полезно, чтобы быть в теме, тем более, что версия уже стабильна.

2️⃣Kotlin Flow in practice — здесь вам расскажут о полном цикле работы с Flow в Android. Все примеры практические. Упомянут и о подводных камнях при работе, а также о взаимодействии с жизненным циклом.

3️⃣WorkManager — Back to the foreground — будет полезно новичкам, кто не работал с Worker, ну или для тех, кто хочет освежить свои знания.

Буду рад, если поделитесь своими фаворитами из этого плейлиста. 😉
​​Миграция на Material Design 3
#material #design

Весной этого года, в Google анонсировали Material You, который, по сути, является развитием Material Design.
Главная фича, которая там есть — это поддержка dynamic color, к которой можно подготовить свои приложения.
Ну и в целом, изменились правила по работе с цветами и шрифтами. Давайте посмотрим чуть подробнее, на что стоит обратить внимание.

1️⃣ Обновляем тему на Material 3 — для этого нужно заменить Theme.MaterialComponents.* на Theme.Material3.* и Widget.MaterialComponents.* на Widget.Material3.*.

2️⃣ Меняем цвета и темы — добавилось несколько цветов, а именно Tertiary color, цвета контейнеров и несколько вариантов цветов colorOnSurface. Проще всего добавить их при помощи Material Theme Builder.

3️⃣ Изменяем Typography — поменялся нейминг для вариаций шрифтов. В целом, ничего сложного, их число стало меньше и теперь они вместо номеров имеют названия Small, Medium и Large.

4️⃣ Меняем компоненты — изменился внешний вид BottomNavigationView, AppBar, FloatingActionButton и кнопок.

В целом, мне нравится. Осталось дело за главным — приспособить свои приложения к этому дизайну.
Больше деталей и информации можно найти тут.
​​Privacy Dashboard
#security #android

В Android 12 добавилась интересная для пользователя фича — Pricacy Dashboard. С каждой версией добавляются всё новые и новые инструменты для защиты приватности пользователей, и вот теперь каждый может посмотреть, какое приложение и когда использовало локацию, микрофон и камеру за последние сутки.

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

Думаю, что для большинства приложений всё останется так, как и есть сейчас, ведь уже давно мы запрашиваем только те разрешения, которые действительно нужны.
​​Обновление зависимостей gradle
#gradle

В gradle у нас есть удобная фича, которая показывает предупреждение о том, что доступна новая версия зависимости. Однако, если использоваться Kotlin DSL, то такие предупреждения могут не появляться, так что обновлять зависимости довольно сложно.

Есть классное решение, где проверкой зависимостей будет заниматься плагин. После подключения плагина к проекту, станет доступна команда, которая выведет список зависимостей для обновления в файл.
А дальше всю работу можно вынести на какой-нибудь Github Actions, что добавит ещё больше автоматизации в процесс.

Автор статьи так и сделал, а ещё добавил отправку отчёта на почту. Получилось круто, остаётся только пробежаться по зависимостям и проверить, что проект корректно собирается.
​​Jetpack Compose vs SwiftUI
#compose #kmm

Неплохая статья, где автор делится своими наблюдениями о различиях в Jetpack Compose и SwiftUI.
Кроме того, он поделился двумя версиями одного и того же приложения: под Android и iOS.

Статья будет полезна в случаях, если вы работаете над приложениями под KMM и хотите больше понять особенности работы двух платформ, а также если вы просто хотите разобраться, как работает противоположная платформа и где какие вещи сделать проще и удобнее.
​​Paging из сети и базы данных
#room #jetpack

Хорошая статья, где рассказывается о реализации распространённого получения данных при помощи Paging3 из Jetpack.
Идея заключается в том, что мы всегда получаем данные из базы данных, сразу же отображаем пользователю, а дальше обновляем их из сети, когда пора обновить и есть соединение.

В Paging3 есть все нужные инструменты: и работа из коробки в Room, и различные типы Mediator, и поддержка состояний загрузки или ошибки.
​​Изучаем папку .idea in Android
#android

При создании нового проекта, автоматически создаётся папка .idea, которая часто автоматически попадает в .gitignore.

Но на самом деле, некоторые компоненты из этой папки стоит оставить, а некоторые можно время от времени удалять, чтобы сэкономить место на диске.
Автор статьи решил разобраться со структурой этой «магической» папки и описал, за что отвечает каждый из файлов.

Например, автор рекомендует включать в .gitignore папки caches, libraries и modules, но при этом оставить в проекте codeStyles, dictionaries, fileTemplates и парочку других.
​​Support Modern Emoji
#design

Emoji сегодня — довольно важная часть, которая используется повсеместно, будь то чаты или просто текстовые поля. Однако, не все emoji одинаково отображаются на всех устройствах.
Если мы говорим про более старые гаджеты, то вместо красивой иконки мы может получить просто квадрат. А ещё, мало кто задумывается, что комбинация из 2 и более emoji может давать новую.

Любопытная статья, которая рассказывает об отображении emoji в текстовых полях. На самом деле, есть целая библиотека, которая помогает отобразить emoji на старых устройствах, начиная с API 19. Она интегрирована в AppCompat 1.4, поэтому вам не нужно ничего докручивать.

Но очень круто почитать, как это работает под капотом и о том, что происходит если вводить emoji в текстовые поля.
2025/08/27 16:26:31
Back to Top
HTML Embed Code: