Android Live 🤖 – Telegram
Android Live 🤖
5.28K subscribers
52 photos
1 video
800 links
Самые свежие новости, новинки и тренды Android от практикующего разработчика.


Автор: @al_gorshkov,
Чат: @android_live_chat
Личный блог: @al_gorshkov_blog

Рекламу не размещаю
Download Telegram
Бродкасты в 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
Хак через десериализацию
#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