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


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

Рекламу не размещаю
Download Telegram
Улучшение времени запуска приложения
#android

Очень важно время от времени "разгребать" технический долг в своём проекте и делать технические улучшения, которые приведут к более качественной работе приложения.
Если у вас кончились идеи для технических спринтов (вдруг такое произошло) или вы не задумывались о времени запуска приложения — то вот вам несколько ссылок о том, как сделать запуск вашего приложения быстрее.

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

Ну и для мотивации — две статьи с опытом применения целого ряда инструментов, чтобы улучшить время запуска.
Тут ребята из Dodo описывают процесс повышения скорости запуска одного из своих приложений на 20%, а тут похожий опыт компании Mercado Libre (довольно крупный стартап Латинской Америки).
🔥12😁31
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
24👍10😱1👌1
KSP в Android — изменения скорости
#android #dagger

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

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

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

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

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

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

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

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

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

Больше деталей можно почитать тут.
🔥5👌2👍1
Memory leaks в проде
#android #debug

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

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

Не факт, что ваша команда такая же большая, как в Lyft, однако вы сможете узнать, как вообще можно определить утечки памяти, на какие показатели при этом опираются, да и в целом, пару полезных штук точно можно взять на заметку.
👍41😈1😎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
Измеряя 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