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
Продакшн-реди Firebase SDK с генеративным ИИ на борту
Можно получить доступ к моделям Google Gemini Cloud напрямую из приложения, а как это сделать лучше?
👉 Firebase App Check, во избежание злоупотребления вашим API из приложения
👉 Remote Config для динамического подкидывания используемых моделей
👉 Google Analytics для отслеживания использования
Не забудьте обновить Privacy policy о том как вы используете данные. Гугл обещает не обучать модель на ваших данных, полученных через SDK!
Можно получить доступ к моделям Google Gemini Cloud напрямую из приложения, а как это сделать лучше?
👉 Firebase App Check, во избежание злоупотребления вашим API из приложения
👉 Remote Config для динамического подкидывания используемых моделей
👉 Google Analytics для отслеживания использования
Не забудьте обновить Privacy policy о том как вы используете данные. Гугл обещает не обучать модель на ваших данных, полученных через SDK!
Android Developers Blog
Production-ready generative AI on Android with Vertex AI in Firebase
Best practices to prep your Gemini feature for production such as implementing App Check, using Remote Config, gathering user feedback, and more.
👍5
Интервью с менеджером по продукту Android Studio
Почему это интересно? Понимание того, кем развивается главный инструмент в Android разработке может указать куда будет двигаться продукт. Внутри такие вопросы:
👉 Можете рассказать о том, как стали частью команды Android Studio? Что вызвало у вас интерес к Android разработке?
👉 По вашему мнению, какая функция, реализованная командой Android Studio за последние годы, наиболее значимая и почему?
👉 Каким образом команда Android Studio следует постоянно меняющимся потребностям разработчиков?
👉 Какой вклад вносит команда Studio в видение Google относительно платформы Android?
👉 Если бы вы могли взмахнуть волшебной палочкой и добавить одну функцию мечты в экосистему Android, что бы это было и почему?
Почему это интересно? Понимание того, кем развивается главный инструмент в Android разработке может указать куда будет двигаться продукт. Внутри такие вопросы:
👉 Можете рассказать о том, как стали частью команды Android Studio? Что вызвало у вас интерес к Android разработке?
👉 По вашему мнению, какая функция, реализованная командой Android Studio за последние годы, наиболее значимая и почему?
👉 Каким образом команда Android Studio следует постоянно меняющимся потребностям разработчиков?
👉 Какой вклад вносит команда Studio в видение Google относительно платформы Android?
👉 Если бы вы могли взмахнуть волшебной палочкой и добавить одну функцию мечты в экосистему Android, что бы это было и почему?
Android Developers Blog
Meet the Android Studio team: A conversation with Product Manager, Paris Hsu
Paris Hsu, a Product Manager on Google's Android Studio team, is passionate about developers using Compose Tools to build incredible Android apps.
🔥3👍2👎1