Dynamic App Icon
#android
Новый год уже на носу, и настанет пора новогодних иконок в приложениях😄 .
Вот вам краткая статья, которая расскажет, как поменять иконку в приложении на любую нужную вам и обратно без релиза. Можете ещё парочку добавить в приложение и будет новая фичаконечно же по подписке .
Вся фича завязана на
Дока по алиасам тут, а вот и сама статья про добавление дополнительных иконок.
#android
Новый год уже на носу, и настанет пора новогодних иконок в приложениях
Вот вам краткая статья, которая расскажет, как поменять иконку в приложении на любую нужную вам и обратно без релиза. Можете ещё парочку добавить в приложение и будет новая фича
Вся фича завязана на
activity-alias
, которые вы настраиваете в AndroidManifest
и включаете и отключаете нужный вам. Дока по алиасам тут, а вот и сама статья про добавление дополнительных иконок.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🎄5❤2
Kotlin Flow
#kotlin
Coroutines SDK уже несколько лет в продакшен, а вместе с ними и
Порой их использование заканчивается на самых распространённых кейсах, и не все разработчики понимают, как на самом деле работает это замечательное SDK.
Астрологи объявили неделю квизов по🤞 .
В посте к вопросу будет публиковаться ответ, буду рад вашим комментариям!
#kotlin
Coroutines SDK уже несколько лет в продакшен, а вместе с ними и
Flow
. Порой их использование заканчивается на самых распространённых кейсах, и не все разработчики понимают, как на самом деле работает это замечательное SDK.
Астрологи объявили неделю квизов по
Flow
, посмотрим, как зайдёт В посте к вопросу будет публиковаться ответ, буду рад вашим комментариям!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28❤6👎1
Flow-опрос #1
#квиз
Что будет в результате выполнения этого
#квиз
Что будет в результате выполнения этого
Fl
ow?
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
Что будет в консоли?
Anonymous Quiz
25%
0:a 0:b 1:a 1:b 2:a 2:b
69%
0:a 1:a 0:b 1:b 0:a 2:a 0:b 2:b
6%
2:a 2:b 1:a 1:b 0:a 0:b
👍24💋6👎3
Flow опрос #2
#квиз
Первый опрос был выше, и внимательные подписчики заметили, что мы не блокируем функцию main() от завершения. Для упрощения — так и оставлю и в нашем примере, ведь работу этих заданий я тестирую в Kotlin Playground, где все задания успешно выполняются.
Ну и на этот раз — ответ только один.
Итак, что будет в консоли?
#квиз
Первый опрос был выше, и внимательные подписчики заметили, что мы не блокируем функцию 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
😱18❤13👍13
Хак через десериализацию
#android
Давно я не появлялся на канале: со мной всё хорошо, но дела под конец года забрали всё свободное время, а серая погода — забрала всё желание писать. Но… надо не забывать вас, поэтому возвращаюсь!
На днях попалось любопытное видео, где описывается уязвимость приложения, связанная с использованием Serializable в крупном приложении AliExpress. В видео по шагам рассказывается о том, как провернуть подобный хак, как найти подобные в своих приложениях, ну и конечно же демонстрируется сама уязвимость.
#android
Давно я не появлялся на канале: со мной всё хорошо, но дела под конец года забрали всё свободное время, а серая погода — забрала всё желание писать. Но… надо не забывать вас, поэтому возвращаюсь!
На днях попалось любопытное видео, где описывается уязвимость приложения, связанная с использованием Serializable в крупном приложении AliExpress. В видео по шагам рассказывается о том, как провернуть подобный хак, как найти подобные в своих приложениях, ну и конечно же демонстрируется сама уязвимость.
👍13🔥7🥰4
Итак, подходит к концу ещё один год.
Уверен, что вы были молодцы и закрыли свои рабочие и личные задачи.
Кто знает, вероятно среди подписчиков есть те, кто поменял место жизни, а может быть — сменил работу, повысив свой уровень дохода.
У меня год пролетел крайне быстро: получилось закрыть не все свои цели, но главные из них успешно закрыты. И, как ни странно, они связаны с семьёй и здоровьем.
К чему я этот тост вообще вам говорю
Насколько бы важными вам не казались бы ваши финансовые или профессиональные цели — всегда помните, что ваше здоровье, близкие люди и жизнь в согласии с собой сильно важнее.
Вот и желаю вам в новом году следовать за тем, что действительно важно!
Please open Telegram to view this post
VIEW IN TELEGRAM
🎄30💯6❤5🍾5👍2💋1
Как вкатиться в безопасность в Android?
#security
Начнём сезон постов 2024 с полезнейшей статьёй о том, как улучшить свои навыки в безопасности Android приложений, искать уязвимости в текущих приложениях, ну и в целом вывести безопасность своих проектов на другой уровень.
В статье автор описывает:
- какие инструменты существуют: вне сомнения их больше, но для начала (да и не только) описанных более чем достаточно;
- какие книги почитать, чтобы лучше разбираться в предметной области;
- какие блоги поизучать;
- как выглядит процесс аудита приложения.
Крайне рекомендую добавить в закладки и поставить себе целью на 24 год прокачаться в этой интереснейшей области😇 .
#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, хотя и имеет подобные ему классы.
Стоит ли бежать заменять мапы на неё? Безусловно, нет: сам автор признаётся, что вам просто стоит иметь в виду, что такая структура существует и вы вспомните о ней, когда аллокация памяти будет очень критичным моментом.
#compose #performance
Интересная статья, где рассказывается про минусы стандартной HashMap в контектсте использования Jetpack Compose.
При использовании mutableMapOf() под капотом создаётся LinkedHashMap(), которая довольна хороша, но имеет недостаток: при каждом новом добавлении элемента создаётся LinkedHashMapEntry, из-за чего структура не очень memory-friendly.
Ну и сходу предлагается использовать другую структуру — ScatterMap, у которой подобных недостатков нет. В статье есть и замеры, и описывается главный недостаток этого подхода: структура хоть и map-based, но не наследуется от привычного нам Map, хотя и имеет подобные ему классы.
Стоит ли бежать заменять мапы на неё? Безусловно, нет: сам автор признаётся, что вам просто стоит иметь в виду, что такая структура существует и вы вспомните о ней, когда аллокация памяти будет очень критичным моментом.
🔥22🤔5❤4👍4👎2
Ресурсы в Compose Multiplatform
#compose
Не секрет, что ни один из проектов не обходится без ресурсов, а управление ими становится только сложнее с ростом проекта. Ну и становится сложнее, когда проект написан на несколько платформ сразу.
Неплохая обзорная статья, где описываются основные изменения работы с ресурсами после свежего релиза Compose Multiplatform 1.6.0-beta01.
В целом, стало всё чуть удобнее, но буду рад, если поделитесь практическими примерами оптимизации ресурсов в подобных приложениях.
#compose
Не секрет, что ни один из проектов не обходится без ресурсов, а управление ими становится только сложнее с ростом проекта. Ну и становится сложнее, когда проект написан на несколько платформ сразу.
Неплохая обзорная статья, где описываются основные изменения работы с ресурсами после свежего релиза Compose Multiplatform 1.6.0-beta01.
В целом, стало всё чуть удобнее, но буду рад, если поделитесь практическими примерами оптимизации ресурсов в подобных приложениях.
👍7❤2🥱1
Device streaming
#androidstudio
О, тут в Android Studio Jellyfish подвезли Device streaming: фича, которая позволяет тестировать своё приложение на различных девайсах, которые находятся в дата центрах Google.
Прикольная фича, стоит обратить внимание, особенно когда выходит свежая версия Android, а на ваши устройства она ещё не прилетела. Да и специфические устройства, типа Fold тоже не каждый хочет себе покупать.
Работает аналогично обычному подключению устройства, и фича бесплатна, пока находится в alpha. Дальше всё за монету и будет учитываться время подключения к устройству.
Все детали можно почитать тут.
#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-проект, кто знает, расскажите в комментариях.🇦🇪
#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. Это прям топ инструмент, который не то, чтобы обширно используется.🥸
#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 отлично себя показывает в мультиплатформе.😇
Использовали в своих проектах? Как вам?
#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.🥸
#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%, да и многие разработчики используют его не совсем корректно.
Чтобы избежать некоторых из багов, вот отличная статья, где указываются на некоторые проблемы и способы их решения. Одинаково будет полезно как новичкам, так и опытным разработчикам, ведь от ошибок не застрахованы даже профи.
Кстати, автор статьи подписан на канал, так что свои вопросы по статье можете задать в комментариях.🤓
#kotlin #android
Архитектуры с Unidirectional Data Flow сейчас очень популярны в большинстве современных приложений: это отличный подход, который позволяет избежать ошибок при обновлении экрана, да и разрабатывать с этим подходом удобнее, особенно большие приложения.
К сожалению, подход не избавляет от багов на 100%, да и многие разработчики используют его не совсем корректно.
Чтобы избежать некоторых из багов, вот отличная статья, где указываются на некоторые проблемы и способы их решения. Одинаково будет полезно как новичкам, так и опытным разработчикам, ведь от ошибок не застрахованы даже профи.
Кстати, автор статьи подписан на канал, так что свои вопросы по статье можете задать в комментариях.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍7💩7🥴2❤1
Sync speedup в Gradle
#gradle
Вечная тема для Android-разработчиков — уменьшение времени сборки и ускорение Gradle.
Вот вам ещё одна улучшайка в копилку, сам пока не пробовал, но выглядит любопытно.
Автор обратил внимание на добавляемые репозитории в проект и решил посмотреть на то, куда уходит время при синке. Выяснилось, что много времени уходит на попытки получения зависимостей в тех репозиториях, где их нет, из-за чего sync увеличивается по времени.
Недолгий research показал, что можно добавить параметры exclusiveContent и content для каждого из репозитория, указывая там группы репозиториев.
Ещё интересный фикс — это настройка порядка репозиториев, оказывается он тоже влияет на скорость синка. Может сгодиться как быстрый фикс.
У автора получилось уменьшить время sync с почти 6 минут до 3 минут 17 секунд, что выглядит крайне круто.🔥
#gradle
Вечная тема для Android-разработчиков — уменьшение времени сборки и ускорение Gradle.
Вот вам ещё одна улучшайка в копилку, сам пока не пробовал, но выглядит любопытно.
Автор обратил внимание на добавляемые репозитории в проект и решил посмотреть на то, куда уходит время при синке. Выяснилось, что много времени уходит на попытки получения зависимостей в тех репозиториях, где их нет, из-за чего sync увеличивается по времени.
Недолгий research показал, что можно добавить параметры exclusiveContent и content для каждого из репозитория, указывая там группы репозиториев.
Ещё интересный фикс — это настройка порядка репозиториев, оказывается он тоже влияет на скорость синка. Может сгодиться как быстрый фикс.
У автора получилось уменьшить время sync с почти 6 минут до 3 минут 17 секунд, что выглядит крайне круто.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥5✍2
Practical Optimizations
#android #optimization
Для всех, кто любит низкоуровневые оптимизации и прочий хардкод — прекрасный доклад от Romain Guy, где он описывает целый набор оптимизаций, которые они сделали в Compose.
В целом, будет полезно всем разработчикам: можно научиться чуть лучше читать bytecode как минимум. А как максимум — сделаете крутую оптимизацию в своём проекте.
А вот тут почти то же самое, но в цикле статей, если вам так удобнее.
#android #optimization
Для всех, кто любит низкоуровневые оптимизации и прочий хардкод — прекрасный доклад от Romain Guy, где он описывает целый набор оптимизаций, которые они сделали в Compose.
В целом, будет полезно всем разработчикам: можно научиться чуть лучше читать bytecode как минимум. А как максимум — сделаете крутую оптимизацию в своём проекте.
А вот тут почти то же самое, но в цикле статей, если вам так удобнее.
👍13❤🔥5
Kotlin: An Illustrated Guide
#kotlin
Сайт для новичков, который стоит добавить в закладки и опытным разработчикам — Dave Leeds on Kotlin.
Мне кажется, один из самых понятных и удобных гайдов по Kotlin, который я когда-либо видел. Примеры, забавные иллюстрации, простые примеры кода. Даже если вы знаете все темы — имеет смысл перечитать, ведь не всегда мы можем объяснить всё на пальцах так, чтобы поняла ваша бабушка .
А если вы новичок — можете смело начать изучение с этого гайда.
Последняя глава про Generic, а скоро ожидается про Coroutine.
#kotlin
Сайт для новичков, который стоит добавить в закладки и опытным разработчикам — Dave Leeds on Kotlin.
Мне кажется, один из самых понятных и удобных гайдов по Kotlin, который я когда-либо видел. Примеры, забавные иллюстрации, простые примеры кода. Даже если вы знаете все темы — имеет смысл перечитать, ведь не всегда мы можем объяснить всё на пальцах
А если вы новичок — можете смело начать изучение с этого гайда.
Последняя глава про Generic, а скоро ожидается про Coroutine.
🔥15👍10❤4🤮2