Android Broadcast
14.2K subscribers
3.49K photos
332 videos
11 files
5.85K links
Подборка новостей и статей для Android разработчиков.

Связь с автором @android_broadcast_bot
Реклама @android_broadcast_bot

РКН https://abdev.by/rkn_tg_ab
Download Telegram
#DI #KSP

Автор Koin начал работы над экспериментальным проектом - компилятором на основе KSP, который позволит аноттировать классы, чтобы автоматом генерировать для них добавление в модулях.
#Dagger #KSP

Вышел Dagger 2.38 с отдельным репозиторием артефактов на основе процессора KSP. Для замены нужно просто чтобы все зависимости подключались из maven.google.com
#KSP

So, how do I write a Kotlin Symbol Processor (KSP)?

Не так давно Google представила своё собственное решение Kotlin Symbol Processing, которая призвана стать заменой KAPT и ускорить процессинг аннотаций на 30-50%. Автор статьи делится своим опытом написания процессора на новой технологии.
#kapt #ksp

Accelerated Kotlin build times with Kotlin Symbol Processing 1.0

Kotlin Symbol Processing - замена KAPT, которая быстрее и поддерживает не только JVM, но и Kotlin/JS и Kotlin/Native. Moshi и Room уже поддерживают KSP, очень жду когда Dagger подтянется
#kapt #ksp

Kotlin Symbol Processors (KSP)

KSP уже вышел в stable и вот JetBrains решила рассказать своё мнение. Говорят что он лучше, понимает синтаксис Kotlin и не нужно выполнять лишние шаги по сравнению с KAPT.

Главная новость - KAPT больше не будет развиваться и переходит в режим поддержки. Новые фичи будут только в KSP и других плагинах Kotlin компилятора. Про поддержку в IDE пока ничего не говорят.
#room #ksp

Room & Kotlin Symbol Processing

В Room 2.4 появилась возможность генерировать код с помощью KSP, что позволило до 2 раз увеличить скорость компиляции, особенно при чистой сборке проекта.

В статье рассказывается история интеграции KSP в Room: а также с какими вызовами столкнулись разработчики. Авторы разработали библиотеку X Processing - абстракцию над KSP и Java AP
#ksp #dagger

Слежу за поддержкой Assisted Inejct в Hilt для Dagger и в треде проскачила классная инфа - команда Dagger сейчас сосредоточена на поддержке KSP и все остальное в низком приоритете! Ждем ускорения Dagger и меньше Java кода в Android проектах.
🔥40👍7💩1
Forwarded from Kotlin Multiplatform Broadcast (Кирилл Розов)
Довольно хороший разбор Kotlin Symbol Processing (KSP) на русском:
👉 ограничения
👉 принципы работы
👉 запуск
👉 как происходит генерация кода
👉 инкрементальная генерация
👉 несколько раундов
👉 пример реализации собственного генератора кода

#ksp
👍23👎7🤔2
В официальной Android документации появилась страница "Migrate from kapt to KSP", которая содержит рекомендации по переходу на более эффективный способ генерации кода, Уже поддержкой обзавелись Glide, Room и Moshi. Dagger в процессе, а процерить статус других библиотек можно тут

#ksp
🔥29👎9🤔3
Forwarded from Kotlin Multiplatform Broadcast (Кирилл Розов)
Статья с тестами Dagger c KSP. Стало лучше, но не значительно. Интересно еще увидеть картину по расходы оперативной памяти во время сборки

#ksp
👍23👎10
Сравнение (4 мин, EN, ссылка без VPN) KAPT и KSP для Android разработки.

Важно! Оценивать скорость KSP нужно с библиотеками, которые уже заявили о полной поддержке и закончили реализацию (Dagger еще в работе)

#kapt #ksp
👍19👎10
Показали первую превью KSP2 . Основные фичи:
👉 Использует K2 компилятор (нужно включать K2 компилятор в Kotlin)
👉 Новый отдельный генератор кода, который дает больше свободы и фичей по сравнению с текущим плагином Kotlin компилятора

Чтобы попробовать вам надо использовать KSP 1.0.14 или выше. Затем в gradle.properties добавить
ksp.useKSP2=true


В новой версии есть изменения в поведении API

#ksp #k2 #kotlin
👍29🤯8
Forwarded from Compose Broadcast (Кирилл Розов)
PrevGen - KSP плагин компилятора для генерации стабовых данных для Compose Preview на основе data классов

#ksp @compose_broadcast
👍26🔥7
Вышло обновление Koin Annotations 1.4
👉 Поддержка сканирования модулей сквозь Gradle модули. Раньше каждый работал отдельно
👉 Поддержка ViewModel в Compose с помощью аннотации @KoinViewModel
👉 Поддержка expect зависимостей из общего кода
👉 Объявление значений Koin Property через top level property в коде
👉 Улучшения проверки графа в момент компиляции кода
👉 Поддержка Kotlin WASM
👉 Поддержка модулей в object
👉 Поддержка Koin Type Qualifier

Пример с использованием свежей версии можно найти тут

Могу добавить что вот такое решение и сразу надо было нужно делать для DI на KMP, а не так много динамики давать. Объявление зависимостей в рантайме нужно не так много кому, зато можно повысить надежность работы с кодом.

Видео на тему косяков Koin я тоже уже готовлю 😁

#koin #di #ksp
👍29👎12😡1
Выпустили Anvil-KSP - форк Anvil, но работающий на основе KSP. Автор решения подробнее рассказывает о нем в статье(EN, 4м)

#ksp #di #dagger #sqaure
👎17👍9🤔72
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
👍20
Вышел KSP 2.0, который теперь работает на KSP2 по умолчанию. Теперь работает на K2 и отдельный генератор исходников с большей гибкостью

#kotlin #ksp
👍27
🚀 Hilt переезжает на Kotlin 2 и будет работать над поддержку KSP2

#android #jetpack #kotlin #k2 #ksp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31👍181
🏝 Проблемы с порядком Gradle Task при использовании KSP 2.0.2

Продолжаю разработку проекта FrameIO - Kotlin Multiplatform клиента для сервиса frame.io и стоклнулся с падением сборки из-за порядка задач (ниже стек с примером проблемы):

Some problems were found with the configuration of task ':module:kspDebugKotlinAndroid' (type 'KspAATask').
- Gradle detected a problem with the following location: './module'.

Reason: Task ':module:kspDebugKotlinAndroid' uses this output of task ':module:javaPreCompileDebug' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed.

Possible solutions:
1. Declare task ':module:javaPreCompileDebug' as an input of ':module:kspDebugKotlinAndroid'.
2. Declare an explicit dependency on ':module:javaPreCompileDebug' from ':module:kspDebugKotlinAndroid' using Task#dependsOn.
3. Declare an explicit dependency on ':core:user-session:javaPreCompileDebug' from ':module:kspDebugKotlinAndroid' using Task#mustRunAfter.

For more information, please refer to https://docs.gradle.org/8.14.2/userguide/validation_problems.html#implicit_dependency in the Gradle documentation.


Стек для сборки: Gradle 8.14.2, Kotlin 2.2.0, KSP 2.2.0-2.0.2, AGP 8.11.0

Решения проблемы пока нету в KSP (одно из issue), поэтому я задаю порядок Gradle Task сам:

// build.gradle.kts модуля где подключен ksp
afterEvaluate {
android.libraryVariants.forEach { variant ->
val variantCapitalized = variant.name.capitalized()
tasks.named("ksp${variantCapitalized}KotlinAndroid") {
dependsOn(
"${variant.name}AssetsCopyForAGP",
"process${variantCapitalized}Manifest",
"write${variantCapitalized}AarMetadata",
"javaPreCompile${variantCapitalized}",
"merge${variantCapitalized}Assets",
"merge${variantCapitalized}JniLibFolders",
"merge${variantCapitalized}NativeLibs",
"copy${variantCapitalized}JniLibsProjectOnly",
"generate${variantCapitalized}EmptyResourceFiles",
"copy${variantCapitalized}JniLibsProjectAndLocalJars",
"prepare${variantCapitalized}ArtProfile",
"write${variantCapitalized}LintModelMetadata",
"extractProguardFiles",
"prepareLintJarForPublish",
)
}
}
}


#android #kmp #koltin #ksp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍97🤯6