@android_broadcast · Post #9343 · 2025/07/18 18:24
🤯Вышел Dagger 2.57 и из полезных изменений там... НИЧЕГО. Просто работают под капотом. Может над поддержкой KSP, может еще над чем Вам нужен Dagger? #dagger#di
#APPLE 🍎Apple 2025 秋季发布会看些啥?—— 自留地 の 前瞻盘点 明天凌晨,一年一度的阿果秋季春晚又要来了。老规矩,结合此前种种爆料和信息,我们一起来盘点一下今年可能的看点 📱iPhone 17 系列 - A19 系列处理器 - 推出全新 Air 系列,主打 5.5mm 超薄机身,配备「药丸」后摄模组,预计搭载 12GB RAM、Apple C1 调制解调器和 6.6 英寸显示屏 - Air 首发或暂无国行,因其大概率仅支持 eSIM,需等 eSIM 政策落地 - Pro 系列将采用半玻璃半铝的设计,其中玻璃区域用于 MagSafe 充电,后背还将采用巨大摄影头模组 - Pro 系列有望搭载 A19 Pro 处理器,以及全 48MP 后置三摄 / 最高 8 倍光学变焦 - Pro 机型将提供橙色、深蓝色、灰色、白色和黑色机型 - 数字版将迎来 6.3 英寸显示屏、A19 处理器以及「小药丸」后摄模组,有望带来 ProMotion 功能 - 将采用均热板等手段,进一步改善 iPhone 散热问题 📸 今年升级的亮点,我觉得除了推出轻薄 SKU 取代了 Plus 系列之外,依然是影像。随着国产 Android 品牌以及三星等竞品的不断发力,光学长焦等手机相机体验越来越好,Apple 这几年感受到了压力。去年使得 Pro 和 Pro Max 在影像功能上做到了对等,今年很高兴看到模组增大的同时,有新的功能和变化 像素提升、光学倍数增加,都是我们喜闻乐见的,拍演唱会等场景可以排上大用场。但是,正如我去年说的那样,我们也应该拥有一个「专业模式」来充分发挥这些硬件的实力。此外,对于日常用的中焦焦段的选择,Apple 应该有自己的思考 🧠 去年以为 Apple Intelligence 会在过去的这一年大展拳脚,但其实 Apple 还是在做底层的框架协议,至于落地一直传闻想要通过合作或者收购其他 LLM 来实现。我能理解 Apple 站到了一个十字路口,下一步选择很重要。但去全球化日益明显的今天,Apple Intelligence 在各国的落地也受到诸多法律和监管方面阻碍 从我个人的角度来看,对 Apple Intelligence 的需求也不是太强烈,日常主要还是以电脑使用为主。因此,今年也不排除会继续选择国行。最后,eSIM 或许是接下来一年每个人都要考虑的问题,如果新机真的大规模砍掉双 nano-SIM 卡,变为单卡 + eSIM 的模式,应该怎么处理自己目前的多卡问题 ⌚️Apple Watch 系列 - Apple Watch Ultra 3 将搭载全新 S11 芯片,并支持 5G 网络连接,保留卫星通信功能,略微增大屏幕尺寸 - Apple Watch Series 11 预计延续 Series 10 的设计语言 - Apple Watch SE 3 也可能获得升级,重点是升级芯片 - 目前尚不清楚是否会引入血压监测功能 🎧AirPods - AirPods Pro 3 有望在下半年发布 - 有望取消背部的传统实体配对按键,同时为充电盒正面引入触控操作区 - 耳机盒将变得更小 - 引入心率监测、体温监测等健康功能 - 实时翻译功能可能无法随硬件首发一同提供 之前通过 AC+ 更换的越南产 AirPods Pro 一代,已经快要罢工了,因此我迫切地等待第三代的发布 👀 今年的传闻大致如上所述,期待 iPad 和 Mac 更新的朋友或需要等更迟一些的发布会了。随着年龄增长,逐渐发现即便如 Apple 这样的品牌,也不能做对、做好每一件事,黄金时期的发展掩盖了很多问题,一旦停滞进入瓶颈期便暴露无遗。不管怎样,我还是很怀念那个爆料没有这么发达、发布会还是实时直播的年代 🔗 附上一些国内外媒体长文前瞻:Bloomberg | 9to5Mac | MacRumors | The Verge | sspai * 以上所有前瞻信息来自网络和爆料人,均在早晚报出现过,不一一列举来源。请以最终发布会结果为准,欢迎大家届时进群 @NewlearnerGroup 和我们一同观看 🍿️ 频道:@NewlearnerChannel
Hashtags
検索: #dagger
@android_broadcast · Post #9343 · 2025/07/18 18:24
🤯Вышел Dagger 2.57 и из полезных изменений там... НИЧЕГО. Просто работают под капотом. Может над поддержкой KSP, может еще над чем Вам нужен Dagger? #dagger#di
@android_broadcast · Post #8888 · 2025/04/02 06:00
Разработчик из Ozon делится опытом, как организовали с помощью фич языка Kotlin хранилище Dagger-компонентов, доступное из любого модуля, управляющее их жизненным циклом и забравшее другую рутину на себя. #android#dagger#di
@android_broadcast · Post #8910 · 2025/04/06 17:51
Как найти неиспользуемые зависимости в Dagger Component (EN,11м) С помощью Dagger SPI автор написал анализатор графа Dagger c целью поиска неиспользуемых зависимостей и описал подход в статье. Также подход можно использовать для визуализации графа зависимостей, считать разные метрики графа и пр. 🐱Исходный код на GitHub 🔗Альтернативная ссылка #dagger#di#opensource
Hashtags
@android_broadcast · Post #8639 · 2025/02/05 16:15
🤯Не нужно делать инжект всех зависимостей в конструктор Встретил код в проекте: class MyViewModel( ... private val sendDataUseCase: SendDataUseCase, ... ): ViewModel() { // Вызывается, когда пользователь в UI нажмёт на "Send" fun onSendClicked(...) { viewModelScope.launch { sendDataUseCase.invoke(...) // либо sendDataUseCase(...) } } } sendDataUseCase не нужен сразу при создании объекта, а нужен только если пользователь нажмёт на кнопку "Send" в UI, что может и не произойти. Так как эта зависимость нужна в конструкторе, то при получении в DI будет сразу происходить создание этой зависимости, что приводит к ненужной нагрузке. Я рекомендую делать отложенное получение зависимостей с помощью механизма Provider или Lazy. Первый будет ходить за зависимостью в граф каждый раз, а второй - при первом обращении и сохранит её. // При использовании Dagger или Hilt class MyViewModel( ... private val sendDataUseCase: javax.inject.Provider<SendDataUseCase>, // или dagger.Lazy ... ): ViewModel() { fun onSendClicked(...) { viewModelScope.launch { sendDataUseCase.get() .invoke(...) } } } Если вы используете Koin на момент написания поста (актуальная версия 4.0), делать отложенный инжект в конструктор возможности нет: // При использовании Koin class MyViewModel(): ViewModel() { // отложенное получение зависимости в Koin private val sendDataUseCase: SendDataUseCase by inject() fun onSendClicked(...) { viewModelScope.launch { // аналог Provider - получение зависимости каждый раз из графа val sendDataUseCase: SendDataUseCase = getKoin().get() sendDataUseCase.invoke(...) } } } Результат оптимизации ✅ более быстрый старт экранов (зависит от сложности графов) ✅ уменьшение расхода памяти ❌ KOIN потеря явной зависимости в конструкторе. Мне бы очень хотелось увидеть аналог Provider и Lazy в Koin через конструктор, но пока приходится делать свои обертки 😔 #dagger#di#лучшиепрактики
Hashtags
@android_broadcast · Post #9806 · 2026/01/18 12:22
🤯Dagger Hilt блокирует переход на AGP 9.0 UPD. 21 января вышел Dagger 2.59 с поддержкой AGP Android Gradle Plugin 9.0 официально зафиксировал новый стабильный конфигурационный API (вышла стабильная версия с релизом AS Otter FD 3) — это одно из самых значимых изменений в инфраструктуре Android и Kotlin Multiplatform за последние годы. Цели понятны и правильные лучше работа с кэшем и общая скорость сборок. Подробнее про все изменения я писал в отдельном посте Google несколько релизов подряд аккуратно готовил экосистему к этому переходу, заранее добавив новый API и дав время авторам плагинов адаптироваться. Но на практике всё упирается в плагины. Я столкнулся с тем, что Gradle-плагин Dagger Hilt до сих пор использует старую модель конфигурации и несовместим с новым DSL из AGP 9.0. В результате проект нельзя перевести на новую версию без отключения Hilt или включения режим совместимости. Иронично, что именно официальный инструмент от Google сейчас становится блокером для обновления. Да, в AGP оставили compatibility-флаги, позволяющие продолжать сборку по старым правилам. Это спасает проекты от немедленного падения, но полностью отключает все ключевые преимущества AGP 9.0 — configuration cache, ускоренную конфигурацию и новую модель плагинов. 💬 Вы уже пробовали миграцию на AGP 9.0? Что блокирует? Делитесь в комментариях мнением. UPD. По заявлениям подписчиков также есть проблемы в работе KAPT и KSP #Android#AndroidDev#Gradle#Dagger#Hilt
@android_broadcast · Post #9550 · 2025/10/08 11:50
🤖 Если вы искали альтернативу Dagger/Hilt, но с поддержкой Kotlin Multiplatform, то как раз вышла свежая версия Koin Annotations, которая значительно упрощает миграцию! #dagger#hilt#koin
@android_broadcast · Post #8901 · 2025/04/05 10:43
🤖Альтернативный способ обработке one-off событий из ViewModel (EN, 10м) В статье рассказывается в чем сложность с обработкой одноразовых событий, которые надо передать из ViewModel в UI. Автор рассматривает способ через callback интерфейс в конструкторе ViewModel @HiltViewModel class MyViewModel @Inject constructor( // inject the interface private val toastMessages: ToastMessages, ) : ViewModel() { fun doSomething() { viewModelScope.launch { try { // execute async operation here } catch (e: CustomException) { // initiate a one-off event toastMessages.showToast(e.localizedMessage) } } } } 🔗 Альтернативная ссылка на статью #android#viewmodel#dagger#hilt
Hashtags
@android_broadcast · Post #9569 · 2025/10/17 07:58
‼️Не тяните зависимости из графа сразу! Одна из частых ошибок при использовании 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
@android_broadcast · Post #9738 · 2025/12/09 12:05
🚀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