ch
Feedback
Android Live 🤖

Android Live 🤖

前往频道在 Telegram

Самые свежие новости, новинки и тренды Android от практикующего разработчика. Автор: @al_gorshkov, Чат: @android_live_chat Личный блог: @al_gorshkov_blog Рекламу не размещаю

显示更多
5 147
订阅者
-124 小时
+17
-1030
帖子存档
KSP в Android — изменения скорости #android #dagger На той неделе мы получили анонс Hilt + Dagger на KSP, а теперь можем посм
KSP в Android — изменения скорости #android #dagger На той неделе мы получили анонс Hilt + Dagger на KSP, а теперь можем посмотреть, насколько меняется скорость сборки проекта при полном переходе на него. Автор статьи полностью перевёл небольшой проект на KSP, потом сделал пару замеров: очистку билда и инкрементальную сборку. У него получился незначительный прирост, но мне кажется, что тут важно учитывать следующие факторы: - KSP пока в alpha для Dagger; - сам проект для тестов небольшой, и на большем количестве модулей и кода прирост будет ощутимее; - сама технология ещё свежая, и необходимо время для того, чтобы всё заработало в полную силу.

Личный блог На этом канале я редко делюсь своими личными соц.сетями, да и не так чтобы много рассказываю о себе. Причина одна — считаю этот канал местом, где есть Android-разработка и просто разработка, а личная жизнь тут будет лишней. Но если вдруг вам интересно, чем я живу помимо Android Live — меня можно найти в Telegram и Instagram*. Сейчас в Telegram скидываю красивые виды из Чили и делюсь своими впечатлениями об этой стране 😋 Так что, буду рад обратной связи и там 👋 *соцсеть, признанная в России экстремистской 🤦

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

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

Android-шрифты #android Кажется, что TextView — один из самых простых инструментов, с которым никогда не бывает проблем. Но в
Android-шрифты #android Кажется, что TextView — один из самых простых инструментов, с которым никогда не бывает проблем. Но вот даже после нескольких завершённых проектов — можно откопать для себя пару неожиданных штук. Если у вас есть дизайнеры, которые работают с Figma, то вы могли заметить, что высота строк там и в Android — отличается. Из-за чего одни и те же строки могут выглядеть совершенно по-разному и pixel-perfect дизайна не получится. 🥲 Один из вариантов решения проблемы — использование параметра lineHeight, который с префиксом app работает на всех версиях Android. И вроде это аналогичное поведение, как и в Figma, но высота строки не меняется, если у вас одна строка текста. На помощь спешат firstBaselineToTopHeight и lastBaselineToBottomHeight о которых я раньше и не слышал: они добавляю расстояние до базовой линии сверху и снизу. А это как раз то, что поможет нам сделать идеальные начертания шрифтов. Также всем разработчикам рекомендую почитать краткий обзор, о том что вообще есть в Android шрифтах и какими свойствами мы можем управлять. Для того, чтобы сделать идеальные начертания в Compose вот вам статья, где описываются необходимые для этого настройки, а тут детальнее то, что описал я. Ну желаю и всем нам идеальных интерфейсов в проект. 🥳

Хендбук с алгоритмами #algorithms Тут на глаза попался отличный учебник от Яндекса по основам алгоритмов. Если вы плаваете в
Хендбук с алгоритмами #algorithms Тут на глаза попался отличный учебник от Яндекса по основам алгоритмов. Если вы плаваете в этой теме — рекомендую пройти с самого начала. Беглый обзор показал, что объясняется весьма понятно, даже если вы совсем ничего не понимаете или пропускали этот предмет в вузе. За основу взят этот ресурс, ну и плюс добавлена масса практических заданий и примеров. Сохраняйте в закладки, а лучше начинайте изучать сразу, чтобы проходить специфические собеседования без запинок. 🙃

Улучшение времени запуска приложения #android Очень важно время от времени "разгребать" технический долг в своём проекте и де
Улучшение времени запуска приложения #android Очень важно время от времени "разгребать" технический долг в своём проекте и делать технические улучшения, которые приведут к более качественной работе приложения. Если у вас кончились идеи для технических спринтов (вдруг такое произошло) или вы не задумывались о времени запуска приложения — то вот вам несколько ссылок о том, как сделать запуск вашего приложения быстрее. Начать стоит с того, чтобы посмотреть на инструменты, которые позволят проанализировать текущую ситуацию. Одним из них является Macrobenchmark, который даёт весьма полезные данные о том, как работает приложение. Ещё можно использовать Perfetto для визуализации результатов и встроить бенчмарк в процесс CI. Ну и для мотивации — две статьи с опытом применения целого ряда инструментов, чтобы улучшить время запуска. Тут ребята из Dodo описывают процесс повышения скорости запуска одного из своих приложений на 20%, а тут похожий опыт компании Mercado Libre (довольно крупный стартап Латинской Америки).

Android 14 Beta 5 #android Вчера вышла 5 beta версия свеженького Android. Beta означает, что API уже стабилизированы и можно
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, она совсем рядом. 🙃

Пишем свой Main Loop в Android #android При написании любого приложения необходимо взаимодействовать с главным потоком. К сча
Пишем свой Main Loop в Android #android При написании любого приложения необходимо взаимодействовать с главным потоком. К счастью, нам не нужно писать свой Loop для каждого приложения, мы работаем с уже готовым компонентом. Но вот вам годная статья, где автор, чтобы лучше понять принцип работы главного цикла в Android пишет свой аналог: при этом получается детальная статья, где описывается то, как работает непосредственно главный поток. Всячески рекомендую, чтобы, наконец, разобраться с этой темой и не оплошать на собеседовании. 🤞

Утечки памяти в Android #android Довольно распространённой ошибкой при написании Android-приложений является OutOfMemoryError
Утечки памяти в Android #android Довольно распространённой ошибкой при написании Android-приложений является OutOfMemoryError. Уверен, что любой (ну или почти любой) разработчик сталкивался с этой ошибкой. Одной из причин возникновения этой проблемы являются утечки памяти. Сейчас есть несколько методов, которые помогают в распознавании утечек в Android, тот же LeakCanary. Но для полного понимания необходимо знать, а как возникают утечки и на что стоит обратить внимание, чтобы не допустить их появления? В этом вам поможет эта замечательная статья. Автор рассказывает про то, как: 👉 работает Garbage Collector, и какие знания нужны нам, чтобы не допускать утечек; 👉 что такое многопоточные утечки памяти, и снова как их не допустить); 👉 про файловые дескрипторы, и какие утечки они могут вызвать. Ждём вторую часть, где будет больше информации о практических инструментах, которые помогут бороться с утечками. 🤓

Android Studio Templates #android Полезная статья, где описаны базовые шаблоны для работы в Android Studio, а ещё — есть целы
Android Studio Templates #android Полезная статья, где описаны базовые шаблоны для работы в Android Studio, а ещё — есть целый набор кастомных, но полезных шаблонов. Сам я редко использую эту фичу, хотя думаю стоит не забывать ей пользоваться, ведь это экономит время на бойлерплейт. Например: 👉 void, fun0, fun1, fun2 — создаёт функцию с необходимым нам набором параметров; 👉 ifn / inn — то же самое, что и if ( … == null) / if ( … != null); 👉 comp — создаёт Compose-функцию; Авто предлагает создать ещё целый ряд шаблонов: HiltViewModel, MutableStateFlow и StateFlow, Binds в Hilt... в общем, всё это здорово сэкономит наше свами время.

Оптимизации Compose #compose Классная статья, в которой рассказывается о полезных оптимизациях для Compose. Вполне возможно,
Оптимизации Compose #compose Классная статья, в которой рассказывается о полезных оптимизациях для Compose. Вполне возможно, что эти рекомендации помогут и вашему UI работать быстрее. Тут и про оптимизацию пропусков в Composable-функциях, и про то, что делать при долгих вычислениях при рекомпозиции, а также куча ссылок о том, как писать свои Compose-layouts. Ну и для каждого кейса есть свой пример с кодом. 👌 Ссылка на статью тут.

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

Gradle 8.x #gradle Кстати, забыл поделиться опытом по обновлению Gradle в своём основном проекте. Возможно, он будет для вас
Gradle 8.x #gradle Кстати, забыл поделиться опытом по обновлению Gradle в своём основном проекте. Возможно, он будет для вас полезен. Главной задержкой для обновления у меня было отсутствие поддержки свежей версии Gradle в Huawei-плагине. Никакой информации о том, что делать я не нашёл, но позже написал в поддержу Huawei и они создали целый раздел, где кратко описали, как обойти ограничение. Был приятно удивлён качеством поддержки. 👌 После этого, особых проблем при обновлении не было: 👉 обязательно посмотрите список изменений: довольно много флагов изменяют своё состояние, например nonFinalResIds, nonTransitiveRClass. Если вы будете использовать встроенный "мигратор" из Android Studio, то он проставит все флаги за вас (ну или почти все). 👉 если вы не перешли на enableR8.fullMode, то обязательно выключите его в properties, иначе после сборки проекта можете увидеть целый ряд непонятных крашей. 👉 собирая проект, обратите внимание на ворнинги, которые необходимо разрешить: у меня это был целый ряд новых правил в proguard. В целом, на этом всё. Теперь записал в тех.долг перейти на kapt и на нетранзитивные классы ресурсов, но об этом уже в следующий раз. 🤘

values() или entities() #kotlin В Kotlin 1.9.0 из стадии Experimental в Stable перешла функция entities(), которую можно вызы
values() или entities() #kotlin В Kotlin 1.9.0 из стадии Experimental в Stable перешла функция entities(), которую можно вызывать для любых Enum и получить список всех элементов, которые в нём объявлены. Зачем же нужна ещё одна функция, когда есть values()? На самом деле, причин сразу несколько: 1️⃣ При каждом вызове функции создаётся новый Array: это одна из известных причин "скрытых" performance-багов. 2️⃣ При работе вызывается Array<E>, который мутабелен, а также меньше подходит для работы с коллекциями, чем список. 3️⃣ Ну и ещё — сложнее писать extension-функции для Array<E> вместо стандартных List<T>. Ну а в entities() таких недостатков нет, а самое главное, что при вызове всегда используется один и тот же список и нет повторного создания. Чуть больше информации можно найти тут. Теперь вы знаете, что ответить на собеседовании, и почему стоит перейти на entities() 🤓

Давайте устроим пятничный холивар в комментах: Если бы вы сейчас писали приложение с нуля, то какой бы стек выбрали и почему?
Давайте устроим пятничный холивар в комментах: Если бы вы сейчас писали приложение с нуля, то какой бы стек выбрали и почему? - без ограничений по библиотекам и технологиям; - можно выбрать или нативную, или кроссплатформенную разработку; - если это нативная разработка, то под iOS будет отдельная команда; 😌

​​Обзор уязвимостей Positive Hack Days #security Отдельное место у меня занимают статьи, которые рассказывают о лучших практиках безопасности Android-приложений: ведь даже если приложение будет с идеальным UI-UX, но будет иметь дыры в безопасности, то вся работа может свестись на нет. 🥴 Вот вам отличный список-обзор уязвимостей с недавнего Positive Hack Days: рекомендую сделать овервью своего приложения, вдруг найдёте что-то подобное. Тут и exported=true для WebViewActivity, и проблемы в дебаг-панели, и вход без PIN-кода в приложение через виджет... в общем, есть на что обратить внимание. 👌

​​Network Inspector в Flamingo #android В Android Studio Flamingo появилась полезнейшая фича — Network Inspector. Она сильно упрощает дебаг запросов к приложению: ведь можно менять формат запроса, Body, Headers, Response... в целом, почти всё, для чего вам нужен был Charles. Небольшая статья с демо как использовать эту фичу для себя.

App Size Metrics на CI #android #ci #gradle Размер приложения — очень важная метрика, которой мы часто пренебрегаем. А если в
App Size Metrics на CI #android #ci #gradle Размер приложения — очень важная метрика, которой мы часто пренебрегаем. А если в какой-то момент размер APK начинает беспокоить, и мы заводим себе задачу в спринт, чтобы уменьшить его размер, то всё равно со временем всё возвращается обратно. Есть статистика, которая говорит, что увеличение размера apk на 6mb уменьшает количество загрузок на 1%. 🫣 В процентах кажется, что это маленькая величина, но на деле — это могут быть сотни, а то и тысячи юзеров. Хорошая статья, где рассказывается о том, как сделать размер apk меньше — тут, но впервые мне на глаза попадается плагин, который поможет контролировать размер приложения при помощи CI. Идея довольно простая: при каждом PR будет запускаться job, которая проверит разницу между последним коммитом и вашими изменениями, и напишет разницу. Это сразу поможет проверить, всё ли хорошо с добавляемыми изменениями или нет. Ну и у вас не будет теперь тех.долга для того, чтобы размер приложения уменьшать. Сплошные плюсы 🤓. Больше деталей, как всё настроить можно прочитать тут.

​​Профайлинг gradle #gradle Недавно обновлял версию Gradle до самой последней, и случайно наткнулся на инструмент, которого раньше не замечал, но который может сильно помочь в настройке Gradle. Суть в профайлинге различных конфигураций и настроек: вы указываете список тасок, которые хотите протестировать, настройки для них, сохраняете сценарии — и запускаете на своей машине или CI. В итоге за парочку прогонов сможете выбрать оптимальную конфигурацию.