Android Live 🤖


Channel's geo and language: Russia, Russian
Category: Technologies


Самые свежие новости, новинки и тренды Android от практикующего разработчика.

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

Related channels  |  Similar channels

Channel's geo and language
Russia, Russian
Statistics
Posts filter


State in your Kotlin apps
#kotlin #android

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

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

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

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


Дизайн система Android через Figma API
#design #android #ci

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

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

Если вы хотите добавить ещё больше автоматизации в ваш проект — можно взять за основу эту статью, где ребята рассказывают свой путь, чтобы подружить Figma и обновление некоторых элементов дизайн-системы.
Тут и небольшой обзор текущих решений, и то, как всё это дело работает в xml и Compose. 🥸


Getting to Know Koin Annotations
#koin #kmm

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

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

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

Использовали в своих проектах? Как вам?

2.8k 0 58 10 22

Кастомный Android Lint
#androidstudio

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

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

Вероятно, для вашего проекта это не совсем применимо, но статья полезна прежде всего как неплохой старт в написании кастомных правил для Lint. Это прям топ инструмент, который не то, чтобы обширно используется. 🥸


RTL адаптация в Android
#android

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

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

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

Был опыт адаптации приложения под RTL-языки? Вдруг вы настолько круты, что адаптировали свой pet-проект, кто знает, расскажите в комментариях. 🇦🇪

4k 0 22 2 14

Device streaming
#androidstudio

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

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

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

Все детали можно почитать тут.


Ресурсы в Compose Multiplatform
#compose

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

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

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


HashMap для Jetpack Compose
#compose #performance

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

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

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

Стоит ли бежать заменять мапы на неё? Безусловно, нет: сам автор признаётся, что вам просто стоит иметь в виду, что такая структура существует и вы вспомните о ней, когда аллокация памяти будет очень критичным моментом.


Как вкатиться в безопасность в Android?
#security

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

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

Крайне рекомендую добавить в закладки и поставить себе целью на 24 год прокачаться в этой интереснейшей области 😇.


2️⃣0️⃣2️⃣4️⃣

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

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

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

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

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

Вот и желаю вам в новом году следовать за тем, что действительно важно! 🎄


Хак через десериализацию
#android

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

На днях попалось любопытное видео, где описывается уязвимость приложения, связанная с использованием Serializable в крупном приложении AliExpress. В видео по шагам рассказывается о том, как провернуть подобный хак, как найти подобные в своих приложениях, ну и конечно же демонстрируется сама уязвимость.


Flow квиз #2, что будет в консоли?
Poll
  •   1 2 3 a b c
  •   a b c 1 2 3
  •   a 1 b 2 c 3
841 votes


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) }
}
}


Что будет в консоли?
Poll
  •   0:a 0:b 1:a 1:b 2:a 2:b
  •   0:a 1:a 0:b 1:b 0:a 2:a 0:b 2:b
  •   2:a 2:b 1:a 1:b 0:a 0:b
811 votes


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") }
}
}


Kotlin Flow
#kotlin

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

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

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

В посте к вопросу будет публиковаться ответ, буду рад вашим комментариям!


Dynamic App Icon
#android

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

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

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

Дока по алиасам тут, а вот и сама статья про добавление дополнительных иконок.


Политики безопасности приложений в Google Play
#google

Не так давно Google добавили новые требования для публикации приложений в стор. Цель — сделать приложения ещё более качественными и безопасными.

Что нас ждёт?

1️⃣ Всем разработчикам, в том числе и с текущими аккаунтами, надо пройти форму верификации. Для текущих разработчиков есть возможность выбрать дедлайн до 29 февраля 2024 года, если не выбрать, то Google сделает это за вас.

2️⃣ При публикации приложений новыми разработчиками, придётся протестировать своё приложение с 20+ людьми и в течении минимум 2 недель до основного релиза. Думаю, что для небольших разработчиков публиковаться станет сложнее.

3️⃣ Теперь будет больше времени уделяться оценке приложению, чтобы проверить его на предмет абьюза технологии: проще говоря, проверяется, что приложение делает то, что заявляет

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

Что думаете про нововведения?


Repair IDE feature
#androidstudio

Возможно вы, как и я, не замечали фичу, которая не так давно появилась в Android Studio и IntelliJ IDEA — Repair IDE.

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

Решение в лоб — сделать File -> Invalidate Caches с рестартом. Но вот теперь есть опция Repair IDE, которая призвана помочь по шагам восстановить состояние вашей IDE.

Я попробовал, из 4 кейсов сработало только в 2 😅. В конце всё равно предложила сделать Invalidate Caches.

Теперь у вас есть +1 фича в арсенале, вдруг будет полезна. Детальнее можно почитать тут.


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!

20 last posts shown.