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
Forwarded from Android Broadcast (Кирилл Розов)
Сборник лучших практик по использованию Gradle, который содержит банальщину вроде "используйте самую свежую стабильную версию" до управления зависимостями, ленивой инициализации и кэширования

#gradle
Вышел Kotlin 1.8.0
👉 Отключение оптимизаций кода при компиляции. Предназначено для лучшего дебага кода
👉 Полностью удален старый бэкенд компилятора
👉 Поддержка аннотации @Builder из Lombok
👉 Поддержка XCode 14.1
👉 Улучшение интеропа с Obj-С и Swift
👉 В KMM заменили схему расположения сырцов в Android, но она отключена по умолчанию
👉 IR бэкенд JS компилятора теперь стабилен
👉 Улучшена скорость работы kotlin-reflect
👉 Kotlin теперь поддерживает только JVM target 1.8. Стандартных библиотек под 1.6 и 1.7 не публиковалось. Теперь только один артефакт - kotlin-stdlib
👉 Обновление документации

🔨 Gradle (подробности)
👉 Поддержка Gradle 7.2 и 7.3.
👉 Миграция опций компилятора на Gradle Lazy Property для соотвествия современным требованиям плагинов
👉 Все подключенные стандартные библиотеки Kotlin теперь по умолчанию будут совпадать с версией подключенного Kotlin плагина
👉 Возможность отключить fallback стратегию в Kotlin компиляторе

Поддерживается в Android Studio Electric Eel (221), Flamingo (222) и IntelliJ IDEA 2021.3, 2022.1, 2022.2
Forwarded from Android Broadcast (Кирилл Розов)
В Android Studio Giraffe (сейчас в Canary) для всех новых проектов будет предлагаться использовать Gradle Kotlin DSL, но Groovy DSL также остается доступен. Google идет к тому чтобы по максимуму использовать Kotlin во всех частях Android проектов. На XML остается только ресурсы и Android Manifest.

Один из важных плюсов Kotlin DSL - результат его компиляции кэшируется в отличие от Groovy DSL. Помимо этого: статическая типизация, автокомплит.

Gradle Version Catalog пока остаётся экспериментальной фичей.

#gradle #kotlin
Kotlin DSL станет использоваться по умолчанию в Gradle 8.2, IDEA 2023.1 и Android Studio Giraffe.

Groovy DSL сейчас быстрее, но Gradle, Google и JetBrains будут работать над ускорением, чтобы большие проекты тоже собирались без проблем.

#gradle
Gradle Cheat Sheet для Android и KMP проектов - это статья с основными примерами использования Gradle и как их реализовать, а также API которые полезно знать

#gradle
В Gradle 8.2 для Kotlin DSL появилась возможность задавать свойства Gradle Property через оператор = вместо использования функций с именами

#gradle
На днях вышел Gradle 8.7 и нтузиаст решил на примере проекта Now In Android оценить влияние версий Gradle на скорость компиляции проекта. По итогу время сборки осталось +- таким же, а вот расход памяти немного увеличился. Подробности читайте тут

#gradle #performance
Костя Цховребов сделал Gradle плагин для анализа структуры KMP проектов и визуализации в виде картинки.

Репозиторий с кодом тут

#gradle @kotlin_broadcast
Touchlab выпустила статью c рекомендациями по ускорению сборки KMP проектов:
🔥 Указывайте точный таск для сборки, а не build, который соберет всё
🔥 Изучайте логи и ищите странности
🔥 Swift Package Manager и XCFrameworks: что выбрать?
🔥 Не делайте сборок для iOS симуляторов на CI

Как по мне, все рекомендации имеют базовый характер и уж совсем для тех кто не имеет опыта с Gradle и разработкой

#сборка #gradle #kmp
Улучшения Gradle в Kotlin 2.0:
👉 Новое Gradle DSL для конфигурации опций компиляции для всех тасков мультиплатформенных проектов
👉 Compose Runtime теперь часть Kotlin репозитория и теперь всегда будет с актуальными версиями. Из-за этого появился отдельный Gradle Compose плагин для Jetpack и Multiplatform Compose
👉 Теперь в атрибутах при публикации будет указываться для какого JVМ варианта сделана библиотека: Android, Standrat JVM или NO JVM
👉 Улучшена работа с зависимостями в Kotlin/Native
👉 Разграничение какие API можно вызывать в разных уровнях DSL
👉 Kotlin/Native компилятор будет загружать только когда он нужен для сборки, а не только если Kotlin/Native используется в проекте
👉 Минимальная поддерживаемая версия Android Gradle Plugin поднята до 7.1.3
👉 Gradle опция kotlin.experimental.tryNext для использования следующей dev версией Kotlin за текущей
👉 Вывод отчета сборки в JSON формате
👉 kapt наследует конфигурацию из родителського Gradle проекта

#gradle #kotlin2
Amper - билд система от JetBrains, которая работал поверх Gradle, теперь обзавелась своим движком для выполнения. Это одна из новинок релиза 0.3. Как попробовать Amper смотрите тут

#amper #gradle
Forwarded from Android Broadcast
Статья про Gradle Convention Plugins(8м) - фича, которая позволяет переиспользовать код между Gradle скриптами, что очень актуально для KTS. Автор описал полный пример настройки и применения

#gradle
Также ждут и улучшения в Gradle для KMP в 2024
👉 Объявление зависимостей проекта на уровне проекта, а не через KMP плагин
👉 Лучше интеграция инструментов Kotlin/Native
👉 Поддержка klib
👉 Предоставление полной поддержки KMP в Declarative Gradle

Также ведут работу над поддержкой Gradle Project Isolation, документацию по API Kotlin Gradle плашина и др. инициативы

#gradle #kmp
🏝🎉 Вышел Kotlin 2.1.0

👉 Новые фичи языка (разберу отдельно в @kotlin_broadcast, но ничего такого)
👉 Улучшения K2 компилятора, что также повлияло и на kapt (который deprecated)
👉 KMP Базовая поддержка Swift Export, стабильный Gradle для опций компилятора и много чего ещё
👉 В Kotlin/Native улучшили поддержку iosArm64
👉 Поддержка новых версий Gradle и Android Gradle Plugin

Ждем багфиксы в 2.1.10 и потом обновляемся. За разборами с большими подробностями идите в @kotlin_broadcast

#kotlin #gradle #k2 #kmp #swift
Please open Telegram to view this post
VIEW IN TELEGRAM
🏝🦢🐘 Вышел KMMBridge 1.1.0!

KMMBridge — это мощный Gradle-плагин для публикации Kotlin Multiplatform Xcode Framework в Swift Package Manager (SPM) и CocoaPods, что позволяет интегрировать мультиплфторменные решения быстрее и прозрачнее

Что нового в версии 1.1.0?
🛠 Сделан серьезный рефакторинг под капотом
🚀 Поддержка Gradle Configuration Cache, ускоряющая сборки.
👉 Модульная структура по фичам, упрощающая поддержку.
🔒 Упрощение публичного API, чтобы избежать случайного использования внутренних частей.
🦢 Указание отдельного репозитория для публикации в SPM, повышая гибкость настройки.

Для перехода на новую версию потребуется выполнить миграцию. Авторы подготовили подробное руководство.

#kmp #spm #cocoapods #gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
📹 Демонстрация настройки публикации Android и KMP библиотеки (36 минут)

В новом видео показываю как настроить публикации для Android и Kotlin Multiplatform библиотеки в Gradle с новым механизмом подписи артефактов для Maven Central в 2024

#AndroidBroadcast #видео #gradle #maven #kmp #android
Please open Telegram to view this post
VIEW IN TELEGRAM
🏝 Вышла первая Beta Kotlin 2.1.20

🎉 KAPT переезжает на K2 и теперь будет работать в этом режиме
🐘 Поддержка Gradle 8.11

#kotlin #kapt #gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
KotlinX Coroutines уже давно обзавелись своим BOM-ом, подключайте

dependencies {
implementation(platform(libs.kotlinx.coroutines.bom))

implementation(libs.kotlinx.coroutines.core)
}


#kotlin #gradle #coroutines
🐘 Планируемые улучшения в Gradle при работе с 🏝 Kotlin

👉 Поддержка Gradle Project Isolation (подробнее об этой функции здесь)
👉 Улучшение отчетов по компиляции Kotlin
👉 Поддержка Declarative Gradle
👉 Улучшение интеграции инструментов Kotlin/Native в Gradle
👉 Выпуск стабильных аргументов компилятора в Gradle DSL для упрощения конфигурации проектов на Kotlin и KMP

#kotlin #gradle
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