Android Good Reads
3.87K subscribers
344 photos
13 videos
1 file
2K links
Самые интересные статьи, видео и новости, связанные с Android разработкой. Не больше трёх материалов в день.

Автор канала: @Lamprof

Размещение рекламы: @tanyasanovna
Download Telegram
Привет чат! Команда СберЗдоровья сейчас в поиске Middle/Middle+ Android разработчика. Это крупнейшая в России Digital Health платформа, объединяющая различные сервисы цифровой медицины.

💼Что ожидают от кандидата?
· Хорошие знания Kotlin и Android SDK;
· От 3 лет опыта;
· Опыт работы с библиотеками Kotlin Coroutines, Dagger 2;
· Знание Android Material Design Guidlines, умение работать с основными UI компонентами, опыт реализации кастомных View.

💼Что предлагают?
Удаленный режим работы (РФ), сильную команду профессионалов, увлеченных своим делом (точно будет у кого поучиться), всегда поддержат (финансово и не только), если ты захочешь посетить профильные конференции и обучение, не любят бюрократию и всегда помогают друг другу. Конечно же ДМС, компенсация спорта, курсы английского.

Можно написать прямо в телеграм рекрутеру @somereazons
И посмотреть вакансию подробнее на карьерном сайте
https://vacancy.sberhealth.ru/vacancies/3563496
Please open Telegram to view this post
VIEW IN TELEGRAM
Чеклист на сколько удобно использовать ваше приложение

Если ваше приложение растет большей частью органически, то это важный аспект, на который Google обращает внимание при ранжировании в выдаче.

🔎 Запускаем сканер и исправляем ошибки согласно рекомендациям Google
🔎 Проверяем, что у всех изображений есть contentDescription, а лучше помечаем так все важные view в приложении
Вашим приложением должно быть удобно пользоваться с внешней клавиатуры!
Тестируем Switch Access
🔊 Тестируем голосовое управление устройством. Google предоставляет приложение для управления всем девайсом, ваше приложение должно это поддерживать
🔎 Проверяем, что фокус в приложении ведет себя предсказуемо!
🔎 Проверяем как приложение работает с жестами, не конфликтуют ли системно заданные жесты с вашими кастомными свайпами
🔎 Проверяем поддержку функции цветовой слепоты. Ваше приложение может выглядеть совершенно иначе в этом режиме, а пользователь которому это необходимо включит ее, готово ваше приложение к этому или нет!
🔎 Поддержка изменения размера шрифта и увеличения интерфейса

Статистика говорит о том что пользователи устанавливают нестандартные настройки и отсутствие поддержки этого функционала у вашего приложения может повлиять на метрики и сценарии использования продукта.
Performance In Jetpack Compose — Stability & Immutability

Рассматриваем на примере, как найти просадки по производительности в приложении. Обычно они проявляются там, где большое количество рекомпозиций.

👉 Включаем отображение количества рекомпозиций в Layout Inspector и находим проблемное место
👉 Разбираемся, является ли проблемная функция restartable или skippable compose функцией, собрав приложение с параметром -PcomposeCompilerReports.
👉 В репорте (app_release-composables.txt) находим проблемную функцию.
👉 Автор обнаружил, что передаваемые параметры помечены как unstable, что означает, что рекомпозиция будет происходить каждый раз, даже если параметры не поменялись. Для более глубокого анализа обращаемся к репорту (app_release-classes.txt)
👉 Проблема, как это часто бывает, заключается в реализации коллекций, которые помечаются как unstable. Компилятор Compose не может быть уверен в иммутабельности этих классов и маркирует их как unstable
👉 Мы можем исправить это, добавив аннотацию @Immutable или @Stable к параметру, чтобы показать Compose компилятору, что мы уверены в иммутабельности этих реализаций

Кстати, в версии 1.6 Compose появится strong skipping mode, который может снизить количество таких проблем
Разбираем как может повлиять на вашу работу релиз стабильной Android Studio Iguana

👉 Обновление AGP до стабильной версии 8.3.0. Мы в команде уже обновили и это дало небольшой буст по скорости сборки. Рекомендую запланировать в ближайший спринт
👉 Gradle Version Catalogs стал стабильным. Я рассказывал об этом у себя в LinkedIn, как мы в прошлой компании перешли на него ради более удобного автоматического обновления зависимостей. Скорость сборки незначительно уменьшилась за счет избавления от buildSrc, но удобство и скорость обновления зависимостей выросли в разы
👉 Обновили платформу IDE до 2023.2. А что это значит? Интеграция с GitLab для ревью кода, множество визуальных изменений, так что готовьтесь к тому что привычные для вас элементы управления могли исчезнуть
👉 UI Check mode. Можно быстро проверить, как ваша вьюха выглядит на большом количестве устройств. Открываем класс с @Preview и запускаем. Возможно, будет полезно для Manual QA пройтись по всем экранам таким образом и сэкономить время на проверке дизайна для разных экранов
👉 Вы могли заметить , что на полях появится небольшая звездочка. Если ваш проект связан с Firebase, то это маркер о том, что здесь произошло падение приложения на последней версии. Очень удобно исправлять сопутствующие краши. Так же App Quality Insights интегрировали с VCS, так что проще искать коммит где был написан код ломающий приложение

А какую версию вы используете на своих проектах и почему?
Ins and Outs of Kotlin Variance

Недавно обсуждали целесообразность теоретических вопросов на собеседованиях. На практике, ни одно собеседование на позиции mid+ не обошлось без вопросов о Contravariant, Covariant и Invariant. В статье разбираем более подробно, как все это устроено на примерах, чтобы не запутаться.

А вы спрашиваете об этом на собеседованиях?
Помните, как лет 5 назад взлетел архитектурный фреймворк Moxy? Многие команды внедрили его себе, а некоторые используют до сих пор. Похоже, что аналогичным обещает быть Circuit для Jetpack Compose!
Стабильная структура, которая помогает соблюдать архитектурные принципы проекта и бить по рукам разработчиков, которые отклоняются от выбранной архитектуры.

👉 В основе лежат принципы Presenter и UDF
👉 Circuit состоит из трех компонентов: Presenter, связанный с ViewModel и содержащий бизнес-логику, UI для соответствующего слоя и Screen, обеспечивающий связь между ними и создающий пару UI/Presenter
👉 Следует учитывать, что Jetpack Compose развивается очень быстро, и зависимость от данной библиотеки означает сильную зависимость от того, как быстро Slack будет развивать ее
👉 Также имеется собственная навигация, которую вы получаете вместе с этой зависимостью

На прошлой неделе мы обсуждали, как снизить количество рекомпозиций в приложении. Грамотный подход к архитектуре часто оказывает наибольшее влияние на скорость работы вашего приложения.
Если хотите попробовать или узнать больше: https://github.com/slackhq/circuit
Большинство контента сейчас про Jetpack Compose и KMP, однако, по моему опыту, компании не очень спешно переходят на новый Compose. А как дела обстоят у вас?
Продолжаем проходить собеседования. Будет полезно если вы проводите собеседования на позицию Android или их проходите.

На этот раз мы говорим о наиболее репрезентативной, по моему мнению, части собеседования - System Design. Здесь ваш опыт будет вам большим помощником, нежели заученная наизусть теория. Грамотный подход к этому этапу поможет показать ваши сильные стороны И тот опыт, который кандидат привнесет в команду!

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

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

Перевод с дополнениями: https://github.com/iartr/mobile-system-design
Ну а вслед за System Design идет обычно Behavioral Interview. Посмотреть как это происходит со стороны интервьюера и быть готовым самому ⬇️
Советы по проведению behavioral interview

Behavioral interview – один из этапов собеседования, на котором вы пытаетесь понять, как кандидат будет вести себя в различных ситуациях, обсуждая его предыдущий схожий опыт. Этот этап часто критикуют (хотя какое вообще собеседование не критикуют), потому что вопросы всегда довольно типичны, ответы на них можно продумать заранее, и реалистичной оценки такой подход может не дать. В статье приводится несколько довольно дельных советов, как проводить поведенческое интервью не для галочки, а получить от него пользу:

👉К интервью надо готовиться. Недостаточно просто решить, что вы спросите что-то вроде "Как вы в последний раз работали с лоу перформером". Нужно продумать, как выглядят хорошие и плохие примеры ответов, какие уточняющие вопросы вам надо задавать.
👉Определитесь заранее, какие конкретно навыки вы хотите проверить, и сфокусируйтесь буквально на парочке. Лучше хорошо прокопать их, чем пройтись по верхам сразу по всему, и ничего не понять.
👉Во время обсуждения кейса закапывайтесь в как можно большие детали, это поможет пробиться через социально-одобряемую оболочку и добраться до сути истории. Можно спросить про конкретный таймлайн событий кейса, про его развитие спустя месяц после окончания истории, про подход к оценке результата своих действий.

На скриншотах – пример такого интервью и набор "желтых" сигналов, которые могут говорить о том, что кандидат вам не очень подойдет.
Если для тестирования XML мы привыкли обращаться по R.id.* к элементу или искать по значению, хранимому во view, то для Jetpack Compose не всё так однозначно. Большинство использует modifier.testTag("Android Good Reads"), однако, существуют альтернативы, чтобы не загромождать ваш код тегами:

👉 Поиск через contentDescription элемента
👉 Использование label у Modifier.clickable или Modifier.semantics
👉 У Modifier.semantics также есть stateDescription, через который можно задать описание для каждого состояния
👉 Использование параметра role у Modifier.toggleable

В итоге, с одной стороны, мы получаем меньше обслуживающего кода, а с другой стороны, размывается ответственность, когда элемент отвечает и за всплывающую подсказку и за то как у вас отработают тесты. Решать вам, как поступать, но главное - пишите тесты!
Публикуем KMP библиотеку

Если вы уже вынесли часть проекта в модули, а эти модули используются разными командами, не удобнее ли будет подключать их как внешние зависимости, а не как Git-submodules?

👉 Публикация полностью конфигурируется в Gradle
👉 Автоматическая раскатка с помощью GitHub Runner, но все шаги — это вызовы Gradle функций, без проблем может быть адаптировано хоть к Jenkins, хоть к вашей внутренней системе на скриптах
👉 Библиотеку можно поместить в приватный артифакторий с доступом по логину и паролю.

В статье пример с Sonatype, но вы можете проделать то же самое и с публикацией в ваш внутренний артифакторий или завести себе облачный
Что можно сделать сегодня вечером после релиза? Правильно! Провести маленький рефакторинг проекта.

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

🤜 В меню Android Studio ищем Refactor > Remove Unused Resources. Это позволит удалить лишние drawable. Этот процесс аналогичен shrinkResources, который выполняется во время сборки
🤜 Удаляем неиспользуемые классы и переменные. Code > Analyze Code > Run Inspection by Name > Unused Symbol
🤜 Там же выбираем Unused Library, import ...

Хотя эти действия не окажут существенного влияния на скорость сборки и размер APK или AAB, приятно работать в чистом проекте, который собирается на несколько секунд быстрее, чем на прошлой неделе, не так ли?
Привет! Это Podlodka Crew, организатор онлайн IT-конференций.
25 марта стартует новый сезон по Android-разработке с темой «Оптимизация UI».

🟢 Попробуем использовать интегральные метрики производительности UI вместе с Павлом Воробкаловым из Яндекс. Наконец-то можно заменить тысячи метрик одной интегральной. Расскажем, как это делать и какие метрики из Web-разработки можно использовать для Android. Обучимся рассчитывать метрики с помощью Mobile Velocity Index.
🟢 Узнаем, как увеличивать производительность приложения с помощью Tracer. Создатель Tracer Кирилл Попов из VK в формате интервью ответит на вопросы об устройстве этого инструмента, объяснит суть и пользу профилирования приложений в проде.
🟢 Обсудим лучшие практики оптимизации Compose вместе с Антоном Хорошкевичем из Авито. Вместе рассмотрим основные аспекты производительности Compose на реальных кейсах. Научимся писать код так, чтобы не нарваться на проблемы.
🟢 Попрактикуемся в использовании дополненной реальности в Android-разработке на примере Додо пиццы. Василий Галузин из Dodo engineering расскажет про возможности и производительность AR.

Билеты уже на сайте:
https://podlodka.io/droidcrew

Поспеши забрать свой, чтобы досконально разобраться в производительности UI приложений. 📱
Please open Telegram to view this post
VIEW IN TELEGRAM
Android Studio Preview

Следующим маскотом будет Koala. Уже вышла версия Canary 2, а вместе с ней и alpha02 Android Gradle Plugin
Опрос показал, что есть интерес к статьям по Jetpack Compose. Разберем структуру Composable на трех уровнях, погружаясь все глубже

1️⃣ Enter → Recompose → Leave. C точки зрения разработчика, который использует Compose просто для верстки интерфейса без необходимости погружаться в детали реализации

2️⃣ Размещение и отрисовка элементов на экране. В какой последовательности и какой жизненный цикл

3️⃣ Уровень компилятора. Увидим во что превращается весь синтаксический сахар и как под капотом происходит рекомпозиция

Сама статья использует другой цикл статей, более полный и с примерами. Рекомендую почитать и его тоже
Please open Telegram to view this post
VIEW IN TELEGRAM
Разбираемся в шифровании в Android в трех частях. По моему мнению это максимум того, что может пригодиться в работе на позиции Android разработчика

🦾 База Рассмотрим различные способы шифрования и хеширования данных, работающие в Android

🦾 Применяем базу Узнаем, как создать цепочку шифрования и как это работает под капотом

🦾 Прикладное использование в Android Keystore

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