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

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

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

До Android Studio доберется не скоро. Альфа версия будет в IDE 2024.1, а наша с вами Canary недельной давности основана на IDE 2023.2
🔥6👍4👏4
Занимаетесь разработкой 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")
👍6👎2🔥1
Небольшой гайд от котлин команды по выбору кроcсплатформенного фреймворка и про медленно, но растущую их популярность.
😐42👍2🔥1
Неплохая первоапрельская шутка про котлин.
Журнальчик https://kotlintoday.com/

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

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

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

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

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

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

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

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