Telegram Web
Memory leaks в проде
#android #debug

С утечками памяти при разработке нам помогают бороться некоторые из известных инструментов, таких как Android Studio Memory Profiler, LeakCanary, Perfetto.

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

Не факт, что ваша команда такая же большая, как в Lyft, однако вы сможете узнать, как вообще можно определить утечки памяти, на какие показатели при этом опираются, да и в целом, пару полезных штук точно можно взять на заметку.
👍41😈1😎1
Paging для Multiplatform
#paging #libraries

Тут androidx.paging обновился до версии 3.3 (пока что в alpha) и корневым изменением стала поддержка Kotlin Multiplatform 🥳 . Сейчас есть поддержка jvm, Android и iOS, так что для своего pet-проекта можете тянуть.

Любопытно, что свежая версия paging сделана при содействии автора этой библиотеки.

Больше деталей о свежей версии можно почитать тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
3👌1
Интересно, что Telegram выкатил поддержку Stories для каналов: не уверен, что буду этим пользоваться (а если и буду, то явно не злоупотреблять этим), но, возможно, эти голоса будут использоваться для каких-то других плюшек от Telegram позже.

Так что если у вас Premium-подписка (а проголосовать за поддержку Stories конкретным каналом могут только бояре 🤴), то буду рад вашему голосу.

Если не открывается — обновите Telegram до последней версии.
👎7👌5👍21🖕1
Continuous Integration basics
#ci

В выходной заметил, что Google выкатил (или начал выкатывать) официальный гайд по CI.

Пока полезной информации не очень много, но, думаю, что это хороший знак и говорит о том, что вскоре нас ждут какие-то улучшения процесса от Google в этом вопросе.

CI — важная и интересная штука, которая освобождает ваше время и время ваших коллег, так что крайне рекомендую автоматизировать базовые вещи: загрузку apk в Firebase для тестов, загрузку строк для переводов, запуск тестов и т.д.

Расскажите, какой CI у вас в проекте? И вообще интересна эта тема?
👍13🔥21
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-фиксов. Почитать обо всех можно тут. 🤓
Please open Telegram to view this post
VIEW IN TELEGRAM
👍143💩1
WorkManger StopReason
#android

В одном из последних обновлений WorkManager была добавлена фича под названием StopReason.

Штука крайне полезная, если есть необходимость в дебаге фоновых задач, да и вообще анализе того, что происходит, если задача завершилась с ошибкой.
В чуть более поздней версии добавилась целая куча «причин»: тут и учёт Doze Mode, и App Buckets, и отмена пользователем… В общем, детальнее можно о каждой из причин почитать тут.

Есть один нюанс: фича работает на Android с SDK 31+ 😇. Но это уже довольно большой набор устройств, так что продуктивного вам дебага WorkerManager.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤝4
Бродкасты в Runtime и Android 14
#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, который должен сделать всю рутину за вас.
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 и можно закрыть задачу из тех. долга. 🎉
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 в своей команде в комментах. 🧐
Please open Telegram to view this post
VIEW IN TELEGRAM
5💩4
Измеряя Sequences
#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!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥355👍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 фича в арсенале, вдруг будет полезна. Детальнее можно почитать тут.
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️⃣ Теперь будет больше времени уделяться оценке приложению, чтобы проверить его на предмет абьюза технологии: проще говоря, проверяется, что приложение делает то, что заявляет

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

Что думаете про нововведения?
🤬175🤔4
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
2025/08/24 10:58:18
Back to Top
HTML Embed Code: