Android Live 🤖
5.8K subscribers
49 photos
763 links
Самые свежие новости, новинки и тренды Android от практикующего разработчика.


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

По рекламе: @ek_gorshkova
Download Telegram
Android-шрифты
#android

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

Если у вас есть дизайнеры, которые работают с Figma, то вы могли заметить, что высота строк там и в Android — отличается. Из-за чего одни и те же строки могут выглядеть совершенно по-разному и pixel-perfect дизайна не получится. 🥲

Один из вариантов решения проблемы — использование параметра lineHeight, который с префиксом app работает на всех версиях Android. И вроде это аналогичное поведение, как и в Figma, но высота строки не меняется, если у вас одна строка текста.

На помощь спешат firstBaselineToTopHeight и lastBaselineToBottomHeight о которых я раньше и не слышал: они добавляю расстояние до базовой линии сверху и снизу. А это как раз то, что поможет нам сделать идеальные начертания шрифтов.

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

Для того, чтобы сделать идеальные начертания в Compose вот вам статья, где описываются необходимые для этого настройки, а тут детальнее то, что описал я.

Ну желаю и всем нам идеальных интерфейсов в проект. 🥳
Please open Telegram to view this post
VIEW IN TELEGRAM
Jetpack Glance для виджетов
#compose

Наверняка среди читателей есть разработчики, которые делали виджеты: там присутствует целый ряд ограничений, из-за чего нельзя использовать все варианты View. Да и в целом, создавать виджеты было не очень приятно.

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

Либа уже в статусе релиз-кандидата, так что самое время задуматься о том, чтобы создавать новые виджеты на ней. Можно начать с этих двух статей.
Dagger и KSP
#dagger

О, тут Dagger обновили и добавили поддержку KSP. Пока в alpha, но это прям здорово, ведь это одна из последних популярных библиотек, которая его не поддерживает.

Чуть больше деталей тут.

Уже перешли на KSP в других библиотеках?
Личный блог

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

Но если вдруг вам интересно, чем я живу помимо Android Live — меня можно найти в Telegram и Instagram*.

Сейчас в Telegram скидываю красивые виды из Чили и делюсь своими впечатлениями об этой стране 😋
Так что, буду рад обратной связи и там 👋

*соцсеть, признанная в России экстремистской 🤦
Please open Telegram to view this post
VIEW IN TELEGRAM
KSP в Android — изменения скорости
#android #dagger

На той неделе мы получили анонс Hilt + Dagger на KSP, а теперь можем посмотреть, насколько меняется скорость сборки проекта при полном переходе на него.

Автор статьи полностью перевёл небольшой проект на KSP, потом сделал пару замеров: очистку билда и инкрементальную сборку. У него получился незначительный прирост, но мне кажется, что тут важно учитывать следующие факторы:
- KSP пока в alpha для Dagger;
- сам проект для тестов небольшой, и на большем количестве модулей и кода прирост будет ощутимее;
- сама технология ещё свежая, и необходимо время для того, чтобы всё заработало в полную силу.
ResConfigs для языков
#android #optimization

Расскажу вам лишний раз о бесплатном способе, чтобы уменьшить размер вашего apk-файла. Многие о нём знают, но я часто встречал проекты, где этой настройки не было.

Дело в том, что некоторые библиотеки содержат в себе переводы на большое количество языков: то есть одна строка может быть в 50-60 интерпретациях, каждая из которых добавляет вес вашему приложению.

Чтобы посмотреть, а как у вас дела, откройте Build -> Analyze APK, откройте release сборку приложения и выберите resources.arsc. В самом низу списка будет файл strings, где наглядно в виде таблички прописаны все строковые ресурсы для каждого языка.

Чтобы убрать все эти языки — используйте свойство resConfigs в defaultConfig, где через запятую перечислите коды языков, используемые вашим приложением. Соберите релизную сборку и вы удивитесь, как много места может сжирать набор строк.

Вариант со звёздочкой: можете сделать подобную настройку только для релизных билдов при помощи:
applicationVariants.all { variant ->
if (variant.buildType.name == "release") {
variant.mergedFlavor.resourceConfigurations.addAll(
"en", "de", "es"
)
}
Только не забудьте при добавлении языка прописать их и тут 😅
Please open Telegram to view this post
VIEW IN TELEGRAM
SDK Upgrade Assistant
#android

Оказывается, пару месяцев назад появилась утилита, которая помогает быстро обновить targetSdkVersion в проекте.

Правда, нет свежего 34 SDK (но вручную уже можно обновиться), уверен, что со временем и он там появится.
Для использования надо выбрать Tools > Android SDK Upgrade Assistant, и Google советует обновлять по 1 уровню за раз.

Больше деталей можно почитать тут.
Android Studio for Platform
#androidstudio

На днях Google анонсировали Android Studio for Platform (ASfP) — версию IDE на основе AOSP при использовании Soong.

Поддерживается C++, Java и Kotlin, работает на Linux. Выглядит как важный шаг в разработке платформ, буду рад, если поделитесь своим опытом в этой теме.
Memory leaks в проде
#android #debug

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

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

Не факт, что ваша команда такая же большая, как в Lyft, однако вы сможете узнать, как вообще можно определить утечки памяти, на какие показатели при этом опираются, да и в целом, пару полезных штук точно можно взять на заметку.
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
Please open Telegram to view this post
VIEW IN TELEGRAM
Continuous Integration basics
#ci

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

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

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

Расскажите, какой CI у вас в проекте? И вообще интересна эта тема?
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
WorkManger StopReason
#android

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

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

Есть один нюанс: фича работает на Android с SDK 31+ 😇. Но это уже довольно большой набор устройств, так что продуктивного вам дебага WorkerManager.
Please open Telegram to view this post
VIEW IN 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
Android 14 🎉
#android

Итак, новая версия Android уже в production и скоро появится на Pixel, а чуть позже в этом году и на других производителях смартфонов. Жду на своём Galaxy. 🤞

Анонс и список изменений можете почитать тут, а ещё если у вас Android Studio Hedgehog и выше, то можете использовать SDK update assistance, который должен сделать всю рутину за вас.
Please open Telegram to view this post
VIEW IN TELEGRAM
Переход с 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
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
Измеряя 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
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