Kotlin Multiplatform Broadcast
9.47K subscribers
821 photos
48 videos
1.09K links
Новости и фичи Kotlin, а также Kotlin Multiplatform

YouTubе канал: https://youtube.com/androidBroadcast
Compose Multiplatform @compose_broadcast
iOS разработка @ios_broadcast
Новости Android @android_broadcast
Реклама и прочее @android_broadcast_bot
Download Telegram
Совсем недавно наткнулся на полную официальную доку по API Gradle плагина Kotlin Multiplatform

#kotlin #kmp #документация
Please open Telegram to view this post
VIEW IN TELEGRAM
Новое DSL на замену Gradle Application плагина

В Kotlin 2.1.20 появилось новое экспериментальное DSL для замены функций Gradle Application плагин (несовместим с KMP Gradle плагин, начиная с Gradle 8.7)

kotlin {
jvm {
@OptIn(ExperimentalKotlinGradlePluginApi::class)
binaries {
// Configures a JavaExec task named "runJvm"
// and a Gradle distribution for the "main" compilation in this target
executable {
mainClass.set("foo.MainKt")
}

// Configures a JavaExec task named "runJvmAnother"
// and a Gradle distribution for the "main" compilation
executable(KotlinCompilation.MAIN_COMPILATION_NAME, "another") {
// Set a different class
mainClass.set("foo.MainAnotherKt")
}

// Configures a JavaExec task named "runJvmTest"
// and a Gradle distribution for the "test" compilation
executable(KotlinCompilation.TEST_COMPILATION_NAME) {
mainClass.set("foo.MainTestKt")
}

// Configures a JavaExec task named "runJvmTestAnother"
// and a Gradle distribution for the "test" compilation
executable(KotlinCompilation.TEST_COMPILATION_NAME, "another") {
mainClass.set("foo.MainAnotherTestKt")
}
}
}
}


#kotlin #gradle #kmp
Пример работы нового Common Atomic API из Kotlin 2.1.20

@OptIn(ExperimentalAtomicApi::class)
suspend fun main() {
// Initializes the atomic counter for processed items
var processedItems = AtomicInt(0)
val totalItems = 100
val items = List(totalItems) { "item$it" }
// Splits the items into chunks for processing by multiple coroutines
val chunkSize = 20
val itemChunks = items.chunked(chunkSize)
coroutineScope {
for (chunk in itemChunks) {
launch {
for (item in chunk) {
println("Processing $item in thread ${Thread.currentThread()}")
processedItems += 1 // Increment counter atomically
}
}
}
}


#kotlin
🏝 Вышла KSP для Kotlin 2.1.20. Обновляйте версию до 2.1.20-1.0.31

#kotlin #ksp
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🏝 Как в Kotlin Multiplatform открыть ссылку в системном браузере

// Kotlin Common Code
expect fun openInBrowser(
url: String,
completionHandler: (Boolean) -> Unit = {}
)

// Kotlin iOS Common
actual fun openInBrowser(
url: String,
completionHandler: (Boolean) -> Unit
) {
NSURL.URLWithString(url)?.let {
UIApplication.sharedApplication.openURL(
url = it,
options = emptyMap<Any?, Any>(),
completionHandler = completionHandler
)
}
}

actual fun openInBrowser(
url: String,
completionHandler: (Boolean) -> Unit
) {
val result = try {
context.startActivity(
Intent(Intent.ACTION_VIEW, Uri.parse(url))
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
true
} catch (_: ActivityNotFoundException) {
false
}
completionHandler(result)
}

// Kotlin JVM Desktop Common
actual fun openInBrowser(
url: String,
completionHandler: (Boolean) -> Unit
) {
with(Desktop.getDesktop()) {
val result = if (isSupported(Desktop.Action.BROWSE)) {
try {
browse(URI.create(url))
true
} catch (e: IOException) {
false
} catch (e: SecurityException) {
false
}
} else false
completionHandler(result)
}
}


Источник тут

#kmp #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
Вышла KotlinX Serialization 1.8.1 с исправлениями багов и минорными улучшениями. Также обновили Kotlin до 2.1.20

#kotlin
💉 Вышел Koin 4.0.4 с исправлениями багов и пометили Deprecated методы, нерекомендуемые для использования

#kotlin #di #koin
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
📹 Using Platform-Specific APIs in KMP Apps (12м)

Хотите узнать, как использовать платформозависимые API в своих приложениях Kotlin Multiplatform (KMP) или запутались в связанных с этим лучших практиках?

В этом видео мы расскажует об использования механизма expect/actual для создания отличных приложений на KMP.

#kmp #kotlin #jetbrains
Please open Telegram to view this post
VIEW IN TELEGRAM
‼️🏝 KMP Разработчики не обновляйте XCode до 16.3

В Kotlin 2.1.20 несовместим со свежей версий XCode, поддержка будет в Kotlin 2.1.21. Отложите обновление!

#kotlin #kmp #xcode
Please open Telegram to view this post
VIEW IN TELEGRAM
Разработчики, работающие с Kotlin и WebAssembly, обратите внимание! В Kotlin 2.1.20 добавили поддержкой DWARF - технологии, которая позволяет выполнять отладку кода пошагово в WASM-виртуальной машине и инспектировать значения переменных.

#kotlin #wasm
🏝 Ускорение работы Kotlin/Native 🚀

В Kotlin 2.1.20 добавили экспериментальную новый проход inline оптимизации, который по тестам JetBrains ускоряет работу кода в runtime на 9.5%

Чтобы попробовать надо передать компилятору опцию
-Xbinary=preCodegenInlineThreshold=40


#kotlin #native #производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Metro - Новый DI фреймворк на чистом Kotlin (ещё в разработке)

@DependencyGraph
interface AppGraph {
val httpClient: HttpClient

@Provides
private fun provideFileSystem(): FileSystem = FileSystem.SYSTEM
}

@Inject
class HttpClient(private val fileSystem: FileSystem)

@Inject
@Composable
fun App(circuit: Circuit)


#kotlin #di #ksp
Вышла KotlinX Coroutines 1.10.2 с исправлением багов

#kotlin #coroutines
Please open Telegram to view this post
VIEW IN TELEGRAM
Вышел KSP 2.0, который теперь работает на KSP2 по умолчанию. Теперь работает на K2 и отдельный генератор исходников с большей гибкостью

#kotlin #ksp
Forwarded from Android Broadcast
🚀 Вышла новая версия Jetpack Room 2.7.0 с поддержкой KMP.

🔥 Главное нововведение этой версии Room — рефакторинг библиотеки для поддержки нескольких платформ через KMP: Android, iOS, JVM (Desktop), native Mac и native Linux. Документацию о том, как начать, можно найти здесь. В рамках поддержки KMP было выделено SQLiteDriver.

🏝 При использовании KSP теперь будет генерироваться код на Kotlin, а для KAPT или проектов с Java — на Java.

🏝 Поддерживается Kotlin 2.0 и выше, также рекомендуется использовать KSP2.

#android #kmp #jetpack #ios #desktop #mac #linux
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
🤖 Demeter — инструмент для анализа производительности Android приложений

🔧 В опенсорс выложили инструмент для сбора метрик работы Android приложений - Demeter. Решение было разработано в рамках задач по улучшению скорости запуска и работы приложений. Команде не хватало информации, которую собирают готовые решения, поэтому ребята сделали свой инструмент.

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

Инструмент имеет плагинную архитектуру и открытый исходный код, что позволяет вам сделать собственные расширения. Из коробки доступны плагины:
• Замер времени выполнения методов и добавление большей информации для профайлера
• Подсчет количества рекомпозиций в Composable функциях
• Время инициализации зависимостей из Dagger графа
(предлагайте в комментариях, какие замеры было бы полезно сделать в ваших приложениях, а я буду делиться своими)

Demeter может работать через плагин Kotlin компилятора (только с исходным кодом в вашем проекте) и/или через модификацию байткода, где уже можно следить за кодом в подключённых библиотеках без исходного кода. Подробнее можно ознакомиться в статье.

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

❗️ ВАЖНО! Demeter можно интегрировать в продакшен билд, но НЕ НАДО этого делать. Весь замер должен производиться на тестовых сборках с включением опций профилирования через AndroidManifest.

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

#android #производительность #opensource
Please open Telegram to view this post
VIEW IN TELEGRAM