💁️️️️️️ Тень от
Это решили добавлением новых модификаторов
Теперь тень можно настраивать по нескольким параметрам:
- radius — размытие по краям, “мягкость” тени
- spread — расширение или сужение тени относительно границ объекта
- offset — смещение тени по осям X и Y
Эти параметры позволяют как бы задать индивидуальный источник света для каждого объекта. Кроме того, значения
Можете сами увидеть разницу
shadow — часто не та, что ожидает дизайнер.Это решили добавлением новых модификаторов
dropShadow и innerShadow. Теперь тень можно настраивать по нескольким параметрам:
- radius — размытие по краям, “мягкость” тени
- spread — расширение или сужение тени относительно границ объекта
- offset — смещение тени по осям X и Y
Эти параметры позволяют как бы задать индивидуальный источник света для каждого объекта. Кроме того, значения
dropShadow и innerShadow теперь близки к тем, что используются в Figma — поэтому повторить дизайн из макета стало проще.Можете сами увидеть разницу
shadow и dropShadow👍2
В анонсе Compose 1.9, как мне кажется, уделили незаслуженно мало внимания новым теням. Поэтому держите годную статью по новому апи и его возможностям:
The Art of Shadows in Jetpack Compose
The Art of Shadows in Jetpack Compose
Medium
The Art of Shadows in Jetpack Compose
Redefining depth without elevation.
✍1❤1
🔪 Material Icons — всё
В релизе Compose от 24 сентября убрали зависимость от библиотеки material-icons-core. Этот артефакт больше не поддерживается и не рекомендуется к использованию, поскольку он:
Это означает, что при обновлении Compose ваш проект скорее всего перестанет собираться, если вы используете пакет androidx.compose.material.icons (например, часто используется Icons)
✅ Новый рекомендуемый способ — Material Symbols. Нужно просто качать иконки с сайта Google Fonts
Обходной путь — добавить зависимость на material-icons-core вручную. Подойдёт в качестве временного решения, если миграция слишком долгая или вам действительно нужны те самые иконки.
В релизе Compose от 24 сентября убрали зависимость от библиотеки material-icons-core. Этот артефакт больше не поддерживается и не рекомендуется к использованию, поскольку он:
содержит устаревшие по внешнему виду и ощущениям иконки и значительно увеличивает время сборки
Это означает, что при обновлении Compose ваш проект скорее всего перестанет собираться, если вы используете пакет androidx.compose.material.icons (например, часто используется Icons)
✅ Новый рекомендуемый способ — Material Symbols. Нужно просто качать иконки с сайта Google Fonts
Обходной путь — добавить зависимость на material-icons-core вручную. Подойдёт в качестве временного решения, если миграция слишком долгая или вам действительно нужны те самые иконки.
Google Fonts
Material Symbols and Icons - Google Fonts
Material Symbols are our newest icons consolidating over 2,500 glyphs in a single font file with a wide range of design variants.
🐳2😢1
Переписка с поддержкой Google 🤩
— REJECT: У вас неправильно заполнена финансовая декларация
— Я бы хотел подать апелляцию. Помогите понять, что не так?
— Ваша апелляция рассмотрена. У вас неправильно заполнена финансовая декларация. Хорошего дня
😹
Справедливости ради, ответили за день, относительно быстро
— REJECT: У вас неправильно заполнена финансовая декларация
— Я бы хотел подать апелляцию. Помогите понять, что не так?
— Ваша апелляция рассмотрена. У вас неправильно заполнена финансовая декларация. Хорошего дня
😹
Справедливости ради, ответили за день, относительно быстро
👏5👍1🎉1
🧯 Обычный апдейт Compose. Минус регистрация. Минус прод. Минус утро.
Всё началось с утреннего “регистрация не работает” от саппорта. Сначала подумал, что какой-то очень специфический случай, но количество обращений очень быстро росло. Запустил приложение у себя и не смог ничего нажать на экране. Я в ступоре, потому что просто нет идей, почему это может не работать.
Всё оказалось довольно интересно и превратилось в небольшое расследование.
Предыстория:
У нас есть KYC Safety шторка (на скрине). Она показывается блокирующе перед KYC.
Мы договорились, что закрыть её можно только по кнопке:
— нет крестика ❌
— не работает системный Back ⬅️
— нельзя свайпнуть вниз 👇
Всё началось с утреннего “регистрация не работает” от саппорта. Сначала подумал, что какой-то очень специфический случай, но количество обращений очень быстро росло. Запустил приложение у себя и не смог ничего нажать на экране. Я в ступоре, потому что просто нет идей, почему это может не работать.
Всё оказалось довольно интересно и превратилось в небольшое расследование.
Предыстория:
У нас есть KYC Safety шторка (на скрине). Она показывается блокирующе перед KYC.
Мы договорились, что закрыть её можно только по кнопке:
— нет крестика ❌
— не работает системный Back ⬅️
— нельзя свайпнуть вниз 👇
Как выглядит код Bottom Sheet для бодрого утра:
Вот эта строка блокирует свайп:
А вот эта — закрытие по Back:
И раньше всё это работало. Но после обновления Compose до BOM 2025.10.00 (а с ним — и Material3 до версии 1.4.0) всё сломалось.
В changelog видно, что Bottom Sheet сильно переработали — улучшили, но, видимо, поменяли логику открытия.
📉 Что изменилось:
Раньше шторка сразу открывалась, а
Теперь же он вызывается сразу при открытии.
А поскольку я возвращаю
Результат:
Шторка не видна, но Window диалога уже оказывается поверх UI и перехватывает все клики 🤯
В итоге экран как будто блокируется, и выйти из этого состояния невозможно 🙃
Про это изменение в changelog — ни слова. Но по описанию апдейта легко представить, где зацепили.
🧯 Починилось так:
Уже на ревью в сторе. Это было бодрое утро!
JazariModalBottomSheet(
onDismissed = onDismissed,
sheetState = rememberModalBottomSheetState(confirmValueChange = { false }),
properties = ModalBottomSheetProperties(shouldDismissOnBackPress = false),
) {
KycSafetyInternal(onButtonClick = { dismiss() })
}
Вот эта строка блокирует свайп:
confirmValueChange = { false }
А вот эта — закрытие по Back:
shouldDismissOnBackPress = false
И раньше всё это работало. Но после обновления Compose до BOM 2025.10.00 (а с ним — и Material3 до версии 1.4.0) всё сломалось.
В changelog видно, что Bottom Sheet сильно переработали — улучшили, но, видимо, поменяли логику открытия.
📉 Что изменилось:
Раньше шторка сразу открывалась, а
confirmValueChange вызывался только при изменении состояния (например, при свайпе).Теперь же он вызывается сразу при открытии.
А поскольку я возвращаю
false, шторка не может показаться из Hidden состояния.Результат:
Шторка не видна, но Window диалога уже оказывается поверх UI и перехватывает все клики 🤯
В итоге экран как будто блокируется, и выйти из этого состояния невозможно 🙃
Про это изменение в changelog — ни слова. Но по описанию апдейта легко представить, где зацепили.
🧯 Починилось так:
sheetState = rememberModalBottomSheetState { it != SheetValue.Hidden }
Уже на ревью в сторе. Это было бодрое утро!
🔥10
🎄 Итоги года и немного личного
Я пропал почти на два месяца — не случайно. Год вышел плотным, местами выматывающим, но очень насыщенным.
Коротко про главное:
— перешёл из Кинопоиска в стартап Jazari — сложный и важный шаг
— Jazari от идеи и прототипов доехал до продакшена
— появились реальные пользователи, деньги, ошибки и ночи с хотфиксами
— было много продуктовых решений, переделок экранов, архитектурных сомнений и техдолга, но и огромное удовольствие от принятых решений
Этот год напомнил:
— лучше попробовать, чем жалеть
— гайдлайны не заменяют реальный опыт
— «редкие кейсы» всегда всплывают (всегда не вовремя)
— паузы нужны, чтобы не выгореть
В следующем году хочу писать регулярнее, но без обязаловки:
про Android, Compose, архитектуру, продукт, факапы и практику.
Спасибо всем, кто читает и делится опытом. Даже при 175 людях это ощущается как живой разговор ❤️
С наступающим!
🎅
Я пропал почти на два месяца — не случайно. Год вышел плотным, местами выматывающим, но очень насыщенным.
Коротко про главное:
— перешёл из Кинопоиска в стартап Jazari — сложный и важный шаг
— Jazari от идеи и прототипов доехал до продакшена
— появились реальные пользователи, деньги, ошибки и ночи с хотфиксами
— было много продуктовых решений, переделок экранов, архитектурных сомнений и техдолга, но и огромное удовольствие от принятых решений
Этот год напомнил:
— лучше попробовать, чем жалеть
— гайдлайны не заменяют реальный опыт
— «редкие кейсы» всегда всплывают (всегда не вовремя)
— паузы нужны, чтобы не выгореть
В следующем году хочу писать регулярнее, но без обязаловки:
про Android, Compose, архитектуру, продукт, факапы и практику.
Спасибо всем, кто читает и делится опытом. Даже при 175 людях это ощущается как живой разговор ❤️
С наступающим!
🎅
🎄12❤3🎉3
🤖 22 января — день Android разработчика!
...но только в Додо Пицце.
Когда-то работал в Додо. Так получилось, что в команде в один момент оказалось аж 4 (четыре!) Android разработчика с днём рождения 22 января. Конечно, были идеи добавить дату рождения В ТРЕБОВАНИЯ ВАКАНСИИ 😁
Одного из них вы даже скорее всего знаете — это Макс, автор канала Мобильное чтиво
Двое других — на фото (сам не ожидал откопать!)
🎂Поздравляю с прошедшим днём рождения себя и этих классных ребят, с которыми работали вместе:
Макс, Елдос, Лёха, успехов вам во всём! 🤟
А что так поздно? Готовил подарок! Об этом сразу следующий пост 👇
...но только в Додо Пицце.
Когда-то работал в Додо. Так получилось, что в команде в один момент оказалось аж 4 (четыре!) Android разработчика с днём рождения 22 января. Конечно, были идеи добавить дату рождения В ТРЕБОВАНИЯ ВАКАНСИИ 😁
Одного из них вы даже скорее всего знаете — это Макс, автор канала Мобильное чтиво
Двое других — на фото (сам не ожидал откопать!)
🎂Поздравляю с прошедшим днём рождения себя и этих классных ребят, с которыми работали вместе:
Макс, Елдос, Лёха, успехов вам во всём! 🤟
А что так поздно? Готовил подарок! Об этом сразу следующий пост 👇
🔥6
Недавно в Jazari делали экран с горизонтальным пейджингом. Нужна была индикация выбранной страницы. Посмотрел на рекомендации Google, посмотрел библиотеки, и всё равно написал своё.
Есть интерсные моменты, поэтому решил устроить стрим с разбором! Приходите пообщаться, послушать, пообсуждать варианты.
В среду будем разбирать Paging Indicator 🔘🟢🔘🔘 https://youtube.com/live/qDNuGDhJUA4
Есть интерсные моменты, поэтому решил устроить стрим с разбором! Приходите пообщаться, послушать, пообсуждать варианты.
В среду будем разбирать Paging Indicator 🔘🟢🔘🔘 https://youtube.com/live/qDNuGDhJUA4
Youtube
- YouTube
Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
👍6
Android & Coffee с Васей
Недавно в Jazari делали экран с горизонтальным пейджингом. Нужна была индикация выбранной страницы. Посмотрел на рекомендации Google, посмотрел библиотеки, и всё равно написал своё. Есть интерсные моменты, поэтому решил устроить стрим с разбором! Приходите…
🍿Готовьте попкорн для стрима, посмотрим 2-3 разных библиотеки для Paging Indicator, будем пробовать в реальном времени, смотреть код
Стартуем через полчаса!
Стартуем через полчаса!
👍1
Android & Coffee с Васей
🍿Готовьте попкорн для стрима, посмотрим 2-3 разных библиотеки для Paging Indicator, будем пробовать в реальном времени, смотреть код Стартуем через полчаса!
Стрим откладывается по техническим причинам
Технические причины: 😄
Технические причины: 😄
😁10😢7
Разговор с AI be like... https://www.youtube.com/shorts/UYGXSyuNpmo
YouTube
Лесли Нильсен в Аэроплане!
#врач #леслинильсен #аэроплан
😁3
🧑🏼🎨 Макетам нельзя верить
Почти в каждом проекте происходит одно и то же:
открываешь Figma, смотришь экран — а в приложении он выглядит иначе.
И хорошо, если отличаются только отступы. Иногда экран вообще другой.
Идёшь к дизайнеру с вопросом, а он отвечает: «Да, это старый дизайн. Посмотри новый в соседнем файле». Знакомо?
Я сталкивался с этим почти в каждом проекте. В идеальном мире пользователи видят то, что нарисовано дизайнером. В реальности источником правды остаётся код.
Но как посмотреть актуальный вид приложения? Особенно если экран спрятан глубоко или есть сложные условия его показа?
Обычно это решается snapshot-тестами. Это помогает поддерживать актуальность, но довольно неудобно: приходится ходить по папкам и смотреть отдельные картинки.
А для решения даже простой задачи часто хочется увидеть контекст шире — как экран связан с другими частями приложения. Скриншоты в этом помогают слабо.
В следующем посте покажу, какой инструмент сейчас пробую для решения этой проблемы.
Почти в каждом проекте происходит одно и то же:
открываешь Figma, смотришь экран — а в приложении он выглядит иначе.
И хорошо, если отличаются только отступы. Иногда экран вообще другой.
Идёшь к дизайнеру с вопросом, а он отвечает: «Да, это старый дизайн. Посмотри новый в соседнем файле». Знакомо?
Я сталкивался с этим почти в каждом проекте. В идеальном мире пользователи видят то, что нарисовано дизайнером. В реальности источником правды остаётся код.
Но как посмотреть актуальный вид приложения? Особенно если экран спрятан глубоко или есть сложные условия его показа?
Обычно это решается snapshot-тестами. Это помогает поддерживать актуальность, но довольно неудобно: приходится ходить по папкам и смотреть отдельные картинки.
А для решения даже простой задачи часто хочется увидеть контекст шире — как экран связан с другими частями приложения. Скриншоты в этом помогают слабо.
В следующем посте покажу, какой инструмент сейчас пробую для решения этой проблемы.
👍6
Продолжение предыдущего поста про Figma и реальный UI
Сейчас делаю инструмент, который позволяет увидеть всё флоу приложения.
В идеале это должно работать так:
— подключаешь плагин
— сразу видишь весь граф приложения
Но прийти к такому непросто. Пока приходится вручную размечать переходы между экранами. Даже это уже позволяет довольно полно увидеть картину.
Интересно, у вас такая проблема тоже есть?
Или это я просто слишком часто попадаю в проекты, где Figma и приложение живут разной жизнью?
Сейчас делаю инструмент, который позволяет увидеть всё флоу приложения.
В идеале это должно работать так:
— подключаешь плагин
— сразу видишь весь граф приложения
Но прийти к такому непросто. Пока приходится вручную размечать переходы между экранами. Даже это уже позволяет довольно полно увидеть картину.
Интересно, у вас такая проблема тоже есть?
Или это я просто слишком часто попадаю в проекты, где Figma и приложение живут разной жизнью?
👍6
This media is not supported in your browser
VIEW IN TELEGRAM
🖍 App Graph — быстрая навигация
Тот самый инструмент для просмотра графа приложения сделал в виде плагина для Android Studio.
Одна из удобных возможностей: видишь экран → нажимаешь
Получается своего рода preview на максималках.
Была идея переиспользовать возможности Compose Preview. Но, немного покопавшись в коде Android Studio, стало понятно, что Preview очень сильно завязан на внутренности IDE и использовать его извне почти нереально. По крайней мере пока не нашел способа.
Поэтому текущее решение основано на screenshot-тестах, приправлено KSP и небольшой порцией магии.
❓Как думаете, может быть полезно в работе?
Тот самый инструмент для просмотра графа приложения сделал в виде плагина для Android Studio.
Одна из удобных возможностей: видишь экран → нажимаешь
View source → (почти) сразу открывается код.Получается своего рода preview на максималках.
Была идея переиспользовать возможности Compose Preview. Но, немного покопавшись в коде Android Studio, стало понятно, что Preview очень сильно завязан на внутренности IDE и использовать его извне почти нереально. По крайней мере пока не нашел способа.
Поэтому текущее решение основано на screenshot-тестах, приправлено KSP и небольшой порцией магии.
❓Как думаете, может быть полезно в работе?
🔥4👍2👏1
🌠 Создание иконки для мобильного приложения. Все способы.
Пришло время делать иконку. Как лучше это сделать? Есть несколько способов разной степени безумия:
1. Android Studio (Android) и Icon Composer (iOS)
✅ нативно
✅ легко
✅ гибко
✅ поддерживаются последние фичи Android и iOS: monochrome, liquid glass
✅ бесплатно
❌ два совершенно непохожих инструмента
❌ нужно делать одно и то же дважды — просто потому что так исторически сложилось
======
2. IconKitchen
https://icon.kitchen/
Один инструмент для Android, iOS и Web сразу. Удобно, если не хочется переключаться между экосистемами.
✅ гибко
✅ легко
✅ есть дополнительные возможности по сравнению с нативными инструментами
✅ поддерживается Android, iOS, Web
✅ бесплатно
❌ не поддержаны некоторые свежие фичи (те же monochrome и liquid glass)
======
3. AI Image generation
✅ весело
✅ результат всегда неожиданный (это плюс, я так решил)
❌ бесполезно
❌ вы потратите лимиты раньше, чем получите хороший набор иконок
======
4. Нанять креативное агентство
✅ работают профессионалы
✅ у них есть Figma и уверенный взгляд
✅ всё сделают за вас
❌ ещё одна встреча в календаре
❌ дорого. очень. дорого.
======
5. Использовать фотографию кота
✅ оригинально
✅ кот не против
✅ плюс к CTR в сторах
❌ фотосессия кота займёт 80% времени проекта
---
Итого: я использую IconKitchen, когда хочу сделать быстро и сам. Android Studio — если нужно сделать правильно
Пришло время делать иконку. Как лучше это сделать? Есть несколько способов разной степени безумия:
1. Android Studio (Android) и Icon Composer (iOS)
✅ нативно
✅ легко
✅ гибко
✅ поддерживаются последние фичи Android и iOS: monochrome, liquid glass
✅ бесплатно
❌ два совершенно непохожих инструмента
❌ нужно делать одно и то же дважды — просто потому что так исторически сложилось
======
2. IconKitchen
https://icon.kitchen/
Один инструмент для Android, iOS и Web сразу. Удобно, если не хочется переключаться между экосистемами.
✅ гибко
✅ легко
✅ есть дополнительные возможности по сравнению с нативными инструментами
✅ поддерживается Android, iOS, Web
✅ бесплатно
❌ не поддержаны некоторые свежие фичи (те же monochrome и liquid glass)
======
3. AI Image generation
✅ весело
✅ результат всегда неожиданный (это плюс, я так решил)
❌ бесполезно
❌ вы потратите лимиты раньше, чем получите хороший набор иконок
======
4. Нанять креативное агентство
✅ работают профессионалы
✅ у них есть Figma и уверенный взгляд
✅ всё сделают за вас
❌ ещё одна встреча в календаре
❌ дорого. очень. дорого.
======
5. Использовать фотографию кота
✅ оригинально
✅ кот не против
✅ плюс к CTR в сторах
❌ фотосессия кота займёт 80% времени проекта
---
Итого: я использую IconKitchen, когда хочу сделать быстро и сам. Android Studio — если нужно сделать правильно
icon.kitchen
IconKitchen
Cook up app icons for any platform
👍3✍1
🧙🏼♂️ Ревью Google — черная магия
Все ведь сталкивались: срочный релиз или хотфикс, а ревьюер Гугла пропал на неделю?
Так вот, у нас сломался аккаунт ревьюера. Я заметил не сразу и отправил сборку на ревью.
Новую версию аппрувнули за час. С неработающим аккаунтом.
Ахахахахха, чтоооооо?
Я, конечно, не против, но как это вообще работает?
Все ведь сталкивались: срочный релиз или хотфикс, а ревьюер Гугла пропал на неделю?
Так вот, у нас сломался аккаунт ревьюера. Я заметил не сразу и отправил сборку на ревью.
Новую версию аппрувнули за час. С неработающим аккаунтом.
Ахахахахха, чтоооооо?
Я, конечно, не против, но как это вообще работает?
😎3🤣1
🇨🇳 Приложения в Китае
Недавно был в Китае. Это, пожалуй, самое сложное путешествие из всех, но одновременно и одно из самых интересных.
До этого я бывал во Вьетнаме и Таиланде — Юго-Восточная Азия, и я ожидал чего-то похожего. Но Китай с ними даже близко не сравнить.
Чтобы просто жить и передвигаться, нужна целая пачка приложений:
— Trip.com — для бронирований (если ты иностранец)
— DeepL — переводчик, который реально справляется с китайским
— DeepSeek — потому что другие AI-чаты часто не работают (даже с VPN)
— несколько карт — часть на английском, часть на китайском
— MetroMan — удобная навигация по метро
— Alipay, WeChat — оплата и общение
— Taobao — локальный маркетплейс
— отдельные приложения для некоторых кафе
— Universal Beijing Resort — для парка аттракционов
Пользовался приложениями каждый день, и накопилась пачка наблюдений, которыми хочу поделиться 👉
Недавно был в Китае. Это, пожалуй, самое сложное путешествие из всех, но одновременно и одно из самых интересных.
До этого я бывал во Вьетнаме и Таиланде — Юго-Восточная Азия, и я ожидал чего-то похожего. Но Китай с ними даже близко не сравнить.
Чтобы просто жить и передвигаться, нужна целая пачка приложений:
— Trip.com — для бронирований (если ты иностранец)
— DeepL — переводчик, который реально справляется с китайским
— DeepSeek — потому что другие AI-чаты часто не работают (даже с VPN)
— несколько карт — часть на английском, часть на китайском
— MetroMan — удобная навигация по метро
— Alipay, WeChat — оплата и общение
— Taobao — локальный маркетплейс
— отдельные приложения для некоторых кафе
— Universal Beijing Resort — для парка аттракционов
Пользовался приложениями каждый день, и накопилась пачка наблюдений, которыми хочу поделиться 👉
🔥1
🇨🇳 Приложения в Китае. Продолжение
🖼 Look
Для меня приложения выглядят непривычно и, честно говоря, некрасиво.
Интерфейсы кажутся неровными, перегруженными, с разным стилем внутри одного приложения. Особенно это заметно в Alipay: переходишь в миниапп — и оказываешься как будто в другом продукте.
🧰 Feel
Если вы видели AliExpress или Trip.com, то, скорее всего, ловили необычный вайб.
После Alipay и Taobao это ощущение усиливается раз в десять.
Очень много информации на экране. Она упакована в маленькие блоки, каждый из которых сам по себе насыщен. Для меня это выглядит как шум. Для китайского пользователя — скорее всего, как удобная плотность информации.
Я думаю, это связано с языком. Иероглифы позволяют уместить гораздо больше смысла в маленьком пространстве.
А AliExpress и Trip.com — это уже адаптированные версии под другие рынки.
Хороший пример того, как язык влияет на продукт.
P.S. Скриншоты — из трёх разных миниаппов. Один клик — и всё поменялось
🖼 Look
Для меня приложения выглядят непривычно и, честно говоря, некрасиво.
Интерфейсы кажутся неровными, перегруженными, с разным стилем внутри одного приложения. Особенно это заметно в Alipay: переходишь в миниапп — и оказываешься как будто в другом продукте.
🧰 Feel
Если вы видели AliExpress или Trip.com, то, скорее всего, ловили необычный вайб.
После Alipay и Taobao это ощущение усиливается раз в десять.
Очень много информации на экране. Она упакована в маленькие блоки, каждый из которых сам по себе насыщен. Для меня это выглядит как шум. Для китайского пользователя — скорее всего, как удобная плотность информации.
Я думаю, это связано с языком. Иероглифы позволяют уместить гораздо больше смысла в маленьком пространстве.
А AliExpress и Trip.com — это уже адаптированные версии под другие рынки.
Хороший пример того, как язык влияет на продукт.
P.S. Скриншоты — из трёх разных миниаппов. Один клик — и всё поменялось
🔥1