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

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

Размещение рекламы: @tanyasanovna
Download Telegram
Раньше, во времена XML, у нас была удобная превьюшка цветов. С приходом Jetpack Compose мы потеряли этот функционал.

Полезный плагин, который это возвращает на поля для вашего удоства! А что внутри?
👉 Превью для объектов типа Color
👉 Старый добрый color picker по клику на превью
👉 Превью для функций compositeOver, copy, convert и lerp

Библиотека свежая, поэтому не стесняйтесь оставлять issues. Исходники можно глянуть тут
👍11🔥4🎉2🤓1
Фокус как состояние: эффективный фокус-менеджмент на Android TV с Jetpack Compose.

👉 Это не стандартное решение типа Leanback или Compose for TV
👉 Основная проблема решения - фокус не является частью состояния, поэтому приходится использовать модификаторы помощи focusRequester, onFocusChanged, focusable и focusProperties
👉 Текущий фокус определен для экрана в целом
👉 Благодаря этому подходу можно легко тестировать фокус и его ожидаемое изменение
👉 Восстановление фокуса работает из коробки, так как теперь он зависит от состояния, а также становится проще отлаживать приложение

Исходя из реализации, стандартный фокус-менеджмент блокируется целиком, и подменяется реализацией через состояние. Отсюда возникают проблемы и собственные решения в списках и в иных пограничных случаях.
👍5🔥2🤔1
Продолжаем тему собеседований. Блок вопросов про многопоточность в приложении. Подойдет как для подготовки к собеседованиям, так и для использования в вопросах на собеседовании:

👉 Что такое корутины и как они связаны с потоками?
👉 Зачем вам использовать корутины?
👉 Как создать корутину и управлять ею?
👉 В чем разница между launch, async и runBlocking?
👉 Что представляет собой coroutineScope?
👉 Зачем нужны suspend функции и в чем их отличие от обычных?
👉 Как обрабатывать исключения в корутинах (кроме try-catch)?
👉 Что такое coroutineContext и coroutineDispatcher, и когда вы их используете?
👉 Как остановить выполнение корутины?

Ответы тут
Документация тут
👍12🔥61
Немного красивых замеров того как K2 ускоряет сборку. Тесты проводили над Anki-Android для чистой и инкрементальной сборки.

Как самому провести этот бенчмарк и узнать данные для вашего устройства - тут
Остальные замеры тут
🔥8👍6🥰2
Реализация кэширования с OkHttp
Ускоряем работу приложения, жертвуя возможной актуальностью данных.

👉 Кэширование API-запросов с использованием CacheControl из OkHttp помогает позволяет сохранять ответы API с заданным сроком годности, уменьшая количество API-запросов и снижая время отклика
👉 Правила кэширования могут быть установлены в зависимости от статуса интернет-соединения. Например, когда соединение активное, можно использовать кэшированные ответы за последние 30 минут, а в режиме офлайн — ответы, возраст которых составляет до 1 дня, для улучшения пользовательского опыта
👉 Механизм перехватчиков из OkHttp позволяет модифицировать HTTP-запросы и ответы, что способствует реализации правил кэширования. Функции, такие как maxAge() и maxStale(), контролируют свежесть ответов, помогая эффективно управлять кэшем

В статье приводится пример клиента, который можно прямо сейчас взять и подставить в ваш проект, чтобы сразу увидеть результат. Используете ли вы кэширование запросов в проекте?
👍7🔥3
🚀 Хорошая новость этой недели!

Jetpack Compose compiler переезжает в kotlin репозиторий

Теперь не нужно беспокоиться о совместимости compose compiler И kotlin версий. С появлением kotlin 2.0.0 они будут совпадать:
 [versions]
kotlin = "2.0.0"

[plugins]
org-jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }

// Add the Compose Compiler Gradle plugin, the version matches the Kotlin plugin
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }


А еще Kotlin 2.0.0-RC2 вышел!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍4🤔1
Огромный разбор оптимизации рекомпозиций

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

Не стоит перегружать Compose лишней логикой, ведь за удобство и простоту приходится платить
🔥10👍41
Как написать свой плагин для Android Studio?

На удивление, все довольно просто:

1) Для проекта есть специальный шаблон в IDE
2) Настраиваем gradle-файл, устанавливая версию IDE, которая поддерживается
3) Определяем действие и прикрепляем ссылку на него в конфигурацию


class MyDemoAction : AnAction() {
override fun actionPerformed(e: AnActionEvent) {
val message = "Great! You just created your first action!"
Messages.showMessageDialog(
e.project,
message,
"Android Good Reads!",
Messages.getInformationIcon()
)
}
}


5) Можно добавить интерфейс к плагину, разработанный с помощью Java Swing
6) Собираем плагин с помощью ./gradlew buildPlugin и делимся с командой своим новым плагином. Установка плагина проста: перейдите в Settings -> Plugins -> Installed Tab -> Gear Icon -> Install Plugin From Disk

"Зачем вам это?" На мой взгляд - для автоматизации рутинных действий внутри команды. Возможность запустить действие через кнопку с параметрами, а не командой в консоли, делает процесс более комфортным и простым
👍18🔥1
Новый нейминг для Android Studio! - Feature Drop

Вкратце:

Сначала будет представлено обновление на основе обновлений IntelliJ IDEA, а затем, в Feature Drop, обновление специфичное для Android.
AGP будет обновляться вместе c Feature Drop

В итоге:
Обновление AS и AGP в 2 раза чаще. Как вам?

Финальный шаблон версионирования:
<Год версии IntelliJ>.<Основная версия IntelliJ>.<Основная версия Studio>
🔥24👍8😐4👏1
Привет! Меня зовут Антон, и последние 4 месяца я пишу для вас выжимки интересных статей про Android. Кажется, пора познакомиться?

Я живу и работаю в Швеции, где мы разрабатываем приложение на KMP с Jetpack Compose сразу для обеих платформ, поэтому в выборе статей вы можете заметить больший уклон в эти технологии. Я стараюсь выбирать либо практически полезные статьи, либо интересные, а также иногда делаю разборы нововведений.

Чуть больше обо мне можно узнать тут - https://www.linkedin.com/in/akondratiuk-software-engineer

Пожалуйста, оставляйте свои реакции на постах, чтобы я мог корректировать выбор статей, что вам нравится, а что кажется не интересным!
🤝6313👏5👍4👌3🍌3👎2
Android Good Reads pinned «Привет! Меня зовут Антон, и последние 4 месяца я пишу для вас выжимки интересных статей про Android. Кажется, пора познакомиться? Я живу и работаю в Швеции, где мы разрабатываем приложение на KMP с Jetpack Compose сразу для обеих платформ, поэтому в выборе…»
Navigation Compose meet Type Safety

Начиная с версии Navigation 2.8.0-alpha08, навигация будет типо-безопасной

👉 Граф навигации собирается с использованием Kotlin DSL, XML или вручную через NavGraph, но последние изменения сосредотачиваются именно на Kotlin DSL
👉 Теперь, если вы допустите ошибку с аргументом, передаваемым в навигацию, это будет обнаружено еще на этапе компиляции. Возможности проверки в рантайме из XML становятся делом прошлого
👉 Навигация стремится оставаться отдельным компонентом, чтобы не смешиваться с остальной частью приложения и обеспечить возможность легкого перехода в случае необходимости. SOLID friendly!

🤔 Итого:
Мы получаем более простую и стабильную в использовании навигацию, но менее гибкую в настройке
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥4
Что такое нативная разработка?

Обсудим концепцию нативной разработки в контексте Android и iOS. Это понятие размылось с появлением кроссплатформенных технологий.

Исторически, нативная разработка относилась к приложениям, разработанным с использованием языков, специфичных для своей платформы (Java/Kotlin для Android и Objective-C/Swift для iOS). Однако с появлением дизайн-систем, акцент сместился с технической реализации на UI/UX. Использование родных системе компонентов предполагало что приложением может сойти за нативное?

Автор предлагает, что дизайн-системы и пользовательский опыт не определяют, является ли приложение нативным. Скорее это зависит от контекста платформы, для которой оно предназначено.

Современные мобильные фреймворки, такие как React Native и Flutter, предназначены для облегчения разработки приложений для мобильных платформ, но они работают в своих изолированных средах, требуя большого количества слоев абстракции для взаимодействия с системой, что может привести к избыточности и неэффективности в некоторых случаях. Можно ли это считать нативным подходом? Думаю, что нет

В отличие от этого, Kotlin выделяется как нативный язык благодаря своей архитектуре компилятора, позволяющей прямое взаимодействие с Java, Swift, JavaScript и WebAssembly. Встроенная интероперабельность Kotlin устраняет необходимость в промежуточном слое или собственной виртуальной машине, позволяя ему без проблем обмениваться объектами между платформами и генерировать нативный код для каждой целевой платформы. Получается, что Kotlin является нативным языком для разработки приложений на iOS тоже?

Итого:
Концепция нативности приложения относительна и зависит от контекста платформы, для которой она предназначена. В то время как дизайн-системы и пользовательский опыт важны, они не определяют, что означает быть нативным. Вместо этого способность к обмену памятью и стеком вызовов с базовой системой является ключевым критерием для нативной функциональности, а Kotlin соответствует этому критерию.
👍7🤔6🔥2
Изменения в Google Play Console

Много небольших изменений для релиз-менеджеров или отвественных за рост приложения, но с точки зрения разработки мне интересна именно эта фича! Теперь, если у вас ANR краш в SDK с которым вы ничего не можете сделать - его можно пошарить с разработчиком этого SDK
👍13🔥4
Compose и адаптивные layout!

👉 Представлены NavigationSuiteScaffold, ListDetailPaneScaffold & SupportingPaneScaffold. Для организации экранов. Посмотреть как каждый выглядит можно тут
👉 Compose для Android TV переходит в бету
👉 Смотрим на красивые виджеты с Jetpack Glance!

Сегодня ожидается чуть больше новостей, касающихся Android от Google I/O!

Изображение взято с Jetcaster, показывающее как офигенно Compose выглядит на всех Android девайсах
👍43🔥3👎1
Обновление для часов!

👉 Много обновлений для циферблатов и расширения их функциональности
👉 Watch OS 5 developer preview! - энергоэффективнее и производительнее
👉 Jetpack Compose для Wear OS расширяется и растет. Уже релиз 1.3.1
👉 Блог о том как разработка для Wear OS на Compose позволила писать меньше кода в Soundcloud
👉 Больше инструментов для взаимодействия с часами из Android Studio. В последнем фиче дропе добавили превью для Tiles и ProtoLayout. Появилась возможность подкладывать данные с датчиков для фитнес приложений
👍51🔥1
Что еще показали?

👉 Анализатор от Google по соблюдению требований безопасности: https://checks.google.com/
👉 Большой апдейт по Compose, но мы уже разбирали его
👉 Вторая бета для Android 15
😅 Android Studio Koala Feature Drop (2024.1.2) Canary 1
👉 Напомнили что Android Automotive OS все еще живет и развивается. Сегодня должен быть доклад

На следующей неделе KotlinConf, ждем больше обновлений по Kotlin оттуда!
🔥71👍1