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

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

Размещение рекламы: @tanyasanovna
Download Telegram
Реализация кэширования с 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
Android Good Reads
Coil с поддержкой Compose Multiplatform Вышла Alpha версия Coil 3.0.0 с поддержкой Compose Multiplatform! Wasm таргет будет работать, когда выйдет Ktor с его поддержкой.
Coil(Coroutine Image Loader) поддерживает все платформы с версии 3.0.0-alpha05: Android, JVM, iOS, macOS, Javascript и WASM! Прелесть в том, что не надо под каждую платформу писать свой загрузчик, если вы используете KMP.

Пример использования и того как это выглядит можно глянуть тут
Из приятного:
👉 Контроль над размером выделяемого кэша
👉 Контроль над weak/strong ссылками. Поможет с утечками?
👉 На Android использует стандартные компоненты для загрузки, на остальных платформах собственная обертка над Skia
👉 Миграция с версии 2 выглядит не сложно
🔥21👍6
Часы. Часы? Часы!

Рекомендации по использованию сторонних фреймворков от разработчицы из Гугла. Даже если не занимаетесь поддержкой wearable девайсов, то интересно глянуть на особенности разработки. Google I/O показал много обновлений для часов!

👉 Сборник Horologist библиотек. Помогают следовать гайдлайнам гугла. Например скорлу или удостовериться что часть элементов не скрыто под скруглением часов
👉 Скриншоты для странички Google Play, чтоб заявить о поддержке часов, даже если нет идеального девайса
👉 Шрифты и Splash screen (Wow!)
👉 Основная дока
👍6🔥4
Кэширование в Android

Автор рассматривает и предлагает архитектурные решения для следующих типов кэширования:

👉 Cache Only
👉 Network Only
👉 Network First
👉 Cache First - Network Second
👉 Cache First - Network for Later
👉 Cache First - Network Once
✍️ Бонусом, кэширование через networkBoundResource

Выглядит больше как шпаргалка по проектированию кэширования приложения на этапе интервью, но схемы однозначно стоит посмотреть и, возможно, забрать к себе в команду
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥62
О создании Preview в Jetpack Compose

Как вы подкладываете и обновляете данные для @Preview? В статье предлагается:

👉 Хардкодить данные напрямую
👉 Класть все данные в обьект и подменять в процессе подстановки. А более аккуратный способ — это воспользоваться PreviewParameterProvider (Хорошо описано тут)
👉 Написать полноценный отдельный фабричный метод для описания состояния @Preview. Мне кажется что это оверинжениринг, только если вы не всецело полагаетесь на превью в работе
👉 Использование существующего state holder

У нас в команде решили для каждого UI-класса определять несколько mock() функций с основными кейсами. В итоге у нас есть базовые превью, а при переиспользовании всегда видны возможные коллизии на основных кейсах.
👍8🔥1