Что нового:
👉 Добавили новые API для задания ограничения потребления памяти, когда приложение в фоне
👉 SvgDecoder может работать со сторонними парсерами SVG
👉 Много минорных улучшений API
👉 Обновлени зависимостей
#kotlin #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍8
Fuzz testing - это подход для автоматичекской генерации тестов со случайными или невалидными входными данными, чтобы проверить неожиданные ошибки и сценарии. Теперь есть официальное решение от JetBrains kotlinx.fuzz
@KFuzzTest
fun testDuration(f: KFuzzer) {
val isoString = f.asciiString(10)
val duration = Duration.parseIsoStringOrNull(isoString)
println("$isoString -> $duration")
}
#kotlin #тестирование
Please open Telegram to view this post
VIEW IN TELEGRAM
❤27👍11
Media is too big
VIEW IN TELEGRAM
Подробный рассказ как в IDEA улучшали интеграцию между IDE и библиотекой Kotlin Coroutines для реализации дебага корутин как синхронного кода
#kotlin #coroutines #idea #kotlinconf25
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔10❤5👍3
🔗 Альтернативная ссылка
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🤯10❤2🙏1
Kotlin-to-Swift экспорт позволяет удобно использовать скомпилированный для Apple таргетов код из Swift удобным образом. Изменение добавили в Kotlin 2.2.20-Beta2
Ключевые фичи:
👉 Поддержка многомодульности: каждый Kotlin модуль - отдельный Swift модуль
👉 Поддержка пакетов в коде
👉 type alias теперь доступны из Swift
👉 Улучшения в nullability с примитивными типами
👉 Вызов перегруженных функций в Kotlin из Swift кода
👉 Можно изменить имя модуля
Фича всё ещё в экспериментальном режиме и для её включения надо выполнить ряд действий (подобно как раньше в XCode проект подключался KMP модуль)
#kotlin #swift #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥11🤔1
Теперь общие зависимости (common) можно объявить в dependencies блоке в kotlin {}
kotlin {
@OptIn(ExperimentalKotlinGradlePluginApi::class)
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2")
}
}
#kotlin #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17🔥7🎉3👍1
Kotlin Multiplatform Broadcast
Вот тут много вопросов... Хочется чтобы объявление зависимостей было в корне проекта, как это делается со всеми другими:
но кажется, что из блока Kotlin им не уйти из-за конфликтов с другими объявлениями (не факт что причина такова)
// build.gradle.kts
dependencies {
commonImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2")
androidMainImplementation(...)
jvmImplementation(...)
}
но кажется, что из блока Kotlin им не уйти из-за конфликтов с другими объявлениями (не факт что причина такова)
👍14
В Kotlin Multiplatform проекте теперь можно шарить код между JS и wasmJs таргетами через общий source set - WEB.
Изменение доступно в Kotlin 2.2.20-Beta2
#kotlin #kmp
Изменение доступно в Kotlin 2.2.20-Beta2
#kotlin #kmp
🔥15❤7👍2
В новой бете Kotlin 2.2.20 стабилизирована кроссплатформенная компиляция .klib-артефактов. Теперь публиковать Kotlin-библиотеки можно с любой хост-машины, что значительно упрощает процесс, особенно для Apple-таргетов.
Mac всё ещё потребуется, если проект использует cinterop, CocoaPods или нужно собрать финальные бинарники для Apple. Подробности — в документации.
Если в
gradle.properties
добавляли kotlin.native.enableKlibsCrossCompilation=true
, то теперь можно убрать#kotlin #kmp #klib #native
Please open Telegram to view this post
VIEW IN TELEGRAM
🏆23👍6❤3🤔1
В Kotlin 2.2.20-Beta2 можно попробовать новое поведение при использовании
return
- обязательное объявление возвращаемого типа функции. Новое поведение будет по умолчанию работать в Kotlin 2.3.0// ✅ Возвращаемый типы функции указан. Можно использовать return
fun getDisplayNameOrDefault(userId: String?): String =
getDisplayName(userId ?: return "default")
// ❌ Не компилируется. Используется return без явного указания возвращаемого типа функции
fun getDisplayNameOrDefault(userId: String?) =
getDisplayName(userId ?: return "default")
Готовимся к миграции после обновления языка. Всё во славу большей стабильности нашего кода
#kotlin #kotlin_2_3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74🤔28🤯9🏆4
👉 Effective Debugging Kotlin Native in Xcode
👉 KMP with non-Koltin languages
👉 Metaprogramming with Kotlin Symbol Processing
👉 Playing with experimental Kotlin features
👉 Ready layer one intro to the Model Context Protocol
👉 Coroutines party tricks
👉 Beyond Detekt: Building a Kotlin Compiler Plugin for Compose Insights
👉 Kotlin Coroutine Mechanisms: A Surprisingly Deep Rabbithole
#kotlin #kmp #droidcon
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥5🙏2🤔1
Forwarded from Android Broadcast
🎉 Новый инструмент управления состоянием для Flutter - yx_state
Команда Городских сервисов Яндекса разработала и выложила в опенсорс новый state management для Flutter. Около года назад они выпустили yx_scope — фреймворк для Dependency Injection.
yx_state — это набор библиотек для управления состоянием в Dart‑ и Flutter‑приложениях, созданный с фокусом на простоту использования и гибкость настройки. В наборе три библиотеки:
👉 yx_state — библиотека для управления состоянием
👉 yx_state_flutter — набор виджетов для интеграции с Flutter
👉 yx_state_transformers — набор трансформеров для управления стратегиями выполнения операций.
Ключевые особенности:
👉 Простота. Методы вместо событий — никаких дополнительных классов и маппингов.
👉 Последовательность выполнения. Если вы несколько раз подряд вызовете методы, использующие handle, то каждая новая операция будет ждать завершения предыдущей, образуя очередь.
👉 Удобство. Можно дождаться выполнения операции привычным способом через await.
👉 Гибкие стратегии. По умолчанию все операции выполняются последовательно, но можно изменить поведение на другое, например, параллельное выполнение.
👉 Глобальные переопределения. Можно настроить поведение всех StateManager в приложении в одном месте, не изменяя код каждого отдельного StateManager.
👉 Обработка ошибок. У StateManager есть встроенный механизм для обработки исключений. Если вы не перехватываете исключения, они будут автоматически перехвачены и обработаны.
👉 Интеграция с Flutter. StateBuilder для перестройки UI при изменении состояния, StateListener — виджет для выполнения сайд‑эффектов без перестройки UI и другие.
В Яндекс Про этот инструмент уже использовался для создания сотен разных фич, теперь с ним может ознакомиться каждый — исходный код уже лежит на🐱 GitHub.
❗️ Примеры и подробный обзор в статье на Хабре.
#flutter #opensource
Команда Городских сервисов Яндекса разработала и выложила в опенсорс новый state management для Flutter. Около года назад они выпустили yx_scope — фреймворк для Dependency Injection.
yx_state — это набор библиотек для управления состоянием в Dart‑ и Flutter‑приложениях, созданный с фокусом на простоту использования и гибкость настройки. В наборе три библиотеки:
👉 yx_state — библиотека для управления состоянием
👉 yx_state_flutter — набор виджетов для интеграции с Flutter
👉 yx_state_transformers — набор трансформеров для управления стратегиями выполнения операций.
Ключевые особенности:
👉 Простота. Методы вместо событий — никаких дополнительных классов и маппингов.
👉 Последовательность выполнения. Если вы несколько раз подряд вызовете методы, использующие handle, то каждая новая операция будет ждать завершения предыдущей, образуя очередь.
👉 Удобство. Можно дождаться выполнения операции привычным способом через await.
👉 Гибкие стратегии. По умолчанию все операции выполняются последовательно, но можно изменить поведение на другое, например, параллельное выполнение.
👉 Глобальные переопределения. Можно настроить поведение всех StateManager в приложении в одном месте, не изменяя код каждого отдельного StateManager.
👉 Обработка ошибок. У StateManager есть встроенный механизм для обработки исключений. Если вы не перехватываете исключения, они будут автоматически перехвачены и обработаны.
👉 Интеграция с Flutter. StateBuilder для перестройки UI при изменении состояния, StateListener — виджет для выполнения сайд‑эффектов без перестройки UI и другие.
В Яндекс Про этот инструмент уже использовался для создания сотен разных фич, теперь с ним может ознакомиться каждый — исходный код уже лежит на
#flutter #opensource
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔16👍5❤1
Про инструменты для статического анализа Kotlin-кода я уже писал в отдельном посте. Но когда нужно проверить не стиль форматирования, а именно именование, расположение и иерархию классов, обычных линтеров недостаточно. Тут нужен инструмент, который умеет смотреть на проект целиком и анализировать код между файлами.
Для Kotlin такую задачу отлично решает библиотека Konsist. Проверки в ней выглядят как обычные Unit-тесты (поддерживается несколько тестовых JVM движков).
Например, в одном из проектов я добавил правила:
👉 Все классы, чьи имена заканчиваются на ViewModel, должны наследоваться от ViewModel (к сожалению, заставить использовать именно Jetpack ViewModel не получилось).
👉 Все свойства с типом MutableStateFlow<*> должны быть недоступны за пределами класса.
private var viewModels: List<KoClassDeclaration> = emptyList()
@BeforeTest
fun setup() {
// Собираем все классы, чьи имена оканчиваются на ViewModel
viewModels = Konsist
.scopeFromProject()
.classes()
.withName { name -> name.endsWith("ViewModel") }
}
@Test
fun `Every ViewModel class extends from 'ViewModel'`() {
viewModels.assertTrue { viewModel ->
viewModel.hasParentWithName("ViewModel", indirectParents = true)
}
}
@Test
fun `MutableStateFlow properties in ViewModel are not visible outside`() {
viewModels
.properties()
.filter { property ->
property.hasType { type ->
type.hasNameMatching(Regex("MutableStateFlow<\\w+>"))
}
}
.assertTrue { property ->
property.hasPrivateModifier || property.hasProtectedModifier
}
}
Правила можно делать любой сложности — от проверки нейминга до соответствия архитектуре.
Всё это запускается как обычные JVM-тесты и выполняется достаточно быстро ⚡️
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍45🔥14❤2
🤯 Как Google делает Android-библиотеки мультиплатформенными 🚀
Разбирая исходники Navigation 3 я наткнулся на необычную папку в KMP-проекте — jvmStubsMain.
Внутри — только методы, которые либо возвращают значения по умолчанию, либо сразу выбрасывают исключения. Сборка под desktop из этого не получится, да и авторы такую цель не ставили. Возникает логичный вопрос: зачем тогда эта папка нужна? 🤔
🏝 Особенность KMP
В Kotlin Multiplatform папка commonMain содержит код, доступный всем таргетам.
Например:
👉 Если у проекта есть Android и iOS таргеты, в commonMain можно писать только чистый Kotlin + мультиплатформенные API.
👉 Но если оставить только Android-таргет, в commonMain внезапно станет доступен весь Android SDK 🤯 — что для меня было сюрпризом.
❗️ Зачем нужен jvmStub
Добавление таких stub-таргетов в Android-библиотеках помогает искусственно ограничить доступ к платформенным API в commonMain.
Почему это работает:
👉 У JVM и Android в KMP нет общего родителя в стандартной иерархии source sets (хотя платформы имеют много общего).
👉 Stub-реализации позволяют “отсечь” случайное попадание Android API в общий код.
👉 Это помогает держать код в commonMain чистым и переиспользуемым — вдруг завтра вы захотите добавить desktop или другую платформу.
💡 jvmStubsMain — это инструмент архитектурной дисциплины. Он не предназначен для полноценной JVM-сборки, но отлично помогает не тянуть Android-зависимости в общий код и сделать чистую арзитектуру
#kotlin #kmp #android #google
Разбирая исходники Navigation 3 я наткнулся на необычную папку в KMP-проекте — jvmStubsMain.
src
├── commonMain
├── androidMain
└── jvmStubsMain
Внутри — только методы, которые либо возвращают значения по умолчанию, либо сразу выбрасывают исключения. Сборка под desktop из этого не получится, да и авторы такую цель не ставили. Возникает логичный вопрос: зачем тогда эта папка нужна? 🤔
В Kotlin Multiplatform папка commonMain содержит код, доступный всем таргетам.
Например:
👉 Если у проекта есть Android и iOS таргеты, в commonMain можно писать только чистый Kotlin + мультиплатформенные API.
👉 Но если оставить только Android-таргет, в commonMain внезапно станет доступен весь Android SDK 🤯 — что для меня было сюрпризом.
Добавление таких stub-таргетов в Android-библиотеках помогает искусственно ограничить доступ к платформенным API в commonMain.
Почему это работает:
👉 У JVM и Android в KMP нет общего родителя в стандартной иерархии source sets (хотя платформы имеют много общего).
👉 Stub-реализации позволяют “отсечь” случайное попадание Android API в общий код.
👉 Это помогает держать код в commonMain чистым и переиспользуемым — вдруг завтра вы захотите добавить desktop или другую платформу.
💡 jvmStubsMain — это инструмент архитектурной дисциплины. Он не предназначен для полноценной JVM-сборки, но отлично помогает не тянуть Android-зависимости в общий код и сделать чистую арзитектуру
#kotlin #kmp #android #google
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍69
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27👍4🎉2
Пока вы спали Google выпустила версию KSP, совместимую с Kotlin 2.2.10. Обновляйтесь до версии 2.2.10-2.0.2 и свежий Kotlin
#kotlin #ksp
#kotlin #ksp
🎉31👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Уже анонсированы доклады про Swift Testing и работу с JSON через Codable.
👉 Заглядывайте в программу за апдейтом, а лучше сразу регистрируйтесь — места разлетаются только так
🔥 Cобытие Ozon Tech притягивает middle+ инженеров из топовых компаний страны. В числе спикеров эксперты из Авито, Т-Банка, Яндекса, МИРа. А в лайнапе вечеринок — НТР, Нейромонах Феофан, ILWT и Заточка.
Исключительно полезный день х Чрезвычайно весёлый вечер.
Это E-CODE. Москва. 14 сентября.
#реклама
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
Если вам интересно попробовать KMP под Аврора ОС, то вы можете сделать это. Наработки открыты в официальном репе: примеры, библиотеки, документация и QT биндинги.
Работа Kotlin кода на Аврора ОС происходит через нативный код под Linux таргет.
Адаптация Compose для Аврора идёт полным ходом и будет доступно в 2026 году. Я видел запущенный пример простого Compose приложения, и текущий статус работ вселяют большую уверенность в хорошем результате!
То что разработчики ОС стали делать фокус на популярных в мобильном сообществе инструментах - большой плюс. Уже есть Flutter для Аврора ОС, скоро будет еще возможность работать с KMP + Compose. Это явно даст буст для ускорения переноса существующих приложений и кодовой базы.
#kotlin #compose #auroraos
Please open Telegram to view this post
VIEW IN TELEGRAM
❤23🤔14🔥11