TGINSIGHT CHAT
Android Broadcast
@android_broadcast
TechnologiesПодборка новостей и статей для Android разработчиков. Реклама и связь с автором @ab_manager РКН https://abdev.by/rkn_tg_ab#MQRZR
Posts récents
Tag : #di · 13 posts
Publié 28 avr.
🏝Вышла первая стабильная версия Metro DI — чистого Kotlin-решения с валидацией графа на этапе компиляции. Решение вобрало в себя всё самое лучшее от Dagger, Anvil и kotlin-inject, чтобы стать тем стандартом для KMP-проектов, который искали после Dagger. Metro DI не использует KSP или KAPT. Вся генерация осуществляется с помощью плагина компилятора Kotlin. #Kotlin#KMP#DI
Publié 9 déc.
🚀Cash App перевел Android-приложение на Metro — новый DI фреймворк для Kotlin Команда Cash App (Block) успешно мигрировала своё Android-приложение с Anvil/Dagger на Metro — современный фреймворк для dependency injection, разработанный Zac Sweers. Metro — это compile-time DI фреймворк, вдохновленный Dagger и Anvil, но реализованный как Kotlin compiler plugin. Он Kotlin-first, поддерживает K2 и работает значительно быстрее традиционных решений. Вобрал в себя всё лучшее от Dagger, Anvil и Kotlin-Inject Почему перешли на Metro? - Скорость сборки — ускорение инкрементальных сборок на ~60% - Поддержка Kotlin K2 — возможность использовать новейший компилятор Kotlin - Упрощение стека — отказ от kapt и Java-ориентированных инструментов - Современный подход — Kotlin-first дизайн и улучшенный DX - Более строгая валидация DI-графа - Улучшена безопасность типов (нуллабельность) - Поддержка KMP 📊 Результаты по скорости сборки: - Инкрементальные сборки → ускорение на 58-60% - Чистые сборки → ускорение на 17% - ABI-изменения → сборка за 11.9s вместо 28.8s Миграция 1500 модулей проводилась постепенно с двойной поддержкой двух DI фреймворков для безопасного перехода. В зависимости от настройки Gradle менялся DI и генерация кода. Впервые вижу подход, когда был описан граф для 2 разных DI с целью постепенной миграции. Миграцию с Koin на Metro так не сделать, но вот с Koin Annotations на Metro вполне может получится. #DI#KMP#Dagger#Metro#Android#AndroidDev#Anvil
Publié 17 oct.
‼️Не тяните зависимости из графа сразу! Одна из частых ошибок при использовании DI — получать все зависимости из графа сразу (например, в конструкторе класса). Так делать не стоит 😬 Получение зависимости из графа — это каскадный процесс, и он должен выполняться только в момент использования. Поэтому я всегда рекомендую инжектить зависимости для Dagger/Hilt через Lazy (не путайте с kotlin.Lazy) или Provider. class ViewModel @Inject constructor( // Зависимость получается из графа сразу при создании private val useCase: DataUseCase, // Получаем зависимость из графа каждый раз при обращении Provider.get() private val useCaseFactory: Provider<DataUseCase>, // Получаем зависимость из графа при первом обращении // и затем она кэшируется в Lazy объекте private val useCaseLazy: Lazy<DataUseCase>, ) 💡 Чтобы перейти на Lazy без боли в существующем коде — можно использовать делегаты свойств в Kotlin: // Вариант использования без Lazy class ViewModel @Inject constructor( private val useCase: DataUseCase ) // Миграция на Lazy без потери API совместимости class ViewModel @Inject constructor( useCaseFactory: Lazy<DataUseCase>, ) { private val useCase: DataUseCase by useCaseFactory } И небольшой хелпер, чтобы это работало красиво 👇 // Функция расширения для использования property делегата operator fun <T> Lazy<T>.getValue(thisRef: T, property: KProperty<*>): T = get() Таким образом, вы снижаете нагрузку на DI граф, откладываете инициализацию и избегаете ненужных каскадов при старте компонентов. #di#dagger#hilt#лучшиепрактики
Hashtags
Publié 21 juil.
🤯Команда Anvil решила прекратить развитие проекта в пользу другого решения Anvil - Kotlin плагина для расширения возможностей Dagger 2 и упрощения работы с ним решили прекратить развивать. Коллега автором решения сделал Metro и компания будет переходить на него и участвовать в его развитии. Metro - это compile-time DI фреймворк с поддержкой KMP, который вдохновлялся Dagger, Anvil, Kotlin-Inject. #di#kmp
Publié 18 juil.
🤯Вышел Dagger 2.57 и из полезных изменений там... НИЧЕГО. Просто работают под капотом. Может над поддержкой KSP, может еще над чем Вам нужен Dagger? #dagger#di
Publié 7 avr.
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
Publié 6 avr.
Как найти неиспользуемые зависимости в Dagger Component (EN,11м) С помощью Dagger SPI автор написал анализатор графа Dagger c целью поиска неиспользуемых зависимостей и описал подход в статье. Также подход можно использовать для визуализации графа зависимостей, считать разные метрики графа и пр. 🐱Исходный код на GitHub 🔗Альтернативная ссылка #dagger#di#opensource
Hashtags
Publié 2 avr.
Разработчик из Ozon делится опытом, как организовали с помощью фич языка Kotlin хранилище Dagger-компонентов, доступное из любого модуля, управляющее их жизненным циклом и забравшее другую рутину на себя. #android#dagger#di
Publié 20 mars
Вышел Dagger 2.56 В новой версии Dagger нет новых фичей, а вот то что может сломать код есть 👉 В рамках поддержки Jakarta: удалили старый способ создания Factory (возможно, отвалится код под старые версии Dagger) и больше нельзя использоваться dagger.internal.Provider 👉 В Kotlin исходниках при использовании для multibinding теперь НАДО использовать Set/MAP из kotlin.collections, а не версии из java.util 🛠 Исправили немного багов #di#java
Publié 13 mars
📺Обзор Kotlin Inject или как будет выглядеть Dagger на Kotlin Multiplatform Обзор библиотеки Kotlin Inject - DI для KMP, API которого аналогично Dagger. В видео происходит демонстрация возможностей, сравнение с другими DI и личное мнение о том стоит ли использовать эту библиотеку в проде. #видео#kmp#di
Publié 13 mars
Сравнение Dagger 2, Dagger Hilt и Koin (4м) Быстрый рассказ про популярные DI для Android. Полезно тем, кто выбирает свой первый DI или сомневается в выборе #android#di
Publié 6 mars
💉Koin Annotations 2.0 Stable Koin Annotations — надстройка над Koin для описания зависимостей с помощью аннотаций и последующей генерации части графа для них. Что нового в движке: 👉 Совместимость с KSP2 👉 Улучшена работа компилятора DI кода 👉 Улучшена генерация кода 👉 Полноценная поддержка KMP проектов 👉 Шаринг описаний зависимостей между модулями проектов 👉 Работает с Koin 4.0, Kotlin 2.0.21 и KSP 2.0.21-1.0.28 Новые фичи для разработчиков: 👉 Создание собственных аннотаций квалификаторов 👉 Автоматические биндинги 👉 ComponentScan работает сквозь Gradle модули 👉 Аннотации над ViewModel (работает с Jetpack и KMP) @KoinViewModel class MyViewModel(deps: Deps): ViewModel() Ссылка без VPN #kotlin#kmp#di#koin