Koin 3.5.0
#koin #updates
Пару недель назад появилось обновление Koin — 3.5.0.
Изменений достаточно много, предлагаю пройтись по самым топовым:
- koin-bom — удобный инструмент, который позволяет обновлять весь список зависимостей Koin за 1 раз и не переживать о том, что обновлённые версии библиотек конфликтуют между собой. Удобно, и bom поддерживается для ряда других библиотек, например Firebase и его зависимостей;
- обновили Kotlin до 1.9.0, а также ряд других зависимостей: JUnit5 и Coroutines;
- K2 compiler experiment;
- добавили Сontext isolation для Ktor, да и ещё сразу несколько изменений, связанных непосредственно с Ktor.
Кроме того, есть прям целый ряд менее значительных изменений и пачка bug-фиксов. Почитать обо всех можно тут.🤓
#koin #updates
Пару недель назад появилось обновление Koin — 3.5.0.
Изменений достаточно много, предлагаю пройтись по самым топовым:
- koin-bom — удобный инструмент, который позволяет обновлять весь список зависимостей Koin за 1 раз и не переживать о том, что обновлённые версии библиотек конфликтуют между собой. Удобно, и bom поддерживается для ряда других библиотек, например Firebase и его зависимостей;
- обновили Kotlin до 1.9.0, а также ряд других зависимостей: JUnit5 и Coroutines;
- K2 compiler experiment;
- добавили Сontext isolation для Ktor, да и ещё сразу несколько изменений, связанных непосредственно с Ktor.
Кроме того, есть прям целый ряд менее значительных изменений и пачка bug-фиксов. Почитать обо всех можно тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤3💩1
WorkManger StopReason
#android
В одном из последних обновлений WorkManager была добавлена фича под названием StopReason.
Штука крайне полезная, если есть необходимость в дебаге фоновых задач, да и вообще анализе того, что происходит, если задача завершилась с ошибкой.
В чуть более поздней версии добавилась целая куча «причин»: тут и учёт Doze Mode, и App Buckets, и отмена пользователем… В общем, детальнее можно о каждой из причин почитать тут.
Есть один нюанс: фича работает на Android с SDK 31+😇 . Но это уже довольно большой набор устройств, так что продуктивного вам дебага WorkerManager.
#android
В одном из последних обновлений WorkManager была добавлена фича под названием StopReason.
Штука крайне полезная, если есть необходимость в дебаге фоновых задач, да и вообще анализе того, что происходит, если задача завершилась с ошибкой.
В чуть более поздней версии добавилась целая куча «причин»: тут и учёт Doze Mode, и App Buckets, и отмена пользователем… В общем, детальнее можно о каждой из причин почитать тут.
Есть один нюанс: фича работает на Android с SDK 31+
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤝4
Бродкасты в Runtime и Android 14
#android
Если вы вдруг решили поставить targetSDK до Android 14 (sdk 34), то обязательно перечитайте список изменений, на которые нужно обратить внимание.
Одним из неявных, но при этом вызывающих краш, изменений являются runtime-registered бродкасты.
Если раньше вы регистрировали их при помощи:
то теперь необходимо регистрировать их так:
Можно передать
Рекомендую поискать в своём проекте строку😇 .
#android
Если вы вдруг решили поставить targetSDK до Android 14 (sdk 34), то обязательно перечитайте список изменений, на которые нужно обратить внимание.
Одним из неявных, но при этом вызывающих краш, изменений являются runtime-registered бродкасты.
Если раньше вы регистрировали их при помощи:
registerReceiver(receiver, IntentFilter())то теперь необходимо регистрировать их так:
ContextCompat.registerReceiver(context, receiver, IntentFilter(), ContextCompat.RECEIVER_NOT_EXPORTED)Можно передать
RECEIVER_EXPORTED при необходимости.Рекомендую поискать в своём проекте строку
registerReceiver, потому что проект корректно собирается, никаких ошибок не появляется, но на свежем Android получите краш Please open Telegram to view this post
VIEW IN TELEGRAM
❤13😨9🤝6👍3🔥1
Android 14 🎉
#android
Итак, новая версия Android уже в production и скоро появится на Pixel, а чуть позже в этом году и на других производителях смартфонов. Жду на своём Galaxy.🤞
Анонс и список изменений можете почитать тут, а ещё если у вас Android Studio Hedgehog и выше, то можете использовать SDK update assistance, который должен сделать всю рутину за вас.
#android
Итак, новая версия Android уже в production и скоро появится на Pixel, а чуть позже в этом году и на других производителях смартфонов. Жду на своём Galaxy.
Анонс и список изменений можете почитать тут, а ещё если у вас Android Studio Hedgehog и выше, то можете использовать SDK update assistance, который должен сделать всю рутину за вас.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰10🔥4🎉3
Переход с Groovy на Kotlin
#kotlin #gradle
С релизом Android Studio Giraffe, использование Kotlin DSL вместо Groovy стал форматом по умолчанию для новых файлов и проектов.
Всячески поддерживаю: Kotlin более привычный язык программирования, он удобнее и интуитивнее. Да и писать на Groovy в IDE то ещё удовольствие, как будто в блокноте пишешь.
Если вы ещё не перешли на kts файлы, то вот хорошая, пошаговая инструкция по переходу. Описан порядок переноса файлов и разбираются типичные проблемы, которые могут возникнуть.
Осталось только переписать кастомные задачи на kts и можно закрыть задачу из тех. долга.🎉
#kotlin #gradle
С релизом Android Studio Giraffe, использование Kotlin DSL вместо Groovy стал форматом по умолчанию для новых файлов и проектов.
Всячески поддерживаю: Kotlin более привычный язык программирования, он удобнее и интуитивнее. Да и писать на Groovy в IDE то ещё удовольствие, как будто в блокноте пишешь.
Если вы ещё не перешли на kts файлы, то вот хорошая, пошаговая инструкция по переходу. Описан порядок переноса файлов и разбираются типичные проблемы, которые могут возникнуть.
Осталось только переписать кастомные задачи на kts и можно закрыть задачу из тех. долга.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍5🖕1
KMMBridge
#kmm #kotlin
Наткнулся на полезный инструмент, который поможет вам в использовании KMM между iOS и Android — KMMBridge.
Он позволяет вам компилировать Kotlin-код в Xcode Framework binaries и публиковать его в публичные или приватные репозитории. По сути, можно взять часть KMM-кода, а дальше передать его своим коллегам с iOS команды.
Мне кажется, что это поможет договориться о том, чтобы попробовать часть фичей из KMM без особых изменений в текущем проекте. А дальше, если зайдёт, заниматься более плотной интеграцией KMM.
Будет здорово, если поделитесь своим опытом внедрения KMM в своей команде в комментах.🧐
#kmm #kotlin
Наткнулся на полезный инструмент, который поможет вам в использовании KMM между iOS и Android — KMMBridge.
Он позволяет вам компилировать Kotlin-код в Xcode Framework binaries и публиковать его в публичные или приватные репозитории. По сути, можно взять часть KMM-кода, а дальше передать его своим коллегам с iOS команды.
Мне кажется, что это поможет договориться о том, чтобы попробовать часть фичей из KMM без особых изменений в текущем проекте. А дальше, если зайдёт, заниматься более плотной интеграцией KMM.
Будет здорово, если поделитесь своим опытом внедрения KMM в своей команде в комментах.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5💩4
Измеряя Sequences
#android #kotlin
Я тут немного выпал из написания блога, но на то у меня была уважительная причинанативная интеграция 😄 , но вот я постепенно возвращаюсь и сразу с отличной инженерной статьёй про использование
На практике — далеко не все разработчики понимают, когда стоит использовать
Автор статьи решил провести подробное исследование, где провёл ряд экспериментов про то, когда какой тип коллекции подходит больше, как вообще
Краткая выжимка: гарантированный проигрыш при использовании
Ссылка на статью и аналогичный доклад.
#android #kotlin
Я тут немного выпал из написания блога, но на то у меня была уважительная причина
Sequence.На практике — далеко не все разработчики понимают, когда стоит использовать
List, а когда Sequence. Многие придерживаются правила, что Sequence стоит использовать, если есть 3+ преобразования этой самой коллекции, но не стоит слепо верить этому правилу.Автор статьи решил провести подробное исследование, где провёл ряд экспериментов про то, когда какой тип коллекции подходит больше, как вообще
Sequence работают под капотом, а ещё как работает целый ряд всем нам известных методов.Краткая выжимка: гарантированный проигрыш при использовании
Sequence вы получите, если будете использовать их с sort, flatten, plus, а небольшой проигрыш — с distinct и chunked. Ссылка на статью и аналогичный доклад.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍6🔥3
Kotlin Multiplatform is Stable
#kotlin #kmp
Отличные новости: Kotlin Multiplatform добрался до стабильной версии!🎉
Пора ещё раз сходить к команде iOS и предложить им попробовать KMP в своём проекте.
Ещё ребята из JetBrains рассказали о планах, связанных с Compose Multiplatform: он стабилен для Android и Desktop, но пока что в alpha для iOS и в экспериментальной стадии для Web (Wasm). В 2024 году нас ждёт beta для iOS, а также alpha для Wasm.
Ждём новых новостей, а также поздравления ребятам из JetBrains!
#kotlin #kmp
Отличные новости: Kotlin Multiplatform добрался до стабильной версии!
Пора ещё раз сходить к команде iOS и предложить им попробовать KMP в своём проекте.
Ещё ребята из JetBrains рассказали о планах, связанных с Compose Multiplatform: он стабилен для Android и Desktop, но пока что в alpha для iOS и в экспериментальной стадии для Web (Wasm). В 2024 году нас ждёт beta для iOS, а также alpha для Wasm.
Ждём новых новостей, а также поздравления ребятам из JetBrains!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥35❤5👍1🎉1💩1
Repair IDE feature
#androidstudio
Возможно вы, как и я, не замечали фичу, которая не так давно появилась в Android Studio и IntelliJ IDEA — Repair IDE.
Иногда бывают ситуации, что Android Studio начинает бажить: отказывается собирать проект, хотя с кодом всё в порядке, ругается на кэш и т.д. У меня такое частенько бывает при переключении веток в Git.
Решение в лоб — сделать File -> Invalidate Caches с рестартом. Но вот теперь есть опция Repair IDE, которая призвана помочь по шагам восстановить состояние вашей IDE.
Я попробовал, из 4 кейсов сработало только в 2😅 . В конце всё равно предложила сделать Invalidate Caches.
Теперь у вас есть +1 фича в арсенале, вдруг будет полезна. Детальнее можно почитать тут.
#androidstudio
Возможно вы, как и я, не замечали фичу, которая не так давно появилась в Android Studio и IntelliJ IDEA — Repair IDE.
Иногда бывают ситуации, что Android Studio начинает бажить: отказывается собирать проект, хотя с кодом всё в порядке, ругается на кэш и т.д. У меня такое частенько бывает при переключении веток в Git.
Решение в лоб — сделать File -> Invalidate Caches с рестартом. Но вот теперь есть опция Repair IDE, которая призвана помочь по шагам восстановить состояние вашей IDE.
Я попробовал, из 4 кейсов сработало только в 2
Теперь у вас есть +1 фича в арсенале, вдруг будет полезна. Детальнее можно почитать тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰17👍13🤯2😁1
Политики безопасности приложений в Google Play
#google
Не так давно Google добавили новые требования для публикации приложений в стор. Цель — сделать приложения ещё более качественными и безопасными.
Что нас ждёт?
1️⃣ Всем разработчикам, в том числе и с текущими аккаунтами, надо пройти форму верификации. Для текущих разработчиков есть возможность выбрать дедлайн до 29 февраля 2024 года, если не выбрать, то Google сделает это за вас.
2️⃣ При публикации приложений новыми разработчиками, придётся протестировать своё приложение с 20+ людьми и в течении минимум 2 недель до основного релиза. Думаю, что для небольших разработчиков публиковаться станет сложнее.
3️⃣ Теперь будет больше времени уделяться оценке приложению, чтобы проверить его на предмет абьюза технологии: проще говоря, проверяется, что приложение делает то, что заявляет
Подробнее можно почитать тут, а также не забывайте выбрать дедлайн для своих текущих приложений!
Что думаете про нововведения?
Не так давно Google добавили новые требования для публикации приложений в стор. Цель — сделать приложения ещё более качественными и безопасными.
Что нас ждёт?
1️⃣ Всем разработчикам, в том числе и с текущими аккаунтами, надо пройти форму верификации. Для текущих разработчиков есть возможность выбрать дедлайн до 29 февраля 2024 года, если не выбрать, то Google сделает это за вас.
2️⃣ При публикации приложений новыми разработчиками, придётся протестировать своё приложение с 20+ людьми и в течении минимум 2 недель до основного релиза. Думаю, что для небольших разработчиков публиковаться станет сложнее.
3️⃣ Теперь будет больше времени уделяться оценке приложению, чтобы проверить его на предмет абьюза технологии: проще говоря, проверяется, что приложение делает то, что заявляет
Подробнее можно почитать тут, а также не забывайте выбрать дедлайн для своих текущих приложений!
Что думаете про нововведения?
🤬17❤5🤔4
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
#квиз
Что будет в результате выполнения этого
#квиз
Что будет в результате выполнения этого
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
Что будет в консоли?
Anonymous Quiz
25%
0:a 0:b 1:a 1:b 2:a 2:b
68%
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