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
Android Developers Blog
Jetpack Compose compiler moving to the Kotlin repository
With the upcoming release of Kotlin 2.0, the Jetpack Compose a matching Compose compiler will release alongside each release of Kotlin.
Уже пробовали обновиться до Kotlin 2?
Final Results
5%
Да, уже в проде
3%
Да, но возникли проблемы, решили откатиться
75%
Нет, ждем стабильную версию
16%
Нет, не планируем обновляться
Please open Telegram to view this post
VIEW IN TELEGRAM
Как написать свой плагин для Android Studio?
На удивление, все довольно просто:
1) Для проекта есть специальный шаблон в IDE
2) Настраиваем gradle-файл, устанавливая версию IDE, которая поддерживается
3) Определяем действие и прикрепляем ссылку на него в конфигурацию
5) Можно добавить интерфейс к плагину, разработанный с помощью Java Swing
6) Собираем плагин с помощью
"Зачем вам это?" На мой взгляд - для автоматизации рутинных действий внутри команды. Возможность запустить действие через кнопку с параметрами, а не командой в консоли, делает процесс более комфортным и простым
На удивление, все довольно просто:
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"Зачем вам это?" На мой взгляд - для автоматизации рутинных действий внутри команды. Возможность запустить действие через кнопку с параметрами, а не командой в консоли, делает процесс более комфортным и простым
Новый нейминг для Android Studio! - Feature Drop
Вкратце:
Сначала будет представлено обновление на основе обновлений IntelliJ IDEA, а затем, в Feature Drop, обновление специфичное для Android.
AGP будет обновляться вместе c Feature Drop
В итоге:
Обновление AS и AGP в 2 раза чаще. Как вам?
Финальный шаблон версионирования:
Вкратце:
Сначала будет представлено обновление на основе обновлений IntelliJ IDEA, а затем, в Feature Drop, обновление специфичное для Android.
AGP будет обновляться вместе c Feature Drop
В итоге:
Обновление AS и AGP в 2 раза чаще. Как вам?
Финальный шаблон версионирования:
<Год версии IntelliJ>.<Основная версия IntelliJ>.<Основная версия Studio>
Привет! Меня зовут Антон, и последние 4 месяца я пишу для вас выжимки интересных статей про Android. Кажется, пора познакомиться?
Я живу и работаю в Швеции, где мы разрабатываем приложение на KMP с Jetpack Compose сразу для обеих платформ, поэтому в выборе статей вы можете заметить больший уклон в эти технологии. Я стараюсь выбирать либо практически полезные статьи, либо интересные, а также иногда делаю разборы нововведений.
Чуть больше обо мне можно узнать тут - https://www.linkedin.com/in/akondratiuk-software-engineer
Пожалуйста, оставляйте свои реакции на постах, чтобы я мог корректировать выбор статей, что вам нравится, а что кажется не интересным!
Я живу и работаю в Швеции, где мы разрабатываем приложение на KMP с Jetpack Compose сразу для обеих платформ, поэтому в выборе статей вы можете заметить больший уклон в эти технологии. Я стараюсь выбирать либо практически полезные статьи, либо интересные, а также иногда делаю разборы нововведений.
Чуть больше обо мне можно узнать тут - https://www.linkedin.com/in/akondratiuk-software-engineer
Пожалуйста, оставляйте свои реакции на постах, чтобы я мог корректировать выбор статей, что вам нравится, а что кажется не интересным!
Android Good Reads pinned «Привет! Меня зовут Антон, и последние 4 месяца я пишу для вас выжимки интересных статей про Android. Кажется, пора познакомиться? Я живу и работаю в Швеции, где мы разрабатываем приложение на KMP с Jetpack Compose сразу для обеих платформ, поэтому в выборе…»
Navigation Compose meet Type Safety
Начиная с версии Navigation 2.8.0-alpha08, навигация будет типо-безопасной
👉 Граф навигации собирается с использованием
👉 Теперь, если вы допустите ошибку с аргументом, передаваемым в навигацию, это будет обнаружено еще на этапе компиляции. Возможности проверки в рантайме из XML становятся делом прошлого
👉 Навигация стремится оставаться отдельным компонентом, чтобы не смешиваться с остальной частью приложения и обеспечить возможность легкого перехода в случае необходимости.SOLID friendly!
🤔 Итого:
Мы получаем более простую и стабильную в использовании навигацию, но менее гибкую в настройке
Начиная с версии Navigation 2.8.0-alpha08, навигация будет типо-безопасной
👉 Граф навигации собирается с использованием
Kotlin DSL
, XML
или вручную через NavGraph
, но последние изменения сосредотачиваются именно на Kotlin DSL
👉 Теперь, если вы допустите ошибку с аргументом, передаваемым в навигацию, это будет обнаружено еще на этапе компиляции. Возможности проверки в рантайме из XML становятся делом прошлого
👉 Навигация стремится оставаться отдельным компонентом, чтобы не смешиваться с остальной частью приложения и обеспечить возможность легкого перехода в случае необходимости.
Мы получаем более простую и стабильную в использовании навигацию, но менее гибкую в настройке
Please open Telegram to view this post
VIEW IN TELEGRAM
Medium
Navigation Compose meet Type Safety
Bringing Safe Args to Navigation Compose in Navigation 2.8.0-alpha08
Что такое нативная разработка?
Обсудим концепцию нативной разработки в контексте Android и iOS. Это понятие размылось с появлением кроссплатформенных технологий.
Исторически, нативная разработка относилась к приложениям, разработанным с использованием языков, специфичных для своей платформы (Java/Kotlin для Android и Objective-C/Swift для iOS). Однако с появлением дизайн-систем, акцент сместился с технической реализации на UI/UX. Использование родных системе компонентов предполагало что приложением может сойти за нативное?
Автор предлагает, что дизайн-системы и пользовательский опыт не определяют, является ли приложение нативным. Скорее это зависит от контекста платформы, для которой оно предназначено.
Современные мобильные фреймворки, такие как React Native и Flutter, предназначены для облегчения разработки приложений для мобильных платформ, но они работают в своих изолированных средах, требуя большого количества слоев абстракции для взаимодействия с системой, что может привести к избыточности и неэффективности в некоторых случаях. Можно ли это считать нативным подходом? Думаю, что нет
В отличие от этого, Kotlin выделяется как нативный язык благодаря своей архитектуре компилятора, позволяющей прямое взаимодействие с Java, Swift, JavaScript и WebAssembly. Встроенная интероперабельность Kotlin устраняет необходимость в промежуточном слое или собственной виртуальной машине, позволяя ему без проблем обмениваться объектами между платформами и генерировать нативный код для каждой целевой платформы. Получается, что Kotlin является нативным языком для разработки приложений на iOS тоже?
Итого:
Концепция нативности приложения относительна и зависит от контекста платформы, для которой она предназначена. В то время как дизайн-системы и пользовательский опыт важны, они не определяют, что означает быть нативным. Вместо этого способность к обмену памятью и стеком вызовов с базовой системой является ключевым критерием для нативной функциональности, а Kotlin соответствует этому критерию.
Обсудим концепцию нативной разработки в контексте Android и iOS. Это понятие размылось с появлением кроссплатформенных технологий.
Исторически, нативная разработка относилась к приложениям, разработанным с использованием языков, специфичных для своей платформы (Java/Kotlin для Android и Objective-C/Swift для iOS). Однако с появлением дизайн-систем, акцент сместился с технической реализации на UI/UX. Использование родных системе компонентов предполагало что приложением может сойти за нативное?
Автор предлагает, что дизайн-системы и пользовательский опыт не определяют, является ли приложение нативным. Скорее это зависит от контекста платформы, для которой оно предназначено.
Современные мобильные фреймворки, такие как React Native и Flutter, предназначены для облегчения разработки приложений для мобильных платформ, но они работают в своих изолированных средах, требуя большого количества слоев абстракции для взаимодействия с системой, что может привести к избыточности и неэффективности в некоторых случаях. Можно ли это считать нативным подходом? Думаю, что нет
В отличие от этого, Kotlin выделяется как нативный язык благодаря своей архитектуре компилятора, позволяющей прямое взаимодействие с Java, Swift, JavaScript и WebAssembly. Встроенная интероперабельность Kotlin устраняет необходимость в промежуточном слое или собственной виртуальной машине, позволяя ему без проблем обмениваться объектами между платформами и генерировать нативный код для каждой целевой платформы. Получается, что Kotlin является нативным языком для разработки приложений на iOS тоже?
Итого:
Концепция нативности приложения относительна и зависит от контекста платформы, для которой она предназначена. В то время как дизайн-системы и пользовательский опыт важны, они не определяют, что означает быть нативным. Вместо этого способность к обмену памятью и стеком вызовов с базовой системой является ключевым критерием для нативной функциональности, а Kotlin соответствует этому критерию.
Medium
What’s Native?
In the world of mobile programming - after Symbian, Java ME and Windows Phone -, “native” was the adjective used to categorize an…
Изменения в Google Play Console
Много небольших изменений для релиз-менеджеров или отвественных за рост приложения, но с точки зрения разработки мне интересна именно эта фича! Теперь, если у вас ANR краш в SDK с которым вы ничего не можете сделать - его можно пошарить с разработчиком этого SDK
Много небольших изменений для релиз-менеджеров или отвественных за рост приложения, но с точки зрения разработки мне интересна именно эта фича! Теперь, если у вас ANR краш в SDK с которым вы ничего не можете сделать - его можно пошарить с разработчиком этого SDK
Compose и адаптивные layout!
👉 Представлены
👉 Compose для Android TV переходит в бету
👉 Смотрим на красивые виджеты с Jetpack Glance!
Сегодня ожидается чуть больше новостей, касающихся Android от Google I/O!
Изображение взято с Jetcaster, показывающее как офигенно Compose выглядит на всех Android девайсах
👉 Представлены
NavigationSuiteScaffold, ListDetailPaneScaffold & SupportingPaneScaffold
. Для организации экранов. Посмотреть как каждый выглядит можно тут👉 Compose для Android TV переходит в бету
👉 Смотрим на красивые виджеты с Jetpack Glance!
Сегодня ожидается чуть больше новостей, касающихся Android от Google I/O!
Изображение взято с Jetcaster, показывающее как офигенно Compose выглядит на всех Android девайсах
Обновление для часов!
👉 Много обновлений для циферблатов и расширения их функциональности
👉 Watch OS 5 developer preview! - энергоэффективнее и производительнее
👉 Jetpack Compose для Wear OS расширяется и растет. Уже релиз 1.3.1
👉 Блог о том как разработка для Wear OS на Compose позволила писать меньше кода в Soundcloud
👉 Больше инструментов для взаимодействия с часами из Android Studio. В последнем фиче дропе добавили превью для
👉 Много обновлений для циферблатов и расширения их функциональности
👉 Watch OS 5 developer preview! - энергоэффективнее и производительнее
👉 Jetpack Compose для Wear OS расширяется и растет. Уже релиз 1.3.1
👉 Блог о том как разработка для Wear OS на Compose позволила писать меньше кода в Soundcloud
👉 Больше инструментов для взаимодействия с часами из Android Studio. В последнем фиче дропе добавили превью для
Tiles
и ProtoLayout
. Появилась возможность подкладывать данные с датчиков для фитнес приложенийAndroid Developers Blog
What’s new in Wear OS - I/O '24
With Wear OS 5, tracking your workout is now more efficient with enhanced security, user customizations, power optimizations, and more.
Что еще показали?
👉 Анализатор от Google по соблюдению требований безопасности: https://checks.google.com/
👉 Большой апдейт по Compose, но мы уже разбирали его
👉 Вторая бета для Android 15
😅 Android Studio Koala Feature Drop (2024.1.2) Canary 1
👉 Напомнили что Android Automotive OS все еще живет и развивается. Сегодня должен быть доклад
На следующей неделе KotlinConf, ждем больше обновлений по Kotlin оттуда!
👉 Анализатор от Google по соблюдению требований безопасности: https://checks.google.com/
👉 Большой апдейт по Compose, но мы уже разбирали его
👉 Вторая бета для Android 15
😅 Android Studio Koala Feature Drop (2024.1.2) Canary 1
👉 Напомнили что Android Automotive OS все еще живет и развивается. Сегодня должен быть доклад
На следующей неделе KotlinConf, ждем больше обновлений по Kotlin оттуда!
Android Developers Blog
15 Things to know for Android developers at Google I/O
Take a peak at some of the ways Android is here to support you. Don’t forget to check out the Android track at Google I/O!
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 выглядит не сложно
Пример использования и того как это выглядит можно глянуть тут
Из приятного:
👉 Контроль над размером выделяемого кэша
👉 Контроль над weak/strong ссылками. Поможет с утечками?
👉 На Android использует стандартные компоненты для загрузки, на остальных платформах собственная обертка над Skia
👉 Миграция с версии 2 выглядит не сложно
Часы. Часы? Часы!
Рекомендации по использованию сторонних фреймворков от разработчицы из Гугла. Даже если не занимаетесь поддержкой wearable девайсов, то интересно глянуть на особенности разработки. Google I/O показал много обновлений для часов!
👉 Сборник Horologist библиотек. Помогают следовать гайдлайнам гугла. Например скорлу или удостовериться что часть элементов не скрыто под скруглением часов
👉 Скриншоты для странички Google Play, чтоб заявить о поддержке часов, даже если нет идеального девайса
👉 Шрифты и Splash screen (Wow!)
👉 Основная дока
Рекомендации по использованию сторонних фреймворков от разработчицы из Гугла. Даже если не занимаетесь поддержкой wearable девайсов, то интересно глянуть на особенности разработки. Google I/O показал много обновлений для часов!
👉 Сборник Horologist библиотек. Помогают следовать гайдлайнам гугла. Например скорлу или удостовериться что часть элементов не скрыто под скруглением часов
👉 Скриншоты для странички Google Play, чтоб заявить о поддержке часов, даже если нет идеального девайса
👉 Шрифты и Splash screen (Wow!)
👉 Основная дока
Medium
Tools and libraries to help your Wear OS app satisfy Google Play app quality requirements
Learn about available tools and libraries to help you easily meet Wear OS app quality requirements to be published on the Google Play…
Кэширование в Android
Автор рассматривает и предлагает архитектурные решения для следующих типов кэширования:
👉 Cache Only
👉 Network Only
👉 Network First
👉 Cache First - Network Second
👉 Cache First - Network for Later
👉 Cache First - Network Once
✍️ Бонусом, кэширование через networkBoundResource
Выглядит больше как шпаргалка по проектированию кэширования приложения на этапе интервью, но схемы однозначно стоит посмотреть и, возможно, забрать к себе в команду
Автор рассматривает и предлагает архитектурные решения для следующих типов кэширования:
👉 Cache Only
👉 Network Only
👉 Network First
👉 Cache First - Network Second
👉 Cache First - Network for Later
👉 Cache First - Network Once
Выглядит больше как шпаргалка по проектированию кэширования приложения на этапе интервью, но схемы однозначно стоит посмотреть и, возможно, забрать к себе в команду
Please open Telegram to view this post
VIEW IN TELEGRAM
О создании Preview в Jetpack Compose
Как вы подкладываете и обновляете данные для
👉 Хардкодить данные напрямую
👉 Класть все данные в обьект и подменять в процессе подстановки. А более аккуратный способ — это воспользоваться
👉 Написать полноценный отдельный фабричный метод для описания состояния
👉 Использование существующего state holder
У нас в команде решили для каждого UI-класса определять несколько
Как вы подкладываете и обновляете данные для
@Preview
? В статье предлагается:👉 Хардкодить данные напрямую
👉 Класть все данные в обьект и подменять в процессе подстановки. А более аккуратный способ — это воспользоваться
PreviewParameterProvider
(Хорошо описано тут)👉 Написать полноценный отдельный фабричный метод для описания состояния
@Preview
. Мне кажется что это оверинжениринг, только если вы не всецело полагаетесь на превью в работе👉 Использование существующего state holder
У нас в команде решили для каждого UI-класса определять несколько
mock()
функций с основными кейсами. В итоге у нас есть базовые превью, а при переиспользовании всегда видны возможные коллизии на основных кейсах.Dladukedev
The Many Approaches to Providing @Preview data in Jetpack Compose
Jetpack Compose Previews make for faster development and prototyping but the problem of providing data to the component has many solutions. Here is a review of those different solutions, how they might be applied in a given project, and the pros and cons…
System UI Compatibility and Immersive Status Bar
Разбираемся как в Compose обращаться с областью взаимодействия приложения
👉
👉
👉
Разбираемся как в Compose обращаться с областью взаимодействия приложения
👉
enableEdgeToEdge()
- растянуть область и забрать контроль у системы👉
WindowInsets
понять область отступа системных компонентов и вставить в padding
вашего объекта👉
Modifier.systemBarsPadding()
или Modifier.safeDrawingPadding()
сделать тоже самое, но с помощью модификатора