Android Good Reads
4.09K subscribers
371 photos
16 videos
1 file
2.13K 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
💩27🔥10👍9🤮4🖕3🤔2
Чеклист на сколько удобно использовать ваше приложение

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

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

Статистика говорит о том что пользователи устанавливают нестандартные настройки и отсутствие поддержки этого функционала у вашего приложения может повлиять на метрики и сценарии использования продукта.
7🥰2👍1
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, который может снизить количество таких проблем
👍6🔥2😎1
Разбираем как может повлиять на вашу работу релиз стабильной 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, так что проще искать коммит где был написан код ломающий приложение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Хотя эти действия не окажут существенного влияния на скорость сборки и размер APK или AAB, приятно работать в чистом проекте, который собирается на несколько секунд быстрее, чем на прошлой неделе, не так ли?
👍54😁2🤔1
Привет! Это 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
🔥4🥰2💩1
Android Studio Preview

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

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

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

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

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

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

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

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

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