Команда плагина будет работать над улучшениями инструментов для KMP разработки
💻 Поддержка Windows и Linux: появится возможность использования KMP плаигна на Windows и Linux, но запуск iOS приложений останется пререгативой macOS
🦢 Расширенная поддержка Swift: текущий плагин имеет базовую поддержку Swift, но будет добавляться поддержка фичей сложнее: поиск использований, навигации по иерархии типов и др.
🏝 Создание KMP модулей в проекте: создание KMP модулей с использованием стандартного KMP визарда
🛠 Лучшая поддержка инструментов для Web и Desktop: после стабилизации поддержки мобильных платформ, будет фокус на улучшение поддержки таргетов Web и Desktop.
#kotlin #kmp #idea #androidstudio
💻 Поддержка Windows и Linux: появится возможность использования KMP плаигна на Windows и Linux, но запуск iOS приложений останется пререгативой macOS
🛠 Лучшая поддержка инструментов для Web и Desktop: после стабилизации поддержки мобильных платформ, будет фокус на улучшение поддержки таргетов Web и Desktop.
#kotlin #kmp #idea #androidstudio
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥9
KSensor - KMP библиотека для работы с сенсорами на Android и iOS. Поддерживает акселерометр, гироскоп. магнитометр, барометр, счетчик шагов, местоположение
#kotlin #kmp #android #ios
val sensors = listof(
SensorType.ACCELEROMETER,
SensorType.GYROSCOPE,
SensorType.MAGNETOMETER,
SensorType.BAROMETER,
SensorType.STEP_COUNTER,
SensorType.LOCATION,
)
// Register sensors
KSensor.registerSensors(
types = sensors,
locationIntervalMillis = {optional. default is 1000L},
onSensorData = { type, data ->
println("Sensor: $type - Data: $data")
},
onSensorError = { error ->
println("Sensor error: ${error.message}")
}
)
// Unregister sensors when no longer needed
KSensor.unregisterSensors(sensors)
#kotlin #kmp #android #ios
👍82❤3
Media is too big
VIEW IN TELEGRAM
Аркадий Иванов, автор библиотеки, рассказал историю ее создания и основные принципы и решения, которые выделяют Decompose: максимальная гибкость для соответствия практически любому проекту, отличная масштабируемость на средних и больших проектах, типобезопасность, настолько надежная, что если ваш код компилируется, то, скорее всего, он работает, и, конечно же, тестируемость.
Также из доклада вы узнаете об основных API библиотеки, и поймете, как и почему так просто создавать свои собственные модели навигации. Вы узнаете не только «как», но и «почему».
Независимо от того, работаете ли вы над приложениями для миллионов пользователей или только начинаете с нуля, этот доклад бросит вызов тому, как вы думаете об архитектуре.
#kmp #архитектура #kotlin #mobius
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥39❤10🎉5
This media is not supported in your browser
VIEW IN TELEGRAM
Подключаете зависимости и делается инициализацию
val client = HttpClient(engine) {
// body
install(LensHttpLogger){
level = LogLevel.ALL
}
}
#kotlin #kmp #ktor
Please open Telegram to view this post
VIEW IN TELEGRAM
❤44👍16🔥7
Библиотека для пагинации от Google уже давно обзавелась поддержкой iOS и Desktop, а вот в будущей версии и закроются остальный части, кроме JS и WASM.
#android #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24❤4
Forwarded from Android Broadcast
В версии Jetpack Lifecycle 2.9.2 добавили поддержку WasmJS тартега, а это значит что библиотека теперь может работать на всех KMP таргетах: JVM (Android, Desktop), Native (Linux, iOS, watchOS, macOS, MinGW) и Web (JavaScript, WasmJS)
#android #kmp @wasmjs #jetpackupdate
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥39👍19
Библиотека работает на основе генерации кода через KSP. Может быть полезна для тестов, чтобы проверять разные входные данные.
// Уровень класса @Kombine: Задает значения по умолчанию для свойств
// без аннотаций и без дефолтных значений property
@Kombine(
allPossibleIntParams = [100],
allPossibleStringParams = ["system"],
)
data class ScreenConfig(
// Аннотация на уровне свойства переопределяет уровень класса для 'theme'
@Kombine(allPossibleStringParams = ["light", "dark", "auto"])
val theme: String,
// Есть значение по умолчанию, Kombinator будет использовать ТОЛЬКО "portrait"
val orientation: String = "portrait",
// Нет аннотации @Kombine и значения по умолчанию.
// Будет использовать значение уровня класса: [100]
val padding: Int,
// Аннотация на уровне свойства переопределяет уровень класса для 'fontSize'
@Kombine(allPossibleIntParams = [12, 16, 20])
val fontSize: Int,
// Нет аннотации @Kombine и значения по умолчанию.
// Будет использовать значение уровня класса: ["system"]
val fontFamily: String,
)
#kotlin #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31🏆2
Что нового:
👉 Добавили новые API для задания ограничения потребления памяти, когда приложение в фоне
👉 SvgDecoder может работать со сторонними парсерами SVG
👉 Много минорных улучшений API
👉 Обновлени зависимостей
#kotlin #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍8
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
👍30🔥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 проекте теперь можно шарить код между JS и wasmJs таргетами через общий source set - WEB.
Изменение доступно в Kotlin 2.2.20-Beta2
#kotlin #kmp
Изменение доступно в Kotlin 2.2.20-Beta2
#kotlin #kmp
🔥16❤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
👉 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
🤯 Как 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👍76❤1🙏1
// Пример OrbitMVI
class CalculatorViewModel: ContainerHost<CalculatorState, CalculatorSideEffect>, ViewModel() {
// Include `orbit-viewmodel` for the factory function
override val container = container<CalculatorState, CalculatorSideEffect>(CalculatorState())
fun add(number: Int) = intent {
postSideEffect(CalculatorSideEffect.Toast("Adding $number to ${state.total}!"))
reduce {
state.copy(total = state.total + number)
}
}
}
#kmp #mvi #android #ios #desktop
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17🤔9👍6❤2
Команда Kotlin обновляет дорожную карту каждые полгода, подводя итоги и планируя следующие шаги:
Compose Multiplatform
👉 Перевести Compose Multiplatform for Web в Beta
👉 Выпустить больше Jetpack библиотек для KMP. В первую очередь Navigation 3 и Paging 3
👉 Новый компонент для ввода текста на iOS с целью чтобы сделать его максимально нативным по виду и поведению
👉 Унификация Compose Preview аннотации (сейчас их 3 с разными пакетами)
Kotlin Multiplatform IDE плагин
👉 Поддержка работы плагина на Windows и Linux, но там не будет поддержки работы со Swift и сборки под Apple платформы
👉 Возможность просмотра документации подключенных Swift/Obj-C библиотек
👉 Поддержка Swift 6.2 и Xсode 2026
👉 Улучшение навигации и рефакторинга кросс языков
👉 Улучшение работы Compose Preview в common
Kotlin/Native и Kotlin/iOS
👉 Развитие Swift Export и стабильный релиз в 2026 году
👉 Поддержать Kotlin Coroutines и Flow в Swift Export
👉 Сокращение времени сборки
Kotlin/JS
👉 Автоматическое переключение на Kotlin/JS для Compose for Web, когда WASM таргет не работает
👉 Расширение возможностей JavaScript Export: suspend функции, value классы, typealias и другие
Kotlin/WASM
👉 Релиз Kotlin/WASM Beta
👉 Поддержка многомодульной компиляции для динамической загрузки
Инструменты для сборки
👉 Сделать конфигурацию Gradle сборки удобнее
👉 Упростить публикацию KMP библиотек
👉 Предоставление Build tools API для удобства интеграции с разными билд системами
👉 Ускорение сборки и процесса импорта проекта в Gradle
#kotlin #compose #wasm #ios #native #gradle #idea #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥40👍6❤4
Google анонсировала официальный Gradle-плагин com.android.kotlin.multiplatform.library для настройки Android-таргета в Kotlin Multiplatform (KMP). Это станет стандартом для будущей разработки KMP-библиотек.
➡️ Зачем нужен отдельный плагин?
🛠 Простота конфигурации: Упрощение настройки KMP-проектов под Android в Gradle.
⚖️ Чем отличается от обычного com.android.library?
Новый плагин заточен именно под библиотеки и лишён избыточных функций:
❌ Нет поддержки множественных вариантов сборки (productFlavors)
❌ Нет поддержки C/C++, AIDL, RenderScript
❌ Нет встроенных возможностей View Binding, Data Binding
❌ Тесты и Android-ресурсы отключены по умолчанию
❌ Компиляция Java отключена по умолчанию (но есть опция включения)
// Пример конфигурации в Gradle Kotlin DSL
plugins {
alias(libs.plugins.kotlin.multiplatform) // Kotlin 2.0+
alias(libs.plugins.android.kotlin.multiplatform.library) // AGP 8.10+
}
// Такого DSL больше не будет для Android KMP библиотеки
android {}
kotlin {
androidLibrary {
namespace = "dev.androidbroadcast.kmplib"
compileSdk = 36
minSdk = 24
enableAndroidResources = true // Включение ресурсов
withJava() // Включение Java
// Настройка тестов для хоста (JVM)
withHostTestBuilder { }
// Настройка инструментальных тестов на устройстве
withDeviceTestBuilder {
sourceSetTreeName = "test"
}
compilations.configureEach {
compilerOptions.configure {
jvmTarget.set(JvmTarget.JVM_21)
}
}
}
sourceSets {
androidMain { ... }
androidHostTest { ... }
androidDeviceTest { ... }
}
}
💬 Что думаете о новом плагине? Уже успели попробовать? Делитесь мнением в комментариях!
#android #kmp #kotlin #gradle #news
Please open Telegram to view this post
VIEW IN TELEGRAM
🏆29🎉10👍8🤔3
embedAndSignAppleFrameworkForXcode
-> embedSwiftExportForXcode
./gradlew :<Shared module>:embedSwiftExportForXcode
Флаг
kotlin.experimental.swift-export.enabled
можно удалить из gradle.properties, потому что c версии Kotlin 2.2.20 фича включена по умолчанию#kotlin #xcode #swift #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍6❤1
Forwarded from Compose Broadcast
Подкючайте артефакт
org.jetbrains.androidx.navigation3:navigation3-ui:1.0.0-alpha01
в common код и можете пробоватьЖдем актуализации до свежей альфа версии, а также адаптивные layout и интеграцию с ViewModel
#compose #kmp #naviation #jetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥36👍7🤔4
SqlDelight AndroidX Driver - реаилзация драйвера для SqlDelight, который построен на основе библиотеки androidx.sqlite из Jetpack
#android #kmp #sqlite
Database(
AndroidxSqliteDriver(
driver = BundledSQLiteDriver(),
type = AndroidxSqliteDatabaseType.File("<path to db file>"),
schema = Database.Schema,
)
)
#android #kmp #sqlite
❤12👍6