Обновить
109.63

Kotlin *

Статически типизированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Как заставить Android Studio ругаться на код по вашим правилам: создаем пользовательские Lint и Detekt

Уровень сложностиСложный
Время на прочтение22 мин
Охват и читатели186

Привет, Хабр! На связи Алина, старший Android-разработчик в команде Инвестиций «Совкомбанк Технологии». Сегодня поговорим о том, как заставить Android Studio самостоятельно следить за порядком в коде – без ручных проверок и без вечных напоминаний в командном чате.

В этой статье мы создадим практические правила для инструментов статического анализа кода и разберем, как внедрить их в проект. На примере lint рассмотрим контроль архитектуры пакетов и обязательную документацию с QuickFix, а на примере detekt – проверку неизменяемого состояния представления без Android-зависимостей и миграцию с RxJava на Coroutines.

Читать далее

Новости

Почему многие неверно реализуют MVVM или способы создания абстракций

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели3.8K

Привет, Хабр! Меня зовут Кирилл Маканков, я iOS-разработчик в ПСБ.  

Сегодня хочу поговорить про особенности реализации MVVM. Не с практической, а с теоретической стороны. С практической стороны этот архитектурный шаблон давно уже изучен вдоль и поперёк. А вот теоретических исследований, особенно применимых к Swift (и в общем, и к SwiftUI в частности), не так уж и много. Давайте вместе попробуем закрыть этот пробел и обосновать с теоретической точки зрения те или иные вариации реализаций в нашей ежедневной работе. Мобильным разработчикам на ObjC, Java и Kotlin данное исследование и обсуждение тоже будет полезно. Присоединяйтесь!

Если вы уже хорошо знакомы с MVVM, то в конце приведен опрос об используемой лично вами реализации. Давайте вместе определим, какая из реализаций самая популярная.

Читать далее

Изменения в G1/Parallel/Serial GC в JDK 26

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели5.9K

JDK 26 выходит уже совсем скоро. Тем временем в GC закрыли около 380 задач (почти в 2 раза больше, чем в прошлом релизе), но в этот раз акцент сместился с  больших фич в пользу практичных доработок.

Главное для всех сборщиков: нормальный учет CPU GC. Теперь считают не только stop-the-world паузы, но и конкурентную работу и дедупликацию строк. Можно посмотреть через лог cpu=info при завершении VM, обновили Hsperf-счетчики, есть доступ из кода. Плюс новый JFR-ивент с деталями по string dedup.

JEP 516: Aot Cache стал независим от выбранного GC и опций VM. Включение через опцию -XX:+AOTStreamableObjects.

G1 получил самые заметные улучшения: JEP 522 уменьшает синхронизацию между GC и приложением (цель - увеличить throughput). Еще: целевое использование CPU G1 по умолчанию снижено с 8% до 4%, добавили важнейший флаг UseGCOverheadLimit.

Читать далее

Ускоряем вставку данных в PostgreSQL

Время на прочтение20 мин
Охват и читатели8.1K

Это текстовая версия доклада с Java Rock Star Meetup, с которым выступал Дмитрий Фатов (@FatOFF ) — руководитель разработки Газпромбанка с опытом разработки приложений более 13 лет. Дмитрий работал как backend-, так и fullstack-разработчиком на языках Java, Kotlin, JS, TS, 1С и имеет большой опыт работы с SQL-базами данных.

Читать далее

Обзор управления встречами в Yandex Calendar и интеграция с Telemost

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели7K

Как энтузиаст в освоении технологий я не всегда следую трендам, а пытаюсь увидеть ценность там, куда люди могли не заглянуть. По этой причине исследовательская дорога привела меня к изучению вопроса, как создать встречу в Yandex Calendar и приложить в нее ссылку на Telemost используя доступный API и мой любимый Kotlin. Об этом опыте я и поделюсь в статье.

Узнать подробности

75 проектов в IntelliJ IDEA: как я перестал тонуть в Recent Projects и написал свой плагин

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели9.9K

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


Я работаю с несколькими клиентами, активных проектов в работе около 25 штук, стандартные средства и функционал IntelliJ IDEA(Recent projects) с таким количеством прекрасно справляется, быстро ввел название сервиса в поиск и так же быстро открыл.
Идеальная жизнь закончилась когда ко мне пришел клиент с еще 25 микросервисами в разных репозиториях и беклогом с багами в 300+ задач(white-label решение), я вздохнул и начал работать с 50 активными проектами и обнаружил что "Recent projects" в IDEA умеет хранить только 30 последних открытых проектов, и если ты открываешь 31 проект, увы первый пропадает как из поиска, так и из списка.

Через пару месяцев этот же клиент отправил меня на помощь одному из своих заказчиков, где те же 25 микросервисов, но со своими фичами, функционалом и так далее. По итогу к декабрю у меня образовалось 75 рабочих проектов и с десяток личных, и работать с этим комфортно я не представлялось возможным. Я начал искать какие то готовые решения на просторах магазина JetBrains - нашел три мертвых плагина с плоским функционалом и по факту тем же подходом как в "Recent projects".

Решение — свой плагин со всем функционалом что я хочу, без ограничений IDEA...

Читать далее

Как я пытался чинить анимацию в Jetpack Compose LazyColumn

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели8.5K

Привет, Хабр! Я Витя Строеску, последние пять лет в свободное от отдыха время занимаюсь разработкой под Android, три из которых — в команде мобильного оператора Т-Мобайл.

Поделюсь с вами опытом попытки конфигурации анимаций для айтемов у Compose LazyColumn. Мы переписывали наш главный экран с XML+View на Jetpack Compose, который состоит из списка с различного рода сложности айтемами.

В статье разберем, почему возникает рассинхрон, как устроен механизм анимаций внутри LazyColumn, почему кастомный animateItem обречен с самого начала и к какому решению мы пришли в итоге.

Читать далее

Разница между параллельными и распределёнными вычислениями

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели6.9K

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

Читать далее

Рецензия на книгу «Котлин. Краткий курс»

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели6.5K

Оригинал книги «Kotlin Crash Course: Fast-track your programming skills with practical experience» вышел в июне 2024 года от автора с серьезным опытом в крупной разработке. Русское издание «Котлин. Краткий курс» выходит в марте 2026, и в настоящий момент это самое свежее руководство по Kotlin на русском языке. В предисловии читателям обещают «быстрое погружение», но если открыть оглавление, становится понятно, что предстоит осилить около 600 страниц довольно плотного и структурированного материала. В рецензии разберем, что внутри, кому эта книга подойдет и насколько она остается актуальной к марту 2026 года.

Читать далее

Как реализовать WebSocket на Android и не сойти с ума

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели6.9K

Как часто вы слышите что-то о протоколе WebSocket? А как часто видели его в проектах? Продакшн? Андроид? Что? Его кто-то использует?

А теперь представьте, что перед вами стоит задача внедрить WS в крупный продакшн проект с нуля. С чего начать? Как подступиться?

Читать далее

Project Valhalla: революция в памяти Java

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели8.8K

Java-разработчики годами жили по принципу «Everything is an object». И всё бы хорошо, если бы за это нам не приходилось платить «налогом на объект»: каждый раз, когда вы создаёте простой класс из двух полей int, JVM бережно дописывает к нему тяжёлый заголовок, упаковывает в ссылку и разбрасывает по куче, заставляя процессор страдать от постоянных промахов кеша.

Мы привыкли к этому компромиссу. Мы научились использовать примитивные коллекции и костыли, чтобы выжать производительность там, где объектная модель Java начинает буксовать. Project Valhalla призван изменить сами правила игры.

Читать далее

Todo Budget v5.0: переписал весь UI с нуля на Jetpack Compose — и теперь ищу тех, кто его сломает

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели11K

До пятой версии главный экран был функциональным, но визуально скучным. Типичный Material Design без характера. Я получил несколько честных отзывов — в том числе жёстких — и решил переделать всё.

Читать далее

Введение в модели согласованности

Уровень сложностиПростой
Время на прочтение15 мин
Охват и читатели8.3K

Почему одни системы всегда показывают актуальные данные, а другие — иногда отдают устаревшее, но зато хорошо масштабируются и показывают хорошие показатели по производительности?

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

Читать далее

Ближайшие события

Зачем нужен companion object в Hilt-модулях

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели4.9K

Замечали некий companion object в интерфейсах Hilt-модулей? Что он делает, как он работает под капотом, почему так популярен в Hilt-модулях, и почему нельзя обойтись обычными классами? Сегодня я развею эту магию!

Читать далее

Навигация как нервная система: Как мы подружили немецкий автопром с японскими платными дорогами через AIDL

Уровень сложностиСложный
Время на прочтение5 мин
Охват и читатели4K

Если вы думаете, что навигационная система в современном автомобиле — это просто красивое приложение, которое рисует синюю линию на карте и говорит «через 200 метров поверните направо», вы застряли в 2010 году.

В Android Automotive OS (AAOS) навигация часто становится одним из самых жирных и критически важных системных компонентов. Это «пространственный мозг» машины. Десятки других модулей постоянно дергают её за рукав с вопросами: «Где мы?», «Какое ограничение скорости?», «Сколько полос на дороге?», «В какой полосе мы сейчас едем?».

В этой статье я поделюсь опытом из своей практики разработки навигационной системы для крупного немецкого автопроизводителя. Мы разберем, как построить надежное межпроцессное взаимодействие (IPC) внутри автомобиля на примере передачи ADAS-атрибутов для японского модуля ETC 2.0.

Читать далее

Сравнение MVI и KoTEA

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели4.9K

В мире Android-разработки существуют различные архитектурные паттерны.
Многие из вас хорошо знакомы с MVVM, и возможно сталкивались с MVP. В последнее время всё чаще звучит аббревиатура MVI (Model-View-Intent). Однако наряду с MVI существует похожий на неё подход – KoTEA (Kotlin The Elm Architecture).

Давайте сравним их и разберём их различия.

Читать далее

Kotlin для новичков: от установки IDE до первого проекта

Время на прочтение6 мин
Охват и читатели8.4K

Kotlin уже не просто язык для Android. В 2026 году на нём пишут бэкенд, кроссплатформенные приложения и даже заменяют Java. Почему команды уходят с Java на Kotlin, как новичку начать и при чём тут Kotlin Multiplatform? Разбираемся и пишем «Hello, World!» с Gradle. Бонус: пример кода и ссылка на репозиторий.

Читать далее

Бойтесь буквы «M». Самый странный баг в моей жизни

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели36K

Вечером в пятницу коллега, назовем его Мститель, спросил, не сталкивался ли я с проблемой, что route возвращает 400... но «если сменить название на сильно другое», то всё ок. Я сперва не обратил внимание на слово «сильно». Может быть, где-то дублируется регистрация этого рута? Или мститель перепутал GET и POST. Или какой-то баг в общем на создание хэндлеров?

Милости просим

Часы Лампорта

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели9.6K

Сегодня мы живём в мире распределённых систем: Apache Kafka, Apache Spark, Apache Cassandra — это уже не экзотика, а повседневная инфраструктура продакшена.

Сервисы пишут события, стримы обрабатываются в реальном времени, данные реплицируются по датацентрам. И почти в каждом таком сценарии возникает фундаментальный вопрос:

Как понять, что произошло раньше, а что позже, если глобального времени не существует?

Здесь в игру вступают логические часы Лампорта — простая, но концептуально мощная идея, лежащая в основе причинно-следственного порядка в распределённых системах.

Подробнее - в новом переводе от команды Spring АйО.

Читать далее

Как нарезать Android-монолит с помощью compile-time плагинов?

Уровень сложностиСложный
Время на прочтение10 мин
Охват и читатели5.9K

Привет на связи Федотов Михаил и Абдульманов Эдуард, мы технические лидеры Android разработки в Альфа-Банке и занимаемся приложением для физических лиц.

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

Переход к таким мини-приложениям позволяет ускорить конфигурацию Gradle и уменьшить время компиляции проекта как локально так и на CI.

Думаю это будет полезно тем кто интересуется архитектурой android приложений, KSP, Dagger, а также тем у кого крупное многомодульное приложение и есть проблемы с производительностью работы Gradle в проекте.

Читать далее
1
23 ...