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

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

Размещение рекламы: @tanyasanovna
Download Telegram
Советы по проведению 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 активно инвестирует в свои библиотеки для безопасного хранения данных, так что вам не придется писать каждый алгоритм вручную.
А вот и первые результаты интеграции k2 compiler. Пока что только для автокомплита, рефакторинга и навигации по проекту, но уже значительно быстрее! Впечатляет?

До Android Studio доберется не скоро. Альфа версия будет в IDE 2024.1, а наша с вами Canary недельной давности основана на IDE 2023.2
Занимаетесь разработкой SDK, а не приложения? А если еще и поддерживаете семейство библиотек (например Firebase, Compose, Kotlin ...), то наличие BOM практически обязательно, чтобы те, кто пользуется ваш продуктом, не сталкивались с проблемами совместимости.

Если кратко:

👉 Все модули стягиваются в SDK в один проект, например, с помощью Git submodule
👉 Создается еще один модуль *-bom , который не будет содержать кода
👉 Внутрь модуля кладется pom-файл со списком зависимостей и исключениями зависимостей
👉 А дальше релиз зависимостей как мы делали с вами тут

Как это будет выглядеть:

implementation(project.dependencies.platform("com.goodreads.android:bom:1.0.0"))
implementation("com.goodreads.android:library1")
implementation("com.goodreads.android:library2")
Небольшой гайд от котлин команды по выбору кроcсплатформенного фреймворка и про медленно, но растущую их популярность.
Неплохая первоапрельская шутка про котлин.
Журнальчик https://kotlintoday.com/

Это мы читаем 😁
🤔 Если с opensource зависимостями более-менее понятно, как заглянуть в реализацию функции, то с androidx не все так очевидно. Android Studio не всегда догружает исходники, да и зачем? Если можно быстро глянуть нужный класс или пакет в браузере с помощью гугловского инструмента Code Search
Please open Telegram to view this post
VIEW IN TELEGRAM
Продолжаем разбирать прикладные вещи, которые могут помочь на собеседовании и в работе:

Паттерн декоратор Динамически добавляем функциональности классу, оборачивая его в нужную обертку. Хорошая замена наследованию

Паттерн мост Разделяем класс на две отдельные иерархии — абстракцию и реализацию

В целом, касательно паттернов, особенно если готовитесь к собеседованию, можно подглядеть тут. Несмотря на отсутствие примеров на Kotlin, псевдокод и визуализация находятся на высоком уровне
И еще 1 паттерн - делегирование. Cайт-учебник наполнен комиксами, объясняющий паттерны человеческим языком. Автор делает упор на паттерн в целом и делегирование свойств класса. Про делегирование свойств объекта неплохо расписано тут

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

Отдельные анимации для элементов LazyList уже скоро! Свеже-смерженный PR

Как это будет? Заменили модификатор Modifier.animateItemPlacement() на Modifier.animateItem(). Прошлый теперь помечен Deprecated, а новый поддерживает все три типа анимаций: Появление, Удаление, Перемещение.

Как искать в исходниках стандартных библиотек писал тут
Please open Telegram to view this post
VIEW IN TELEGRAM
Пошаговая эволюция Android с 1 по 14