Android Live 🤖
رفتن به کانال در Telegram
Самые свежие новости, новинки и тренды Android от практикующего разработчика. Автор: @al_gorshkov, Чат: @android_live_chat Личный блог: @al_gorshkov_blog Рекламу не размещаю
نمایش بیشتر5 159
مشترکین
+124 ساعت
+47 روز
-1230 روز
آرشیو پست ها
5 159
Хендбук с алгоритмами
#algorithms
Тут на глаза попался отличный учебник от Яндекса по основам алгоритмов.
Если вы плаваете в этой теме — рекомендую пройти с самого начала. Беглый обзор показал, что объясняется весьма понятно, даже если вы совсем ничего не понимаете или пропускали этот предмет в вузе.
За основу взят этот ресурс, ну и плюс добавлена масса практических заданий и примеров. Сохраняйте в закладки, а лучше начинайте изучать сразу, чтобы проходить специфические собеседования без запинок. 🙃
5 159
Улучшение времени запуска приложения
#android
Очень важно время от времени "разгребать" технический долг в своём проекте и делать технические улучшения, которые приведут к более качественной работе приложения.
Если у вас кончились идеи для технических спринтов (вдруг такое произошло) или вы не задумывались о времени запуска приложения — то вот вам несколько ссылок о том, как сделать запуск вашего приложения быстрее.
Начать стоит с того, чтобы посмотреть на инструменты, которые позволят проанализировать текущую ситуацию. Одним из них является Macrobenchmark, который даёт весьма полезные данные о том, как работает приложение. Ещё можно использовать Perfetto для визуализации результатов и встроить бенчмарк в процесс CI.
Ну и для мотивации — две статьи с опытом применения целого ряда инструментов, чтобы улучшить время запуска.
Тут ребята из Dodo описывают процесс повышения скорости запуска одного из своих приложений на 20%, а тут похожий опыт компании Mercado Libre (довольно крупный стартап Латинской Америки).
5 159
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, она совсем рядом. 🙃5 159
Пишем свой Main Loop в Android
#android
При написании любого приложения необходимо взаимодействовать с главным потоком. К счастью, нам не нужно писать свой Loop для каждого приложения, мы работаем с уже готовым компонентом.
Но вот вам годная статья, где автор, чтобы лучше понять принцип работы главного цикла в Android пишет свой аналог: при этом получается детальная статья, где описывается то, как работает непосредственно главный поток.
Всячески рекомендую, чтобы, наконец, разобраться с этой темой и не оплошать на собеседовании. 🤞
5 159
Утечки памяти в Android
#android
Довольно распространённой ошибкой при написании Android-приложений является
OutOfMemoryError. Уверен, что любой (ну или почти любой) разработчик сталкивался с этой ошибкой. Одной из причин возникновения этой проблемы являются утечки памяти.
Сейчас есть несколько методов, которые помогают в распознавании утечек в Android, тот же LeakCanary. Но для полного понимания необходимо знать, а как возникают утечки и на что стоит обратить внимание, чтобы не допустить их появления?
В этом вам поможет эта замечательная статья. Автор рассказывает про то, как:
👉 работает Garbage Collector, и какие знания нужны нам, чтобы не допускать утечек;
👉 что такое многопоточные утечки памяти, и снова как их не допустить);
👉 про файловые дескрипторы, и какие утечки они могут вызвать.
Ждём вторую часть, где будет больше информации о практических инструментах, которые помогут бороться с утечками. 🤓5 159
Android Studio Templates
#android
Полезная статья, где описаны базовые шаблоны для работы в Android Studio, а ещё — есть целый набор кастомных, но полезных шаблонов. Сам я редко использую эту фичу, хотя думаю стоит не забывать ей пользоваться, ведь это экономит время на бойлерплейт.
Например:
👉
void, fun0, fun1, fun2 — создаёт функцию с необходимым нам набором параметров;
👉 ifn / inn — то же самое, что и if ( … == null) / if ( … != null);
👉 comp — создаёт Compose-функцию;
Авто предлагает создать ещё целый ряд шаблонов: HiltViewModel, MutableStateFlow и StateFlow, Binds в Hilt... в общем, всё это здорово сэкономит наше свами время.5 159
Оптимизации Compose
#compose
Классная статья, в которой рассказывается о полезных оптимизациях для Compose.
Вполне возможно, что эти рекомендации помогут и вашему UI работать быстрее.
Тут и про оптимизацию пропусков в Composable-функциях, и про то, что делать при долгих вычислениях при рекомпозиции, а также куча ссылок о том, как писать свои Compose-layouts. Ну и для каждого кейса есть свой пример с кодом. 👌
Ссылка на статью тут.
5 159
Как у вас устроена документация?
#вопрос
А поделитесь своими знаниями о ведении документации:
👉 есть ли она у вас в проекте?
👉 какими сервисами пользуетесь для ведения и почему?
👉 как устроен процесс добавления знаний в документацию, и кто за это отвечает?
👉 полезные доклады или статьи, которые могут сильно помочь в ведении документации.
Сейчас пытаюсь выстроить процесс создания документации: остановился на Obsidian как инструменте для сохранения знаний.
Notion кажется слишком неудобным для большого количества информации, ну и плюс — нет поддержки Markdown, если захочется перейти в другой сервис. Но, возможно, у вас есть больше аргументов в его пользу.
Буду ряд любой информации по топику, в будущем обязательно поделюсь с вами наработками. 🤓
5 159
Gradle 8.x
#gradle
Кстати, забыл поделиться опытом по обновлению Gradle в своём основном проекте. Возможно, он будет для вас полезен.
Главной задержкой для обновления у меня было отсутствие поддержки свежей версии Gradle в Huawei-плагине. Никакой информации о том, что делать я не нашёл, но позже написал в поддержу Huawei и они создали целый раздел, где кратко описали, как обойти ограничение. Был приятно удивлён качеством поддержки. 👌
После этого, особых проблем при обновлении не было:
👉 обязательно посмотрите список изменений: довольно много флагов изменяют своё состояние, например
nonFinalResIds, nonTransitiveRClass. Если вы будете использовать встроенный "мигратор" из Android Studio, то он проставит все флаги за вас (ну или почти все).
👉 если вы не перешли на enableR8.fullMode, то обязательно выключите его в properties, иначе после сборки проекта можете увидеть целый ряд непонятных крашей.
👉 собирая проект, обратите внимание на ворнинги, которые необходимо разрешить: у меня это был целый ряд новых правил в proguard.
В целом, на этом всё. Теперь записал в тех.долг перейти на kapt и на нетранзитивные классы ресурсов, но об этом уже в следующий раз. 🤘5 159
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() 🤓
5 159
Давайте устроим пятничный холивар в комментах:
Если бы вы сейчас писали приложение с нуля, то какой бы стек выбрали и почему?
- без ограничений по библиотекам и технологиям;
- можно выбрать или нативную, или кроссплатформенную разработку;
- если это нативная разработка, то под iOS будет отдельная команда; 😌
5 159
Обзор уязвимостей Positive Hack Days
#security
Отдельное место у меня занимают статьи, которые рассказывают о лучших практиках безопасности Android-приложений: ведь даже если приложение будет с идеальным UI-UX, но будет иметь дыры в безопасности, то вся работа может свестись на нет. 🥴
Вот вам отличный список-обзор уязвимостей с недавнего Positive Hack Days: рекомендую сделать овервью своего приложения, вдруг найдёте что-то подобное.
Тут и
exported=true для WebViewActivity, и проблемы в дебаг-панели, и вход без PIN-кода в приложение через виджет... в общем, есть на что обратить внимание. 👌5 159
Network Inspector в Flamingo
#android
В Android Studio Flamingo появилась полезнейшая фича — Network Inspector.
Она сильно упрощает дебаг запросов к приложению: ведь можно менять формат запроса, Body, Headers, Response... в целом, почти всё, для чего вам нужен был Charles.
Небольшая статья с демо как использовать эту фичу для себя.
5 159
App Size Metrics на CI
#android #ci #gradle
Размер приложения — очень важная метрика, которой мы часто пренебрегаем. А если в какой-то момент размер APK начинает беспокоить, и мы заводим себе задачу в спринт, чтобы уменьшить его размер, то всё равно со временем всё возвращается обратно.
Есть статистика, которая говорит, что увеличение размера apk на 6mb уменьшает количество загрузок на 1%. 🫣 В процентах кажется, что это маленькая величина, но на деле — это могут быть сотни, а то и тысячи юзеров.
Хорошая статья, где рассказывается о том, как сделать размер apk меньше — тут, но впервые мне на глаза попадается плагин, который поможет контролировать размер приложения при помощи CI.
Идея довольно простая: при каждом PR будет запускаться job, которая проверит разницу между последним коммитом и вашими изменениями, и напишет разницу. Это сразу поможет проверить, всё ли хорошо с добавляемыми изменениями или нет. Ну и у вас не будет теперь тех.долга для того, чтобы размер приложения уменьшать. Сплошные плюсы 🤓.
Больше деталей, как всё настроить можно прочитать тут.
5 159
Профайлинг gradle
#gradle
Недавно обновлял версию Gradle до самой последней, и случайно наткнулся на инструмент, которого раньше не замечал, но который может сильно помочь в настройке Gradle.
Суть в профайлинге различных конфигураций и настроек: вы указываете список тасок, которые хотите протестировать, настройки для них, сохраняете сценарии — и запускаете на своей машине или CI.
В итоге за парочку прогонов сможете выбрать оптимальную конфигурацию.
5 159
Coroutines — неочевидные баги
#kotlin #android
Прочитал хорошую статью с не самыми очевидными багами при работе с Coroutines, и спешу поделиться ей с вами.
Тут рассказывается:
👉 что будет если вызвать tryEmit() при работе с
SharedFlow без дополнительной настройки replay и extraBufferCapacity;
👉 что будет с Coroutines, которые вызываются в одном repeatOnLifecycle;
👉 неприятный баг при работе с suspendCancellableCoroutine.
А какие неочевидные баги встречали вы?5 159
Подборка каналов
Мы тут объединились с админами каналов по Android и мобильной разработке и сделали папку: возможно, что на большинство каналов вы уже давно подписаны, но вдруг найдёте для себя ещё один крутой источник знаний 🧑🎓
Вот вам ссылка на папку.
5 159
Android Performance — I/O 2023
#android
Думаю все в курсе, недавно прошедшего Google I/O, где было представлено много всего интересного для Android. Однако сегодня я хочу рассказать про новые штуки для улучшения производительности приложения.
1️⃣ Обновления Baseline Profiles — они помогают заметно улучшить время старта приложения, избегая JIT-компиляции. Ребята улучшили процесс создания профилей, добавили шаблон в Android Studio, а также Baseline Profile Gradle plugin. Чтобы лучше разобраться с фичёй — вот вам codelab по теме.
2️⃣ Startup Profiles — вдогонку к предыдущему пункту фича, которая позволяет описать код, который пойдёт в primary dex file вашего приложения, за счёт чего вы уменьшите время его старта.
3️⃣ Android Studio Power Profiler будет особо полезен для приложений, которые используют камеру, GPS и другие датчики. Можно мониторить потребление ими заряда телефона, что поможет в отладке.
Подробнее о всех нововведениях можно почитать тут. 🤓
5 159
InsetsX
#compose
Небольшой плагин, который позволяет вам шустро настраивать инсеты при использовании Compose Multiplatform для Android и iOS.
Выглядит очень круто, и работает по аналогии со стандартным плагином для Android (отличается только package-name).
Ну и помните, что Compose Multiplatform для iOS пока сырой, так что тащите осторожнее.
5 159
Android Studio Hedgehog
#android
Тут пару дней назад вышла canary-версия новой Android Studio — Hedgehog 🦔. Если вдруг тут есть любители попробовать свежие IDE самостоятельно, но можете устанавливать, а для всех остальных — опишу основные новинки.
1️⃣ Визард для Baseline Profiles — любопытная фича, которая позволяет довольно сильно уменьшить время запуска приложения, и теперь можно автоматически генерировать профили для новых модулей. Что ж, будем изучать.
2️⃣ Safe Mode для IDE — возможно полезная фича для тех, кто любит экспериментировать с небезопасными плагинами и конфигурациями. Можно запускать IDE в safe mode и откатить настройки, если что-то пошло не так.
3️⃣ Embedded Layout Inspector — фича, которая позволяет проанализировать экран прямо на вашем устройстве, показать дерево компонентов и сделать процесс дебага
View ещё удобнее.
4️⃣ JVM 17 bytecode — теперь у последнего плагина Gradle таргет на JVM 17, так что обновляем свои sourceCompatibility и targetCompatibility.
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
