Mobile Developer
8.97K subscribers
1.61K photos
159 videos
5 files
2.26K links
Download Telegram
💉 Koin для KMP: минимальный сетап без боли
https://itnext.io/dependency-injection-with-koin-the-minimal-setup-kmp-d696ae2db09f

Автор показывает DI с Koin в Compose Multiplatform - только база, без воды.

Два слова, которые нужно знать:
factory - новый инстанс каждый раз
single - один на всё приложение

Правило: используй factory по умолчанию. Синглтоны живут в памяти пока жив Koin - злоупотребишь, заплатишь.

val koinConfiguration = KoinConfiguration {
modules(module {
factory { Engine(fuel = get()) }
single { Software(engine = get()) }
})
}

@Composable
fun App() = KoinApplication(configuration = koinConfiguration) {
val software = koinInject<Software>()
}


Для KMP - одна зависимость. Никаких platform-specific настроек.
——————

💭 Если коллега спрашивает «как начать с Koin» - просто скинь это.
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍8🔥3
ИИ ломает высшее образование? Где учиться на программиста / ЧТУК

Youtube
Youtube
Youtube


Образование столкнулось с новыми вызовами. Как меняются процессы в университетах, что станет с нежелающими адаптироваться и какие результаты видны сейчас. Обсудили это с Павлом Клепининым, проректором по цифровизации в РАНХиГС

Приятного просмотра!
9🤷‍♂6🤣1🎅1
Маленькая инди компания 🐴
😁84👍5
🚀 Kotlin 2.3.10
https://github.com/JetBrains/kotlin/releases/tag/v2.3.10

Вышел Kotlin 2.3.10 - патч-релиз с критическими исправлениями компилятора, включая data race в kotlinx.serialization, проблемы с type casting, и улучшения совместимости с Compose compiler.

☝️ Критические исправления:

📺 kotlinx.serialization
Исправлена data race при регистрации расширений protobuf-плагина - ранее вызывала непредсказуемые ошибки чтения метаданных в многопоточных сборках;

📺 Компилятор K2
Убран ClassCastException при приведении kotlin.UInt к java.lang.Number в compile-time константах
Стабилизировано разрешение EnhancedNullability (проблемы с null-safety в неиспользуемом коде)
Регресс в аннотации @NoInfer начиная с 2.2.20
NoWhenBranchMatchedException в when-выражениях с non-sealed классами

sealed class Sealed
abstract class SubAbstract: Sealed()
class BranchB: SubAbstract()
fun takeSealed(): Sealed = BranchB()
fun foo() {
val isExhaustive = when (val x = takeSealed()) {
!is BranchB -> {
}
}
}
📺 Compose & Build
Ошибка "Unsupported class file version 69" (Java 21) при генерации Compose mappings
Добавлена генерация stack trace mappings для Compose compiler
Возвращена поддержка androidTarget для AGP < 9
Обновлены NPM-зависимости для JS/Wasm таргетов
​———————

💭 Рекомендуется обновиться тем, у кого проекты с kotlinx.serialization (особенно protobuf), Compose compiler, или при столкновении с описанными ошибками.

Более полно - в описании патч-релиза
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉8
Claude in Mobile MCP 2.10.0 Released
https://github.com/AlexGladkov/claude-in-mobile/releases/tag/v2.11.0

👉 Добавил новый tool для работы с пермишнами (дать пермишн, отозвать пермишн и тд). Работает на Android и iOS
👉 Добавил annotate screenshots. Теперь скриншоты приходят заранее размеченные, что экономит примерно 500-1000 токенов на каждый вызов
👉 Добавил юнит тесты. Пора уже, а то контрибуторов становится сильно больше и нужно хотя бы не ломать старое

P.S. Сразу же зарелизил версию 2.11.0

👉 Добавил batch комманд (сразу засылать пачкой 3-4-5 команд для экономии токенов)
👉 Добавил параллельность исполнения для Android
👉 Добавил assertions (проверки что элемент виден, что на него можно кликнуть и тд)
👉 Поправил несколько багов на iOS
👉 Добавил tool get_webview, который позволяет работать с элементами webview в приложениях
👉 Сделал ошибки от ADB/systemctl и тд более человекочитаемыми, а не просто generic ADBNotFound
🔥7
Guardian CLI 0.1.2 Released
https://github.com/AlexGladkov/guardian-cli

Небольшая предыстория. Пока я работал руководителем множества команд я постоянно ловил одну и ту же проблему. Когда над проектом работает много людей есть проблема договоренностей. Сколько бы люди ни договаривались, ни вносили это в конфлюенс какой-нибудь, все равно все договоренности нарушаются и причин на это несколько

👉 Люди забывают договоренности
👉 Люди считают что "1 раз не копипаст"
👉 Людям не нравятся договоренности
👉 Люди не знали про наличие договоренностей (проблема новичка)
👉 Причины договоренностей могут исчезать и они могут устаревать

Поэтому, я создал инструмент, который призван решить эту проблему и назвал его Guardian

Что это такое? Это CLI tools, который работает поверх git и соединяется с любой LLM (даже локальной) и все хранится в гите.

Флоу очень простой
1. Есть служебная папка .agreements и в ней хранится конституция проекта. В конституции прописано кто принимает решения, каким способом принимаются решения (кворум, большинство, 2/3 или единогласно), есть ли файлы исключения и так далее
2. Дальше можно либо через guardian check, либо на CI встроить проверку нарушены ли были договоренности и какие именно. Также договоренности можно отозвать, изменить или какие-то новые продвинуть

Почему это важно (особенно сегодня)?
👉 Уходит элемент человеческих сложных взаимоотношений и есть некие непредвзятый судья, который просто проверяет факты и здесь уже нет личного отношения и просто соблюдаются файлы
👉 Весь процесс изменений очень понятен и работает последовательно и все понимают, что происходит и почему
👉 Можно поднять историю голосований и понять как вы пришли к такому решению и почему есть какое-то правило
👉 Проверка идет недетерминировано, то есть regexp может не поймать, а LLM точно поймает
👉 В условиях когда код уже практически не пишется - это очень хорошо позволяет поймать потенциально места, где код пошел куда-то не туда

+ Есть возможность сгенерировать понятный onboarding, чтобы не объяснять почему мы не деплоимся по средам
+ Можно задавать правила, которые нельзя уложить в regexp (типа того же не деплоимся по средам)
+ Можно получить понятное объяснение почему так и сразу же сделать новый proposal

Все подробности ридми. Очень буду рад вашим Issues

P.S. Вот живой пример работы - https://github.com/AlexGladkov/JetHabit/pull/39
Тут было правило на запрет магических цифр

P.P.S. Кстати, это можно прям встроить в SKILL для вашего агента и он са проверит и если что поправит под договоренности принятые на вашем проекте
🔥92
🛠 Claude Skill для миграции XML → Compose
https://proandroiddev.com/building-a-claude-skill-xml-to-jetpack-compose-converter-bc4b68268499

Автор устал от inconsistent конверсий Claude: Material 2 вместо 3, неправильный порядок модификаторов, пропущенные атрибуты. Решил научить Claude делать правильно.

✍️ Что такое Claude Skills?
Инструкции, которые Claude загружает для domain-specific задач. Документируешь паттерны один раз
- Claude следует им всегда.


Структура:
xml-to-compose/
├── SKILL.md # Ядро правил
├── references/ # Маппинги (подгружаются по требованию)
└── assets/examples/

Внутри скилла:
→ Маппинги 20+ виджетов (TextView → Text, RecyclerView → LazyColumn)
→ Правила конверсии атрибутов (margin → Spacer, visibility → if)
→ Порядок модификаторов - где Claude чаще всего лажает
——————

💭 Полезно, если мигрируешь легаси и хочешь меньше поправлять за AI. Или скинь тому, кто постоянно жалуется на качество AI-конверсий.
Please open Telegram to view this post
VIEW IN TELEGRAM
17🔥7🐳2
🚀 Android Studio Panda 1 (2025.3.1) stable
https://developer.android.com/studio/releases

Вышла стабильная версия Android Studio Panda 1 (2025.3.1) с упрощённым управлением JDK через Gradle Daemon JVM Criteria и новыми экспериментальными AI-функциями в Studio Labs.

👉 Упрощённое управление JDK с помощью Gradle Daemon JVM Criteria
Gradle теперь автоматически определяет совместимый JDK для вашего проекта или загружает необходимую версию, если она не найдена локально. Функция стабилизирована в Gradle 9.2.0 и включена по умолчанию для новых проектов.

Как включить для существующих проектов:
Настройки доступны в Settings > Build, Execution, Deployment > Build Tools > Gradle

👉 Studio Labs - экспериментальные AI-функции
Доступны новые AI-возможности в стабильной версии Android Studio:

Создание Compose Preview - Gemini автоматически генерирует предварительные просмотры Compose, включая фиктивные данные для параметров, для конкретного или всех компонентов в файле.

Трансформация UI - обновление пользовательского интерфейса приложения на естественном языке прямо из панели предварительного просмотра Compose.

Journeys for Android Studio - описание шагов и утверждений для end-to-end тестирования на естественном языке.


👉 Дополнительные улучшения
Расширенная совместимость - поддержка Android Gradle Plugin (AGP) версий 4.0-9.0

Новая политика облачных сервисов - интеграция с Gemini, Play Vitals и Firebase Crashlytics доступна в стабильной версии и основных релизах за последние 10 месяцев

—————
💭 Возможно обновиться стоит ради упрощения JDK management. Но делайте это на свой страх и риск - уже появились сообщения в наших чатиках, что "впслывают баги". Или подождать до появления патчей)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
7
Если ты не понимаешь stability в Compose
https://kt.academy/article/compose-stability

Марцин Москала (автор Effective Kotlin) чётко объясняет, в чём суть.

✏️ Stability определяет, как Compose сравнивает объекты при рекомпозиции:
Stable — через equals, Unstable — по ссылке.

❗️ Так же отмечается, что с выходом Strong Skipping Mode (Kotlin 2.0.20) лямбды теперь мемоизируются автоматически, а Unstable‑типы больше не вызывают кучу лишних рекомпозиций. Но понимать разницу всё ещё важно.

🔗Личная рекомендация как проверить - Compose Stability Analyzer
——————
💭 Если мешают рекомпозиции в Compose - обязательно к прочтению. Скинь тому, кто до сих пор "плавает" в этой теме.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥111
🚀 Jetpack Compose 1.10.3 / 1.11.0-alpha05
https://developer.android.com/jetpack/androidx/releases/compose

Обновление библиотек Jetpack Compose: стабильные релизы UI 1.10.3, альфа-версии 1.11.0 для UI, Material, Foundation и Animation, а также новая Remote Compose 1.0.0-alpha04.

🟢 Compose UI 1.10.3
Стабильная версия Compose UI 1.10.3 с улучшениями производительности и исправлениями багов.
androidx.compose.ui:ui-*:1.10.3


🟢 Material и Material 3 получили обновления
Обновлены библиотеки Material Design компонентов:
- Compose Material 1.11.0-alpha05 - классические Material компоненты
- Material 3 1.5.0-alpha14 - современный Material Design 3

Новые компоненты и улучшения существующих делают UI более отзывчивым и "красивым".

🟢 Remote Compose 1.0.0-alpha04 для удаленного UI
Remote Compose позволяет рендерить UI удаленно - это открывает новые возможности для:
- Server-driven UI
- Динамические экраны без обновления приложения
- A/B тестирование интерфейсов
androidx.compose.remote:remote-*:1.0.0-alpha04

——————
💭 Все обычно: быстрее, "красивее", стабильней. Но, стоит обратить внимание на Remote Compose и попробовать ее в в своих экспериментах - видно, что пытаются сделать BDUI/SDUI более глобально-гугловым.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92
🚀 Flutter 3.41
https://blog.flutter.dev/whats-new-in-flutter-3-41-302ec140e632

Вводит публичные release windows, модульные design-системы, улучшения accessibility и новый RepeatingAnimationBuilder для создания непрерывных анимаций.

📌 Public Release Windows
Flutter теперь публикует прозрачные временные окна релизов, чтобы разработчики и контрибьюторы могли точно знать, когда их изменения попадут в стабильную версию. Это упрощает планирование и делает процесс разработки более предсказуемым.

📌 Модульные Design-системы
Material и Cupertino библиотеки мигрируют в отдельные пакеты с независимыми циклами релизов. Теперь команда Flutter может выпускать обновления дизайн-систем сразу, как только они готовы, не дожидаясь квартальных релизов SDK.

• Быстрая реакция на изменения дизайна iOS и Android (например, "Liquid Glass" или "Material 3 Expressive")
• Разработчики на старых версиях SDK могут обновлять дизайн-пакеты независимо

📌 Native Accessibility для Progress Indicators
CircularProgressIndicator и LinearProgressIndicator теперь поддерживают нативную accessibility, позволяя вспомогателям автоматически объявлять обновления прогресса. Flutter также теперь следит за настройками text spacing в браузерах для улучшения читаемости.

Новые testing matchers:
- isSemantics - проверка семантических свойств
- accessibilityAnnouncement - валидация accessibility объявлений

📌 RepeatingAnimationBuilder
Новый декларативный способ создания непрерывных анимаций - идеально для loading индикаторов, пульсирующих кнопок или эффектов шиммеров для placeholder'ов.

——————
💭 Улучшили процесс разработки и "доступности для всех пользователей" - показывая зрелость и заботу)

Так же RepeatingAnimationBuilder - приятное дополнение, которое упростит код для многих типовых анимаций.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥31
🚀 React Native 0.84
https://reactnative.dev/blog/2026/02/11/react-native-0.84

React Native 0.84 делает Hermes V1 движком по умолчанию на всех платформах, полностью убирает Legacy Architecture из iOS сборок и переходит на precompiled binaries для ускорения разработки.

🔹 Hermes V1 стал JavaScript движком по умолчанию
Hermes V1 теперь используется автоматически, без дополнительных настроек.

Что это дает:
• Значительно улучшенная производительность JavaScript кода
• Оптимизация компилятора и виртуальной машины
• Лучшее время запуска приложений
• Меньшее потребление памяти

🔹 Полное удаление Legacy Architecture из iOS
Legacy Architecture код больше не включается в iOS сборки по умолчанию.

Преимущества:
• Значительно сокращено время компиляции проектов
• Уменьшен размер финального приложения
• Упрощена кодовая база - меньше legacy кода
• Проще поддержка и обновление проектов

Новая архитектура становится стандартом де-факто.

🔹 Precompiled iOS Binaries по умолчанию
React Native теперь поставляется с предкомпилированными iOS binaries, что кардинально ускоряет процесс разработки:

Теперь не нужно компилировать React Native с нуля при каждом pod install - используются готовые binaries.

Плюсики:
• Первичная установка зависимостей выполняется в 2-3 раза быстрее
• CI/CD пайплайны работают значительно быстрее
• Меньше нагрузки на CPU при сборке

🔹 Node.js 22 - новое минимальное требование
React Native 0.84 требует минимум Node.js 22 для работы. Это позволяет использовать современные возможности JavaScript и улучшает совместимость с экосистемой.

Как обновиться:

# Используя nvm
nvm install 22
nvm use 22

# Или загрузите с nodejs.org


——————
Подробнее - по ссылке в заголовке)

*Принадлежит компании Meta, которая признана в РФ экстремистской и запрещена на территории страны.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72
🚀 Android 17 Beta 1 [part 2]
https://android-developers.googleblog.com/2026/02/the-first-beta-of-android-17.html

Dynamic Camera Session Updates
Новый метод updateOutputConfigurations() для бесшовного переключения между camera use cases без пересоздания всей сессии.

Пример использования:

// Переключение с preview на video recording без разрыва
val newOutputConfig = OutputConfiguration(videoSurface)
cameraDevice.updateOutputConfigurations(listOf(newOutputConfig))


Logical Multi-Camera Metadata:
Новый ключ LOGICAL_MULTI_CAMERA_ADDITIONAL_RESULTS для одновременного получения метаданных от всех активных физических камер в logical multi-camera setup.

val physicalCameraResults = captureResult.get(
CaptureResult.LOGICAL_MULTI_CAMERA_ADDITIONAL_RESULTS
)
physicalCameraResults?.forEach { (cameraId, metadata) ->
// Обработка метаданных каждой физической камеры
val exposure = metadata.get(CaptureResult.SENSOR_EXPOSURE_TIME)
}


Versatile Video Coding (VVC) Support
Поддержка стандарта VVC — следующего поколения видеокодеков после HEVC.

Новый MIME type и profiles:

val codecInfo = MediaCodecInfo.forVideoCodec(
MediaFormat.MIMETYPE_VIDEO_VVC,
MediaCodecInfo.CodecProfileLevel.VVCProfileMain10
)

val format = MediaFormat.createVideoFormat(
MediaFormat.MIMETYPE_VIDEO_VVC,
width,
height
)


Constant Quality Recording:
Метод setVideoEncodingQuality() обеспечивает более точный контроль качества видео, выходя за рамки простого битрейта.

Cleartext Traffic Blocked by Default
Атрибут android:usesCleartextTraffic deprecated. Приложения должны мигрировать на Network Security Configuration.

Миграция:

<!-- res/xml/network_security_config.xml -->
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">example.com</domain>
</domain-config>
</network-security-config>



<!-- AndroidManifest.xml -->
<application
android:networkSecurityConfig="@xml/network_security_config">
</application>


HPKE Cryptography
Новый Service Provider Interface для Hybrid Public-Key Encryption с поддержкой AEAD symmetric encryption.

————————
💭 Android 17 - это переход на Continuous Canary Updates, теперь разработчики получат более стабильные Beta-версии с почти финальными API уже на ранних этапах. Также теперь все больше ОБЯЗАТЕЛЬНОГО внимания уделяется большим экранам.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🤔51
🚀 Android 17 Beta 1 [part 1]
https://android-developers.googleblog.com/2026/02/the-first-beta-of-android-17.html

Google выпустила первую бета-версию Android 17, радикально изменив модель разработки платформы. Вместо традиционных Developer Preview теперь используется Continuous Canary Updates - функции выходят сразу после внутреннего тестирования. Релиз фокусируется на обязательной адаптивности для больших экранов, производительности и новых медиа-возможностях.

Continuous Canary Updates - новая модель разработки
Google отказывается от многолетней практики Developer Preview в пользу непрерывного канала Canary.

Три основных преимущества:
Быстрый доступ к функциям: Features и APIs попадают в Canary сразу после внутреннего тестирования, без ожидания квартальных релизов
Улучшенная стабильность: Раннее тестирование делает Beta-версии более отполированными с почти финальными API
Упрощенное тестирование: OTA-обновления исключают ручную прошивку; легче интегрировать в CI-процессы

Mandatory Large Screen Adaptability (SDK 37)
Приложения, таргетирующие Android 17, обязаны поддерживать гибкую ориентацию и изменение размеров на больших экранах (≥600dp smallest width).

Критические изменения:
• Portrait/landscape orientation locks игнорируются на больших экранах
• Ограничения aspect ratio (minAspectRatio, maxAspectRatio) больше не применяются
• Игры освобождены от требования при использовании android:appCategory="game"
• Пользователи могут переопределить поведение через системные настройки

Новый manifest атрибут:
<activity
android:name=".MyActivity"
android:recreateOnConfigChanges="keyboard|uiMode">
<!-- Activity пересоздается при изменении клавиатуры или UI mode -->
</activity>


Атрибут android:recreateOnConfigChanges позволяет приложению пересоздавать Activity при конкретных configuration changes, таких как видимость клавиатуры или переключение UI mode.

Lock-free MessageQueue и Generational GC
Lock-free MessageQueue:
Новая реализация без блокировок для приложений, таргетирующих SDK 37+. Уменьшает количество пропущенных фреймов и улучшает отзывчивость UI.

Generational Garbage Collection:
Более частые, но менее ресурсоемкие сборки young-generation объектов. Снижает общие CPU-затраты на GC, улучшая плавность работы приложений.

Важно: Оба улучшения активируются автоматически для приложений с targetSdkVersion="37".

————————
Продолжение в предыдущем посте...ох уж эта небагованная телега...
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍3