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


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

Рекламу не размещаю
Download Telegram
Как у вас устроена документация?
#вопрос

А поделитесь своими знаниями о ведении документации:

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

Сейчас пытаюсь выстроить процесс создания документации: остановился на Obsidian как инструменте для сохранения знаний.
Notion кажется слишком неудобным для большого количества информации, ну и плюс — нет поддержки Markdown, если захочется перейти в другой сервис. Но, возможно, у вас есть больше аргументов в его пользу.

Буду ряд любой информации по топику, в будущем обязательно поделюсь с вами наработками. 🤓
Please open Telegram to view this post
VIEW IN TELEGRAM
14
Оптимизации Compose
#compose

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

Тут и про оптимизацию пропусков в Composable-функциях, и про то, что делать при долгих вычислениях при рекомпозиции, а также куча ссылок о том, как писать свои Compose-layouts. Ну и для каждого кейса есть свой пример с кодом. 👌

Ссылка на статью тут.
🔥15👍6
Android Studio Templates
#android

Полезная статья, где описаны базовые шаблоны для работы в Android Studio, а ещё — есть целый набор кастомных, но полезных шаблонов. Сам я редко использую эту фичу, хотя думаю стоит не забывать ей пользоваться, ведь это экономит время на бойлерплейт.

Например:

👉 void, fun0, fun1, fun2 — создаёт функцию с необходимым нам набором параметров;

👉 ifn / inn — то же самое, что и if ( … == null) / if ( … != null);

👉 comp — создаёт Compose-функцию;

Авто предлагает создать ещё целый ряд шаблонов: HiltViewModel, MutableStateFlow и StateFlow, Binds в Hilt... в общем, всё это здорово сэкономит наше свами время.
👍203
Утечки памяти в Android
#android

Довольно распространённой ошибкой при написании Android-приложений является OutOfMemoryError. Уверен, что любой (ну или почти любой) разработчик сталкивался с этой ошибкой. Одной из причин возникновения этой проблемы являются утечки памяти.

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

В этом вам поможет эта замечательная статья. Автор рассказывает про то, как:
👉 работает Garbage Collector, и какие знания нужны нам, чтобы не допускать утечек;
👉 что такое многопоточные утечки памяти, и снова как их не допустить);
👉 про файловые дескрипторы, и какие утечки они могут вызвать.

Ждём вторую часть, где будет больше информации о практических инструментах, которые помогут бороться с утечками. 🤓
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23
Пишем свой Main Loop в Android
#android

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

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

Всячески рекомендую, чтобы, наконец, разобраться с этой темой и не оплошать на собеседовании. 🤞
Please open Telegram to view this post
VIEW IN TELEGRAM
👍195🔥2👏1🤩1
Android 14 Beta 5
#android

Вчера вышла 5 beta версия свеженького Android. Beta означает, что API уже стабилизированы и можно смело проверять работу приложения. 💪️️️️️️ Есть несколько вещей на которые стоит обратить внимание:

👉 если в приложении есть доступ к фото и видео, то проверьте, обрабатываете ли вы READ_MEDIA_VISUAL_USER_SELECTED: теперь пользователь может давать частичное разрешение к своим фото и видео. Ну или используйте PhotoPicker, хорошая штука.

👉 если вы вдруг использовали Notification.Builder.setFullScreenIntent, то теперь не сможете, так как Google уберёт это разрешение для всех приложений, кроме звонков и будильников. Это тип оповещения, который используется для очень важных сообщений, и на практике не встречал приложений, которые этим злоупотребляют.

👉 есть изменения в non-dismissable notifications: теперь пользователь может их смахнуть, исключения составляют только кнопки Clear all и заблокированный смартфон.

👉 есть изменения в разрешении SCHEDULE_EXACT_ALARM, которое теперь не предоставляется по умолчанию. Будет полезно изучить best practices, если вы используете exact alarms.

👉 приложения теперь могут убивать только собственные background-процессы.

👉 теперь из системы поддерживается нелинейное скалирование текста до 200%. Думаю, что ничего не должно измениться, если вы использовали sp, но на всякий случай стоит пересмотреть layouts.

Теперь ждём финальной сборочки Android 14, она совсем рядом. 🙃
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102
Улучшение времени запуска приложения
#android

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

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

Ну и для мотивации — две статьи с опытом применения целого ряда инструментов, чтобы улучшить время запуска.
Тут ребята из Dodo описывают процесс повышения скорости запуска одного из своих приложений на 20%, а тут похожий опыт компании Mercado Libre (довольно крупный стартап Латинской Америки).
🔥12😁31
Хендбук с алгоритмами
#algorithms

Тут на глаза попался отличный учебник от Яндекса по основам алгоритмов.
Если вы плаваете в этой теме — рекомендую пройти с самого начала. Беглый обзор показал, что объясняется весьма понятно, даже если вы совсем ничего не понимаете или пропускали этот предмет в вузе.

За основу взят этот ресурс, ну и плюс добавлена масса практических заданий и примеров. Сохраняйте в закладки, а лучше начинайте изучать сразу, чтобы проходить специфические собеседования без запинок. 🙃
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27💩9
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
Jetpack Glance для виджетов
#compose

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

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

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

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

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

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

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

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

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

*соцсеть, признанная в России экстремистской 🤦
Please open Telegram to view this post
VIEW IN TELEGRAM
8🐳3👍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.mergedFlavor.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
Android Studio for Platform
#androidstudio

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

Поддерживается C++, Java и Kotlin, работает на Linux. Выглядит как важный шаг в разработке платформ, буду рад, если поделитесь своим опытом в этой теме.
🔥71
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