Анонс Koin IDE Plugin
Что позволит делать плагин:
👉 Видеть все дерево зависимостей
👉 Навигация между компонентами
Валидация на уровне Koin делается в рантайме, но через плагин можно проверить валидность состояния с помощью статического анализа. Предварительная дата релиза - 1 квартал 2025
Что позволит делать плагин:
👉 Видеть все дерево зависимостей
👉 Навигация между компонентами
Валидация на уровне Koin делается в рантайме, но через плагин можно проверить валидность состояния с помощью статического анализа. Предварительная дата релиза - 1 квартал 2025
blog.kotzilla.io
Koin IDE Plugin: A Koin Configuration Tree
Introducing the Koin IDE Plugin for Kotlin: See configurations, navigate dependencies, & validate your Koin setup an intuitive tree view. Coming Q1 2025.
🔥24👏3👍2
Разбираем Low Memory Management в Android: Kswapd & LMK
👉 Память в системе разделяется на RAM, zRAM и Storage(постоянная)
👉 RAM разделяется на Pages по 4KB. Каждый Page может быть used или unused.
used в свою очередь делится на Private, если им владеет только 1 процесс или Shared в ином случае
Так же used Page может быть Clean, если это копия данных из Storage и Dirty если это модифицированные данные
Само управление происходит с помощью двух механизмов:
👉
👉
Чуть подробнее про LMK внутри статьи или в этом видео
👉 Память в системе разделяется на RAM, zRAM и Storage(постоянная)
👉 RAM разделяется на Pages по 4KB. Каждый Page может быть used или unused.
used в свою очередь делится на Private, если им владеет только 1 процесс или Shared в ином случае
Так же used Page может быть Clean, если это копия данных из Storage и Dirty если это модифицированные данные
Само управление происходит с помощью двух механизмов:
👉
kswapd (kernel swap daemon) Удаляет Clean Pages и восстанавливает копию из хранилища. Сжимает и перемещает Dirty Pages в zRAM. Активируется при нехватки памяти и возвращает все как было, когда процесс, владеющей Page снова оживает.👉
LMK (Low-memory killer) Удаляет процессы в порядке с приложенной таблицы, тем самым освобождая Pages ими владеющие.Чуть подробнее про LMK внутри статьи или в этом видео
👍9❤4🔥2🤔2😁1
Android Good Reads
Android XR SDK Developer Preview Платформа для расширенной реальности теперь и на Android. Базируется так же, на open source - OpenXR. Все приложения на Android должны быть совместимы Пощупать в эмуляторах можно тут, доступно для разработки начиная с Android…
Android XR KMP
Добавить поддержку Android XR в ваше KMP приложение - легко! Две составляющих:
👉 Добавить зависимость
👉 Добавить
iOS имплементация игнорируется, но предположу, что жизненные циклы достаточно сильно различаются чтобы вписать обе VR/AR платформы сразу
Добавить поддержку Android XR в ваше KMP приложение - легко! Две составляющих:
👉 Добавить зависимость
// shared/build.gradle.kts
sourceSets {
androidMain.dependencies {
implementation(libs.androidx.xr.compose)
implementation(libs.androidx.xr.compose.material3)
implementation(libs.androidx.xr.scenecore)
}
}
👉 Добавить
expect / actual интерфейсыiOS имплементация игнорируется, но предположу, что жизненные циклы достаточно сильно различаются чтобы вписать обе VR/AR платформы сразу
🥴9👍2
Цикл статей про Mockk и тесты
Не все согласны, что это хороший подход, но существующий и практикующий многими компаниями:
👉 Mockk и основы
👉 Mockk, продвинутое использование. Мокаем статик методы, синглтоны и
👉 Unit-тестирование Android компонентов
👉 Мокаем suspend функции и flow
👉 Пишем поддерживаем и читаемый код в тестах с Mockk
А вы мокаете данные в тестах?
Не все согласны, что это хороший подход, но существующий и практикующий многими компаниями:
👉 Mockk и основы
👉 Mockk, продвинутое использование. Мокаем статик методы, синглтоны и
final классы👉 Unit-тестирование Android компонентов
👉 Мокаем suspend функции и flow
👉 Пишем поддерживаем и читаемый код в тестах с Mockk
А вы мокаете данные в тестах?
MockK
Provides DSL to mock behavior. Built from zero to fit Kotlin language. Supports named parameters, object mocks, coroutines and extension function mocking
👍4🔥2👎1👏1
Оптимизируем
Если кратко, то используем key:
Получаем:
👉 Улучшение перфоманса при рекомпозиции
👉 Нормальный контроль над состоянием элементов
Следите чтобы ключи были уникальными!
LazyList в 1 строчку. Если кратко, то используем key:
LazyColumn {
items(items = yourList, key = { it.id }) { item ->
// Your item UI here
Text(text = item.name)
}
}Получаем:
👉 Улучшение перфоманса при рекомпозиции
👉 Нормальный контроль над состоянием элементов
Следите чтобы ключи были уникальными!
Medium
Jetpack compose — One Line trick for your ‘LazyColumn’
Make sure you are using this in your Jetpack Compose ‘LazyColumn’
👍6🤯3🔥2
Эволюция архитектурных паттернов
👇 UI-центричная архитектура или
👇
👇
👇
👇
👉 Постепенное упрощение
Внутри статьи примеры с каждым этапом. Кому-то посмотреть как было раньше, кому-то понастольгировать
👇 UI-центричная архитектура или
God Activity👇
MVC. Выделили логику в контроллер👇
MVP. Добавили интерфейсов меж слоями👇
MVVM. Изоляция UI и реактивщина👇
MVI и начало эры UDF👉 Постепенное упрощение
MVI с дроблением reduce функции. TEA, как хороший примерВнутри статьи примеры с каждым этапом. Кому-то посмотреть как было раньше, кому-то понастольгировать
Medium
The Evolution of Android Architecture Patterns: From UI-Centric to MVC to MVP to MVVM to MVI
A time journey through Android’s Architecture Patterns evolution which will leave you with a solid understanding over MVC, MVP, MVVM and…
👍14🔥4❤3👎2
Шпаргалка по размещению Composable элементов
Подробнее про
Про центрирование и растягивание тут
Подробнее про
Arrangement с примерами можно глянуть тутПро центрирование и растягивание тут
🔥26👍8❤5
Смотрим начинку ViewModel
👉 Основная логика лежит в
👉
👉
👉
Как думаете, что мы чаще всего добавляем в
👉 Основная логика лежит в
ViewModelImpl (можно посмотреть тут)👉
isCleared, Простой флаг указывающий на состояние viewModel. Много функций завязано на нем👉
closeables, keyToCloseables, addCloseable(). Все призвано для управления AutoCloseable ресурсами (Что за AutoCloseable?)👉
clear() Подчищает эти самые ресурсыКак думаете, что мы чаще всего добавляем в
addCloseable()? Правильно - viewModelScope, который в свою очередь является наследником AutoCloseable и CoroutineScope, которая останавливается по закрытию viewModel.
internal fun createViewModelScope(): CloseableCoroutineScope {
// dispatcher initialization
return CloseableCoroutineScope(coroutineContext = dispatcher + SupervisorJob())
}
internal class CloseableCoroutineScope(
override val coroutineContext: CoroutineContext,
) : AutoCloseable, CoroutineScope {
constructor(coroutineScope: CoroutineScope) : this(coroutineScope.coroutineContext)
override fun close() = coroutineContext.cancel()
}
👍10🔥4👏1
Разбираемся с CameraX в Jetpack Compose
Первая часть тут. В ней базовая настройка камеры и превью для камеры. Иными словами - Getting Started гайд из документации.
Что же подчерпнуть из этой части? Если вы не знаете как сделать tap-to-focus фичу
Полный пример фичи тут. А объяснение кода внутри статьи
Первая часть тут. В ней базовая настройка камеры и превью для камеры. Иными словами - Getting Started гайд из документации.
Что же подчерпнуть из этой части? Если вы не знаете как сделать tap-to-focus фичу
Полный пример фичи тут. А объяснение кода внутри статьи
👍3🔥2👏1
SOLID на собеседованиях
Final Results
28%
Я интервьюер, спрашиваю
27%
Я интервьюер, не спрашиваю
34%
Недавно на собеседовании меня спрашивали
27%
Давно не слышал этого вопроса на собеседовании
👍6❤1🔥1
Разбираем SOLID принципы с примерами на Kotlin
Практической пользы не много, но повторить перед собеседованием лишний раз будет полезно. Как относитесь к вопросам такого типа на собеседованих?
Практической пользы не много, но повторить перед собеседованием лишний раз будет полезно. Как относитесь к вопросам такого типа на собеседованих?
Carrion.dev
Understanding SOLID Principles with Kotlin Examples
SOLID Principles explained with Kotlin Examples.
❤7🦄3👍1
3 простых анимации на Jetpack Compose, которые сделают твою фичу на следующем демо красивее
👉 Fade in - Fade out
👉 Scale
👉 Crossfade можно глянуть внутри статьи. Не соглашусь, что это хороший вариант для анимирования перехода между экранами. Я бы использовал
Чуть более содержательная дока по анимации: https://developer.android.com/develop/ui/compose/animation/quick-guide
👉 Fade in - Fade out
@Composable
fun FadeAnimationDemo() {
var isVisible by remember { mutableStateOf(true) }
Column(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
AnimatedVisibility(
visible = isVisible,
enter = fadeIn(),
exit = fadeOut()
) {
Text("Hello Jetpack Compose!", style = MaterialTheme.typography.h4)
}
Spacer(modifier = Modifier.height(16.dp))
Button(onClick = { isVisible = !isVisible }) {
Text("Toggle Visibility")
}
}
}
👉 Scale
@Composable
fun ScaleAnimationDemo() {
var isScaled by remember { mutableStateOf(false) }
val scale by animateFloatAsState(
targetValue = if (isScaled) 1.5f else 1f,
animationSpec = tween(durationMillis = 500)
)
Box(
modifier = Modifier
.fillMaxSize()
.clickable { isScaled = !isScaled },
contentAlignment = Alignment.Center
) {
Box(
modifier = Modifier
.size(100.dp)
.graphicsLayer(scaleX = scale, scaleY = scale)
.background(Color.Blue, shape = CircleShape)
)
}
}
👉 Crossfade можно глянуть внутри статьи. Не соглашусь, что это хороший вариант для анимирования перехода между экранами. Я бы использовал
SharedTransition, но, видимо, сложность интеграции не в рамках 1 Composable функции выбило его из списка простых.Чуть более содержательная дока по анимации: https://developer.android.com/develop/ui/compose/animation/quick-guide
🥴8👍4👎2
В последней стабильной Android Studio Ladybug Feature Drop стала доступна одна из полезнейших AI фичей по моему мнению - AI ренейминг. В отличии от остального это не AI генерация кода, а простой анализ и предложение по изменениям. А как вы относитесь к новым AI фичам?
Android Developers
Rethink variable names | Android Studio | Android Developers
Learn about AI-enabled refactoring and documentation features.
🤔10🥰5🤷4
Разбираемся с новыми API камеры
Доступны они в
👉
👉
Примеры интеграции внутри статьи!
Доступны они в
Camera2 и CameraX:👉
Night. Привычная для всех приложений-камер ночная съемка. Делает под капотом несколько снимков, чтобы позже выдать финальное изображение в хорошем качестве👉
Bokeh. Размытие заднего фона и выделение обьектов на переднем фоне.Примеры интеграции внутри статьи!
👍6🔥2👀2
А что там с
Вышел первый в 2025 году Compose BOM, 2025.01.00 - для альфа, бета и релизной версии. НО, релизный BOM совпадает с прошлогодним 2024.12.01, не обманываемся 🧐
1.8.0-alpha08 Compose вышла, вот немного изменений:
👉
👉 Исправлено большое количество багов с
👉
👉 Compose Material и Material 3 теперь всегда включают
👉 Compose Material3 выпустила версию 1.4.0-alpha06 с новым floating toolbar.
👉 Помимо всего прочего обновили некоторые другие
Compose? Вышел первый в 2025 году Compose BOM, 2025.01.00 - для альфа, бета и релизной версии. НО, релизный BOM совпадает с прошлогодним 2024.12.01, не обманываемся 🧐
1.8.0-alpha08 Compose вышла, вот немного изменений:
👉
AutoSize -> TextAutoSize, и теперь можно делать свою имплементацию👉 Исправлено большое количество багов с
focus, станет ли проще на Android TV?👉
AnnotatedString.fromHtml() поддерживает неупорядочные списки из HTML (<ul> и <li>)👉 Compose Material и Material 3 теперь всегда включают
displayCutout (вырез камеры) по дефолту в каждые отступы👉 Compose Material3 выпустила версию 1.4.0-alpha06 с новым floating toolbar.
👉 Помимо всего прочего обновили некоторые другие
androidx.* зависимости🔥6👍5👏3
Что изменится в Android 16? Отмена ограничений по ориентации экрана и изменению размера окна
Кратко - много боли для тех, кто не делает адаптивный дизайн приложения. C Android 16 будут игнорироваться значения:
👉
👉
Хорошая новость: Эти изменения не затронут девайсы с экраном меньше sw600dp
Что потестировать:
1) Как ведет себя состояние экрана при реконфигурации
2) Как ведет себя камера, если вы ее используете в приложении, при поворотах экрана
3) Удостовериться, что на экранах с большим количеством данных правильно выставлен скролл и все элементы доступны для пользователя
Кратко - много боли для тех, кто не делает адаптивный дизайн приложения. C Android 16 будут игнорироваться значения:
👉
screenOrientation: portrait, reversePortrait, sensorPortrait, userPortrait, landscape, reverseLandscape, sensorLandscape, userLandscape. Ограничить ориентацию програмно тоже нельзя👉
resizeableActivity, minAspectRatio, maxAspectRatio. Будьте готовы что приложение может поплытьХорошая новость: Эти изменения не затронут девайсы с экраном меньше sw600dp
Что потестировать:
1) Как ведет себя состояние экрана при реконфигурации
2) Как ведет себя камера, если вы ее используете в приложении, при поворотах экрана
3) Удостовериться, что на экранах с большим количеством данных правильно выставлен скролл и все элементы доступны для пользователя
Android Developers Blog
The future is adaptive: Changes to orientation and resizability APIs in Android 16
Build adaptive apps that support various screen sizes and orientations, promoting consistent user experiences across different Android devices.
😱23🔥7👍4👎2
Koin Roadmap 2025
Не очень давно релизнулась версия Koin 4.0.2. Нам на проекте пришлось провести большую работу в связи с этим, но ребята из команды Koin говорят о кратном ускорении компиляции 5m16 -> 3m17 с этим обновлением. Значит это стоило того!
Так же докладывают о росте комьюнити (+60% загрузок) , наибольший рост у Compose Multiplatform (в 288%). Поэтому, первый приоритет в упрощение интеграции Koin для CMP / KMP проектов. Уже с версии 4.1 доступна
Вторым фокусом будет, естественно, улучшение работы с Compose. Динамические параметры, поддержка жизненного цикла
Помимо этого: Скоупы, Koin DSL, Koin Annotations 2.0, а так же более глубокая поддержка ktor3. По аналогии с KLIP, команда запустила KFIP - Koin Features & Improvements Proposals.
Ну а я буду ждать публичный релиз Koin IDE plugin. Кто-нибудь получил из вас доступ в альфу? Расскажите как оно!
Не очень давно релизнулась версия Koin 4.0.2. Нам на проекте пришлось провести большую работу в связи с этим, но ребята из команды Koin говорят о кратном ускорении компиляции 5m16 -> 3m17 с этим обновлением. Значит это стоило того!
Так же докладывают о росте комьюнити (+60% загрузок) , наибольший рост у Compose Multiplatform (в 288%). Поэтому, первый приоритет в упрощение интеграции Koin для CMP / KMP проектов. Уже с версии 4.1 доступна
KoinMultiplatformApplication, как единая точка входа для инъекции зависимостей.Вторым фокусом будет, естественно, улучшение работы с Compose. Динамические параметры, поддержка жизненного цикла
Composable элементов и, конечно, улучшения по части перфоманса.Помимо этого: Скоупы, Koin DSL, Koin Annotations 2.0, а так же более глубокая поддержка ktor3. По аналогии с KLIP, команда запустила KFIP - Koin Features & Improvements Proposals.
Ну а я буду ждать публичный релиз Koin IDE plugin. Кто-нибудь получил из вас доступ в альфу? Расскажите как оно!
Medium
Koin Framework 2025 Roadmap: From 4.0 to Future Milestones
this article outlines the current status of Koin 4.0 and previews the exciting developments planned for 2025 — Koin 4.1 & 4.2
👍10🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Про Compose!
👉 Compose Multiplatform получила релиз 1.8.0-alpha02. Внутри в основном багфиксы и поддержка drag-and-drop для iOS
👉 Как запустить анимацию одновременно для 2 элементов?
👉 Можно ли двигать элементы по своему, когда открываем IME (клавиатуру)?
Свежие библиотеки:
- MediaPlayer для KMP, на андроиде под капотом exoplayer (media3). kdroidFilter / Compose-Media-Player
- mejdi14 / KMP-Searchable-Dropdown. Я не большой фанат такого рода библиотек, но данная лицензия позволяет вам заглянуть в исходник и утащить важную часть имплементации к себе в проект
- nassendelft / compose-win9x-theme Лучшее! Вышло обновление для библиотеки позволяющее натянуть тему win9x на ваше приложение.
- Обновление для compose-maps с фиксом для кластеризации точек
👉 Compose Multiplatform получила релиз 1.8.0-alpha02. Внутри в основном багфиксы и поддержка drag-and-drop для iOS
👉 Как запустить анимацию одновременно для 2 элементов?
👉 Можно ли двигать элементы по своему, когда открываем IME (клавиатуру)?
Свежие библиотеки:
- MediaPlayer для KMP, на андроиде под капотом exoplayer (media3). kdroidFilter / Compose-Media-Player
- mejdi14 / KMP-Searchable-Dropdown. Я не большой фанат такого рода библиотек, но данная лицензия позволяет вам заглянуть в исходник и утащить важную часть имплементации к себе в проект
- nassendelft / compose-win9x-theme Лучшее! Вышло обновление для библиотеки позволяющее натянуть тему win9x на ваше приложение.
- Обновление для compose-maps с фиксом для кластеризации точек
👍5❤2🔥2