Telegram Web
Dynamic App Icon
#android

Новый год уже на носу, и настанет пора новогодних иконок в приложениях 😄.

Вот вам краткая статья, которая расскажет, как поменять иконку в приложении на любую нужную вам и обратно без релиза. Можете ещё парочку добавить в приложение и будет новая фича конечно же по подписке.

Вся фича завязана на activity-alias, которые вы настраиваете в AndroidManifest и включаете и отключаете нужный вам.

Дока по алиасам тут, а вот и сама статья про добавление дополнительных иконок.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🎄52
Kotlin Flow
#kotlin

Coroutines SDK уже несколько лет в продакшен, а вместе с ними и Flow.

Порой их использование заканчивается на самых распространённых кейсах, и не все разработчики понимают, как на самом деле работает это замечательное SDK.

Астрологи объявили неделю квизов по Flow, посмотрим, как зайдёт 🤞.

В посте к вопросу будет публиковаться ответ, буду рад вашим комментариям!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍286👎1
Flow-опрос #1
#квиз

Что будет в результате выполнения этого Flow?

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*

val scope = CoroutineScope(Dispatchers.Default)

val producer = flowOf("a", "b")
.onEach { println("0:$it") }

fun main() {
scope.launch {
producer.collect { println("1:$it") }
}
scope.launch {
producer.collect { println("2:$it") }
}
}
👍26🤮5🤔4👎2
👍24💋6👎3
Flow опрос #2
#квиз

Первый опрос был выше, и внимательные подписчики заметили, что мы не блокируем функцию main() от завершения. Для упрощения — так и оставлю и в нашем примере, ведь работу этих заданий я тестирую в Kotlin Playground, где все задания успешно выполняются.

Ну и на этот раз — ответ только один.

Итак, что будет в консол
и?

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*

val coroutineScope = CoroutineScope(Dispatchers.Default)

val intFlow = flowOf(1, 2, 3)
val stringFlow = flowOf("a", "b", "c")

fun main() {
coroutineScope.launch {
intFlow
.onEach { delay(100) }
.collect { println(it) }

stringFlow
.collect { println(it) }
}
}
👍19👎5
Flow квиз #2, что будет в консоли?
Anonymous Quiz
46%
1 2 3 a b c
43%
a b c 1 2 3
10%
a 1 b 2 c 3
😱1813👍13
Хак через десериализацию
#android

Давно я не появлялся на канале: со мной всё хорошо, но дела под конец года забрали всё свободное время, а серая погода — забрала всё желание писать. Но… надо не забывать вас, поэтому возвращаюсь!

На днях попалось любопытное видео, где описывается уязвимость приложения, связанная с использованием Serializable в крупном приложении AliExpress. В видео по шагам рассказывается о том, как провернуть подобный хак, как найти подобные в своих приложениях, ну и конечно же демонстрируется сама уязвимость.
👍13🔥7🥰4
2️⃣0️⃣2️⃣4️⃣

Итак, подходит к концу ещё один год.

Уверен, что вы были молодцы и закрыли свои рабочие и личные задачи.

Кто знает, вероятно среди подписчиков есть те, кто поменял место жизни, а может быть — сменил работу, повысив свой уровень дохода.

У меня год пролетел крайне быстро: получилось закрыть не все свои цели, но главные из них успешно закрыты. И, как ни странно, они связаны с семьёй и здоровьем.

К чему я этот тост вообще вам говорю 🤓.
Насколько бы важными вам не казались бы ваши финансовые или профессиональные цели — всегда помните, что ваше здоровье, близкие люди и жизнь в согласии с собой сильно важнее.

Вот и желаю вам в новом году следовать за тем, что действительно важно! 🎄
Please open Telegram to view this post
VIEW IN TELEGRAM
🎄30💯65🍾5👍2💋1
Как вкатиться в безопасность в Android?
#security

Начнём сезон постов 2024 с полезнейшей статьёй о том, как улучшить свои навыки в безопасности Android приложений, искать уязвимости в текущих приложениях, ну и в целом вывести безопасность своих проектов на другой уровень.

В статье автор описывает:
- какие инструменты существуют: вне сомнения их больше, но для начала (да и не только) описанных более чем достаточно;
- какие книги почитать, чтобы лучше разбираться в предметной области;
- какие блоги поизучать;
- как выглядит процесс аудита приложения.

Крайне рекомендую добавить в закладки и поставить себе целью на 24 год прокачаться в этой интереснейшей области 😇.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍7👌3
HashMap для Jetpack Compose
#compose #performance

Интересная статья, где рассказывается про минусы стандартной HashMap в контектсте использования Jetpack Compose.

При использовании mutableMapOf() под капотом создаётся LinkedHashMap(), которая довольна хороша, но имеет недостаток: при каждом новом добавлении элемента создаётся LinkedHashMapEntry, из-за чего структура не очень memory-friendly.

Ну и сходу предлагается использовать другую структуру — ScatterMap, у которой подобных недостатков нет. В статье есть и замеры, и описывается главный недостаток этого подхода: структура хоть и map-based, но не наследуется от привычного нам Map, хотя и имеет подобные ему классы.

Стоит ли бежать заменять мапы на неё? Безусловно, нет: сам автор признаётся, что вам просто стоит иметь в виду, что такая структура существует и вы вспомните о ней, когда аллокация памяти будет очень критичным моментом.
🔥22🤔54👍4👎2
Ресурсы в Compose Multiplatform
#compose

Не секрет, что ни один из проектов не обходится без ресурсов, а управление ими становится только сложнее с ростом проекта. Ну и становится сложнее, когда проект написан на несколько платформ сразу.

Неплохая обзорная статья, где описываются основные изменения работы с ресурсами после свежего релиза Compose Multiplatform 1.6.0-beta01.

В целом, стало всё чуть удобнее, но буду рад, если поделитесь практическими примерами оптимизации ресурсов в подобных приложениях.
👍72🥱1
Device streaming
#androidstudio

О, тут в Android Studio Jellyfish подвезли Device streaming: фича, которая позволяет тестировать своё приложение на различных девайсах, которые находятся в дата центрах Google.

Прикольная фича, стоит обратить внимание, особенно когда выходит свежая версия Android, а на ваши устройства она ещё не прилетела. Да и специфические устройства, типа Fold тоже не каждый хочет себе покупать.

Работает аналогично обычному подключению устройства, и фича бесплатна, пока находится в alpha. Дальше всё за монету и будет учитываться время подключения к устройству.

Все детали можно почитать тут.
8🔥5👍4
RTL адаптация в Android
#android

Хорошая статья, где описывается опыт поддержки RTL-языков в Android, в том числе и на Compose.

Для тех, кто не в теме. RTL (right-to-left) — это чтение справа-налево, которое встречается в языках ближнего востока, например, арабский. LTR (left-to-right) — привычное нам чтение слева-направо.

В Android довольно неплохо поддерживаются RTL-языки, начиная с API 17, но тем не менее — есть масса кейсов, на которые стоит посмотреть при тестировании.

Был опыт адаптации приложения под RTL-языки? Вдруг вы настолько круты, что адаптировали свой pet-проект, кто знает, расскажите в комментариях. 🇦🇪
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍6🔥2
Кастомный Android Lint
#androidstudio

Интересное решение довольно популярной проблемы. На больших проектах, где уже есть сформированная кодовая база, существует целый набор кастомных функций, о которых ещё не знают вновь пришедшие разработчики.

Решить эту проблему предлагается в этой статье при помощи кастомного Android Lint Rule. В ней, описывается кейс, когда мы хотим использовать кастомную функцию вместо elvis-оператора.

Вероятно, для вашего проекта это не совсем применимо, но статья полезна прежде всего как неплохой старт в написании кастомных правил для Lint. Это прям топ инструмент, который не то, чтобы обширно используется. 🥸
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓6👍5🔥4
Getting to Know Koin Annotations
#koin #kmm

Полезная статья-справочник по аннотациям в моём любимом DI-фреймворке — Koin.

Тут и про Koin DSL, и про Constructor DSL, и про аннотации. А ещё — как всё же проверять зависимости в compile time.

Кстати, Koin отлично себя показывает в мультиплатформе. 😇

Использовали в своих проектах? Как вам?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥5🥱1
Дизайн система Android через Figma API
#design #android #ci

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

В проектах, где я работал — мы всегда приходили к какой-то дизайн системе. Иногда не совсем удачно, но чаще это очень сильно экономило время и ресурсы всех команд.
Правда, никогда не получалось сделать обновление ресурсов через CI.

Если вы хотите добавить ещё больше автоматизации в ваш проект — можно взять за основу эту статью, где ребята рассказывают свой путь, чтобы подружить Figma и обновление некоторых элементов дизайн-системы.
Тут и небольшой обзор текущих решений, и то, как всё это дело работает в xml и Compose. 🥸
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍5🥴2
State in your Kotlin apps
#kotlin #android

Архитектуры с Unidirectional Data Flow сейчас очень популярны в большинстве современных приложений: это отличный подход, который позволяет избежать ошибок при обновлении экрана, да и разрабатывать с этим подходом удобнее, особенно большие приложения.

К сожалению, подход не избавляет от багов на 100%, да и многие разработчики используют его не совсем корректно.

Чтобы избежать некоторых из багов, вот отличная статья, где указываются на некоторые проблемы и способы их решения. Одинаково будет полезно как новичкам, так и опытным разработчикам, ведь от ошибок не застрахованы даже профи.

Кстати, автор статьи подписан на канал, так что свои вопросы по статье можете задать в комментариях. 🤓
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍7💩7🥴21
Sync speedup в Gradle
#gradle

Вечная тема для Android-разработчиков — уменьшение времени сборки и ускорение Gradle.
Вот вам ещё одна улучшайка в копилку, сам пока не пробовал, но выглядит любопытно.

Автор обратил внимание на добавляемые репозитории в проект и решил посмотреть на то, куда уходит время при синке. Выяснилось, что много времени уходит на попытки получения зависимостей в тех репозиториях, где их нет, из-за чего sync увеличивается по времени.

Недолгий research показал, что можно добавить параметры exclusiveContent и content для каждого из репозитория, указывая там группы репозиториев.
Ещё интересный фикс — это настройка порядка репозиториев, оказывается он тоже влияет на скорость синка. Может сгодиться как быстрый фикс.

У автора получилось уменьшить время sync с почти 6 минут до 3 минут 17 секунд, что выглядит крайне круто. 🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥52
Practical Optimizations
#android #optimization

Для всех, кто любит низкоуровневые оптимизации и прочий хардкод — прекрасный доклад от Romain Guy, где он описывает целый набор оптимизаций, которые они сделали в Compose.

В целом, будет полезно всем разработчикам: можно научиться чуть лучше читать bytecode как минимум. А как максимум — сделаете крутую оптимизацию в своём проекте.

А вот тут почти то же самое, но в цикле статей, если вам так удобнее.
👍13❤‍🔥5
Kotlin: An Illustrated Guide
#kotlin

Сайт для новичков, который стоит добавить в закладки и опытным разработчикам — Dave Leeds on Kotlin.

Мне кажется, один из самых понятных и удобных гайдов по Kotlin, который я когда-либо видел. Примеры, забавные иллюстрации, простые примеры кода. Даже если вы знаете все темы — имеет смысл перечитать, ведь не всегда мы можем объяснить всё на пальцах так, чтобы поняла ваша бабушка.
А если вы новичок — можете смело начать изучение с этого гайда.

Последняя глава про Generic, а скоро ожидается про Coroutine.
🔥15👍104🤮2
2025/09/11 14:48:00
Back to Top
HTML Embed Code: