#Kotlin #AnnotationProcessor
Annotation processor: Say less, mean more
Как часто вам приходится писать рутинный код? Да, вы можете избавиться от него с помощью выделения кода в методы, классы и библиотеки с кучей API, но даже этот подход не всегда позволяет эффективно сократить код, так как есть части за которыми надо следить руками и дополнять.
Современная Java разработка (как и Kotlin) имеет возможность генерация кода в момент компиляции - Annotation Processor. Суть технологии проста - вы помечаете код аннотациями, а специальная утилита, называемая
Большинство Android разработчиков используют библиотеки с Annotation Processor: Dagger 2, Room, Butterknife, Arch Component Lifecycle.
Упростить свою задачу с помощью кодогенерации и Annotation Processor не так сложно. Подумайте что в вашем вы бы перестали бы писать каждый раз, возьмите JavaPoet или KotlinPoet, изучите статью и вперед!
Annotation processor: Say less, mean more
Как часто вам приходится писать рутинный код? Да, вы можете избавиться от него с помощью выделения кода в методы, классы и библиотеки с кучей API, но даже этот подход не всегда позволяет эффективно сократить код, так как есть части за которыми надо следить руками и дополнять.
Современная Java разработка (как и Kotlin) имеет возможность генерация кода в момент компиляции - Annotation Processor. Суть технологии проста - вы помечаете код аннотациями, а специальная утилита, называемая
процессор аннотаций (в Kotlin это kapt) запускают написанный вами обработчик этих аннотаций и позволяют во время компиляции сделать различные операции, например сгенерировать код.Большинство Android разработчиков используют библиотеки с Annotation Processor: Dagger 2, Room, Butterknife, Arch Component Lifecycle.
Упростить свою задачу с помощью кодогенерации и Annotation Processor не так сложно. Подумайте что в вашем вы бы перестали бы писать каждый раз, возьмите JavaPoet или KotlinPoet, изучите статью и вперед!
Medium
Annotation processor: Say less, mean more.
I’ve always been curious on what is behind an annotation. As much as they made my angry, believe me they are so fun. This is my experience…
#Kotlin #Architecture #Delegate
Class delegation in Kotlin
Все мы хотим (и даже должны) делать хорошую архитектуру приложений: разбивать на слои, писать переиспользуемый код, покрывать тестами, не использовать сильные связи между классами (например наследование 😦) и др.
Для этого у нас есть много рекомендаций, одна из которых - делегаты. В Java я не использовал этот шаблон программирования активно по причине, что это боль - нужно писать дубликат API из делегата и пробрасывать все вызовы в этот объект.
Kotlin сделал этот подход проще, так как на уровне языка есть поддержка делегатов, что позволяет переиспользовать код без наследования в одну строку кода. Также можно построить своеобразный вариант множественного наследования.
👇Узнайте больше из статьи 👇
Class delegation in Kotlin
Все мы хотим (и даже должны) делать хорошую архитектуру приложений: разбивать на слои, писать переиспользуемый код, покрывать тестами, не использовать сильные связи между классами (например наследование 😦) и др.
Для этого у нас есть много рекомендаций, одна из которых - делегаты. В Java я не использовал этот шаблон программирования активно по причине, что это боль - нужно писать дубликат API из делегата и пробрасывать все вызовы в этот объект.
Kotlin сделал этот подход проще, так как на уровне языка есть поддержка делегатов, что позволяет переиспользовать код без наследования в одну строку кода. Также можно построить своеобразный вариант множественного наследования.
👇Узнайте больше из статьи 👇
Hackernoon
Class delegation in Kotlin | HackerNoon
<strong>TL;DR</strong> You are fine the way you are, you can skip this article.
#Новости
За все время существование канала я всегда старался сделать подачу контента удобной и не перегружать подписчиков большим потоком информаци. Последний месяц я ввел несколько правил, которые придерживался при создание постов:
1️⃣ Не больше 4 постов в день
2️⃣ Воскресенье - выходной. Ждать в этот день постов не стоит. Расслабьтесь, приготовьтесь к новой неделе.
3️⃣ Первые 2 правила могут нарушаться в исключительных случаях - очень важные новости, которые нужно рассказать ASAP
4️⃣ Большие обзоры будут создаваться на сторонних сервисах (Telegraph, Medium) и поститься в кратком варианте в канал
5️⃣ Все новости постятся без оповещений, чтобы не отвлекать от важных дел
Этим правилам я буду следовать и дальше .Буду очень рад вашим альтернативным предложениям по контенту и его подаче. Вы можете написать мне лично @krlrozov либо обсудить это в чате @android_broadcast_discussions
За все время существование канала я всегда старался сделать подачу контента удобной и не перегружать подписчиков большим потоком информаци. Последний месяц я ввел несколько правил, которые придерживался при создание постов:
1️⃣ Не больше 4 постов в день
2️⃣ Воскресенье - выходной. Ждать в этот день постов не стоит. Расслабьтесь, приготовьтесь к новой неделе.
3️⃣ Первые 2 правила могут нарушаться в исключительных случаях - очень важные новости, которые нужно рассказать ASAP
4️⃣ Большие обзоры будут создаваться на сторонних сервисах (Telegraph, Medium) и поститься в кратком варианте в канал
5️⃣ Все новости постятся без оповещений, чтобы не отвлекать от важных дел
Этим правилам я буду следовать и дальше .Буду очень рад вашим альтернативным предложениям по контенту и его подаче. Вы можете написать мне лично @krlrozov либо обсудить это в чате @android_broadcast_discussions
#DarkTheme
Moving to the Dark Side: Dark Theme Recap
В Android 10.0 Q будет поддержкой темной темы в ОС, хотя возможность она уже была давно доступна для разработчиков приложений (DayNight).
Почему важна поддерживать темную тему:
👉 Экономия батарейки устройства
👉 Более комфортное использование приложений в темных условиях и для людей, чувствительных к яркому свету
Разработчикам сейчас предоставляется 2 возможности для реализации темной темы:
👉 Использование
👉 Поддержка Force Dark Mode с помощью включения
В статье вы найдете обзор темного режима и как происходит работа с ним, лучшие практики и пр. материалы которые позволят вам дать пользователям выбор свой стороны Темы
Moving to the Dark Side: Dark Theme Recap
В Android 10.0 Q будет поддержкой темной темы в ОС, хотя возможность она уже была давно доступна для разработчиков приложений (DayNight).
Почему важна поддерживать темную тему:
👉 Экономия батарейки устройства
👉 Более комфортное использование приложений в темных условиях и для людей, чувствительных к яркому свету
Разработчикам сейчас предоставляется 2 возможности для реализации темной темы:
👉 Использование
DayNight темы для приложения👉 Поддержка Force Dark Mode с помощью включения
android:forceDarkAllowed=”true”В статье вы найдете обзор темного режима и как происходит работа с ним, лучшие практики и пр. материалы которые позволят вам дать пользователям выбор свой стороны Темы
Medium
Moving to the Dark Side: Dark Theme Recap
Dark Theme is finally here! 🎉
#Security
Безопасная передача данных между двумя приложениями
Обзор способов как организовать передачу данных между приложениями в Android. Будет полезно тем у кого есть несколько приложений, которые могут передавать данные друг другу для более эффективного взаимодействия.
Безопасная передача данных между двумя приложениями
Обзор способов как организовать передачу данных между приложениями в Android. Будет полезно тем у кого есть несколько приложений, которые могут передавать данные друг другу для более эффективного взаимодействия.
Хабр
Безопасная передача данных между двумя приложениями
Всем привет, сегодня я хотел бы вам рассказать о некоторых вариантах передачи данных между двумя андроид приложениями и рассмотреть их с точки зрения безопасност...
#Animation #Keyboard
Animating Keyboard Appearance in Android Application
Разбор того как можно анимировать ваш UI при появление/скрытие клавиатуры, а не просто полагаться на стандартное поведение системы
Рецепт складывается из Window + WindowInsets + View.OnApplyWindowInsetsListener + Animation
Animating Keyboard Appearance in Android Application
Разбор того как можно анимировать ваш UI при появление/скрытие клавиатуры, а не просто полагаться на стандартное поведение системы
Рецепт складывается из Window + WindowInsets + View.OnApplyWindowInsetsListener + Animation
Medium
Animating Keyboard Appearance in Android Application
Animating Keyboard Appearance in Android Application Purpose Android is more than 10 years old now and still appearance of the soft keyboard resizes application’s content without any animation. As …
#BKUG #Meetup #Coroutines
BKUG #13
Для всех тех у кого есть вопросы как использовать корутины правильно и эффективно, сообщество Belarusian Kotlin User Group (BKUG) приготовило для вас митап. В рамках встречи лидеры сообщества Кирилл Розов и Руслан Ибрагимов поделятся лучшими практиками в использование корутин на Android. Также вы сможете задать свои вопросы и получить ответы.
Начало в 19.00 в Space_. Проход через Октябрьскую 10б (рекомендую ориентироваться на этот адрес)
Участие бесплатное по предварительной регистрации
BKUG #13
Для всех тех у кого есть вопросы как использовать корутины правильно и эффективно, сообщество Belarusian Kotlin User Group (BKUG) приготовило для вас митап. В рамках встречи лидеры сообщества Кирилл Розов и Руслан Ибрагимов поделятся лучшими практиками в использование корутин на Android. Также вы сможете задать свои вопросы и получить ответы.
Начало в 19.00 в Space_. Проход через Октябрьскую 10б (рекомендую ориентироваться на этот адрес)
Участие бесплатное по предварительной регистрации
#Firebase #AndroidX #GooglePlayServices
Google Play services and Firebase migrating to AndroidX
Google Play Services и Firebase мигрируют свое SDK на AndroidX. Спустя год после анонса Android. Ох, скоро заживем что не придется включать
Хотите узнать сколько в вашем проекте зависимостей используют Support Library и можно ли в вашем проекте отказаться от Jetifier - попробуйте Can I drop Jetifier?.
Google Play services and Firebase migrating to AndroidX
Google Play Services и Firebase мигрируют свое SDK на AndroidX. Спустя год после анонса Android. Ох, скоро заживем что не придется включать
Jetifier и все сторонние библиотеки будут использовать AndroidX. Ну а пока тормозим свой билд необходимостью конвертирования Support Library артефактов в AndroidX 🤦♂️.Хотите узнать сколько в вашем проекте зависимостей используют Support Library и можно ли в вашем проекте отказаться от Jetifier - попробуйте Can I drop Jetifier?.
#Debug #Tooling
Android debug tools
Разбор различных инструментов для дебага Android приложений:
👉 Android Profiler
👉 Facebook Stetho - дебаг вашего приложения из браузера Chrome
👉 DebugDrawer - боковая панель, которая позволяет конфигурировать вам различные состояния вашего приложения и просматривать статистику приложения: FPS, состояние кэша и пр.
👉 AppSpector - сервис для дебага Android и iOS . приложений, который позволяет вам выполнять все удаленно в реальном времени. Тулинг платный, с 14 днями триала 😔
Android debug tools
Разбор различных инструментов для дебага Android приложений:
👉 Android Profiler
👉 Facebook Stetho - дебаг вашего приложения из браузера Chrome
👉 DebugDrawer - боковая панель, которая позволяет конфигурировать вам различные состояния вашего приложения и просматривать статистику приложения: FPS, состояние кэша и пр.
👉 AppSpector - сервис для дебага Android и iOS . приложений, который позволяет вам выполнять все удаленно в реальном времени. Тулинг платный, с 14 днями триала 😔
Medium
Android debug tools
Debugging is one of the most important part of the software developement process…
#Kotlin #Coroutines #Flow
Execution context of Kotlin Flows
Flow к нам приходят и все больше деталей о их работе раскрывается. В статье Роман Елизаров рассматривает особенно выполнения Flow на разных CoroutineDispatcher и как правильно переключаться между ними.
Execution context of Kotlin Flows
Flow к нам приходят и все больше деталей о их работе раскрывается. В статье Роман Елизаров рассматривает особенно выполнения Flow на разных CoroutineDispatcher и как правильно переключаться между ними.
Medium
Execution context of Kotlin Flows
Kotlin flows decouple data producers and data consumers in a way that is designed to make it easy to reason about code execution context.
#GooglePlay
Improved app quality and discovery on Google Play
Google обновляет алгоритм ранжирования для приоритизации приложений и игр высокого качества и высокой производительностью. Не хотите спуститься в подвал Google Play? Готовьтесь к оптимизации вашего приложения. Есть 3 ключевых направления:
👉 Хороший пользовательский опыт использования приложения
👉 Стабильность и производительность
👉 Эффективная страница приложения в Google Play
Improved app quality and discovery on Google Play
Google обновляет алгоритм ранжирования для приоритизации приложений и игр высокого качества и высокой производительностью. Не хотите спуститься в подвал Google Play? Готовьтесь к оптимизации вашего приложения. Есть 3 ключевых направления:
👉 Хороший пользовательский опыт использования приложения
👉 Стабильность и производительность
👉 Эффективная страница приложения в Google Play
#ViewModel #ArchitectureComponents
Retain внутри, а снаружи ViewModel
Разбор того, как работает ViewModel из Architecture Components под капотом.
Retain внутри, а снаружи ViewModel
Разбор того, как работает ViewModel из Architecture Components под капотом.
Хабр
Retain внутри, а снаружи ViewModel
В какой-то момент я заметил периодические разговоры о том, как же на самом деле работает ViewModel из гугловых архитектурных компонентов. Осознав, что и сам не...
#Architecture #LiveData
How not to use sealed classes and LiveData for state management
Разбор построения архитектуры на
How not to use sealed classes and LiveData for state management
Разбор построения архитектуры на
ViewModel + LiveData + State Object. State Object представляет собой Sealed класс, который содержит всю информацию о состоянии экрана.Medium
How not to use sealed classes and LiveData for state management
A journey about things that don’t work
#Coroutines #BestPractices
Coroutining Android Apps
В своем докладе я рассказал множестве советов, как использовать корутины с максимальной пользой, получив простой код.
Слайды к докладу
Coroutining Android Apps
Kotlin Coroutines - хайповый подход для реализации асинхронных задач, особенно если проект строится на Kotlin. Но любой новый подход надо стараться использовать правильно, чтобы получить максимальную пользу. В своем докладе я рассказал множестве советов, как использовать корутины с максимальной пользой, получив простой код.
Слайды к докладу
YouTube
Кирилл Розов — Coroutining Android apps
Ближайшая конференция — Mobius 2024 Autumn, 11 октября (Online), 19–20 октября, Санкт-Петербург. Подробности и билеты: https://jrg.su/Yu6KNJ
— —
. . .
. Всегда интересно послушать практический доклад о какой-либо технологии, который в отличие от документации…
— —
. . .
. Всегда интересно послушать практический доклад о какой-либо технологии, который в отличие от документации…
#AndroidQ
Вышла Android Q Beta 4 и финальное API
Вышла новая Beta Android Q в которой финализировали SDK и вы можете уже скачать 29 версию в Android Studio, а также Build Tools и Platform Tools. Также открыта публикация приложений с compileSdk и/или targetSdk 29. Дальше нас ждёт исправление багов в работе системы и SDK.
Владельцы Pixel всех поколений уже могут накатить новую бетку и похвастаться, а главное рассказать стабильно ли там все работает.
Вышла Android Q Beta 4 и финальное API
Вышла новая Beta Android Q в которой финализировали SDK и вы можете уже скачать 29 версию в Android Studio, а также Build Tools и Platform Tools. Также открыта публикация приложений с compileSdk и/или targetSdk 29. Дальше нас ждёт исправление багов в работе системы и SDK.
Владельцы Pixel всех поколений уже могут накатить новую бетку и похвастаться, а главное рассказать стабильно ли там все работает.
Android Developers Blog
News and insights on the Android platform, developer tools, and events.
#Network
Вышел Retrofit 2.6.0
Что нового:
🎉 Поддержка корутин
👉 Новая аннотация
👉Новая аннотация
👉Поддержка типов header-ок в
👉Исправление багов
Вышел Retrofit 2.6.0
Что нового:
🎉 Поддержка корутин
@GET("users/{id}")suspend fun user(@Path("id") long id): User👉 Новая аннотация
@Tag, позволяющая задать tag для OkHttp Request. Это можно использовать чтобы идентифицировать запрос👉Новая аннотация
@SkipCallbackExecutor, которая выполняет callback на том же executor, на котором происходит HTTP запрос👉Поддержка типов header-ок в
@HeaderMap👉Исправление багов
Как вы заботитесь о производительности в своём приложение?
Final Results
8%
Мониторим ежедневно и сразу исправляем
42%
Смотрим от релиза к релизу
18%
Только когда статистика светится красным
32%
Не заботимся, пусть пользователи телефоны обновляют!
#AndroidX
Обновление AndroidX
Вышло свежая порция обновление библиотек AndroidX. Из интересного:
Стабильная версия Collection 1.1.0 + ktx
👉Улучшена производительность и API Android коллекций
Первая beta Fragment 1.1.0
👉 Создание собственной FragmentFactory, которая будет использоваться для создание
👉 Тестирование
👉 Больше nullability аннотаций в API
👉 Kotlin делегаты
👉 Поддержка задания
👉Креши, выбрасываемые
👉Возможность задать максимальное состояние в
Первая beta Activity 1.0.0
👉 Возможность задать
👉 Новые удобные Kotlin API
👉 Задание content view
Первая beta Preference 1.1.0
👉 Возможность динамического изменения описания
👉 Обновлена
👉 Возможность задания доступности для копирования содержимого с помощью Preference.setCopyingEnabled()
👉 Используйте
👉 Кастомизациия
Обновление AndroidX
Вышло свежая порция обновление библиотек AndroidX. Из интересного:
Стабильная версия Collection 1.1.0 + ktx
👉Улучшена производительность и API Android коллекций
Первая beta Fragment 1.1.0
👉 Создание собственной FragmentFactory, которая будет использоваться для создание
Fragment. Это позволяет избавиться от рефлексии при создании Fragment и начать передавать параметры в конструктор.👉 Тестирование
Fragment в изоляции с помощью FragmentScenario👉 Больше nullability аннотаций в API
👉 Kotlin делегаты
by viewModels() и by activityViewModels() для получения ViewModel👉 Поддержка задания
View для Fragment с помощью передачи его в конструктор👉Креши, выбрасываемые
FragmentManager, теперь содержат информацию о Fragment👉Возможность задать максимальное состояние в
Lifecycle для выполнения транзакции FragmentManagerПервая beta Activity 1.0.0
👉 Возможность задать
OnBackPressedCallback в Activity👉 Новые удобные Kotlin API
👉 Задание content view
Activity с помощью аннотации @ContentViewПервая beta Preference 1.1.0
👉 Возможность динамического изменения описания
Preference с помощью SummaryProvider👉 Обновлена
SeekBarPreference: соответствие Material Design и возможность обновление во время перемещения ползунка👉 Возможность задания доступности для копирования содержимого с помощью Preference.setCopyingEnabled()
👉 Используйте
PreferenceFragmentCompat вместо PreferenceFragment. Аналогично правило теперь действует и для Preference👉 Кастомизациия
EditText с помощью EditTextPreference.OnBindEditTextListener#Kotlin
JetBrains запустила Kotlin Hands-On
Kotlin Hands-On - уроки в рамках которых вы можете различные технологии по Kotlin. Сейчас доступно 2 урока: "Introduction to Coroutines and Channels" и "Introduction to Kotlin/Native".
Kotlin Hands-On очень похоже на Google Codelabs и понравится любителям данного сервиса для знакомства с технологиями.
JetBrains запустила Kotlin Hands-On
Kotlin Hands-On - уроки в рамках которых вы можете различные технологии по Kotlin. Сейчас доступно 2 урока: "Introduction to Coroutines and Channels" и "Introduction to Kotlin/Native".
Kotlin Hands-On очень похоже на Google Codelabs и понравится любителям данного сервиса для знакомства с технологиями.
#Dagger #ArchitectureComponents #ViewModel
Assisted ViewModel
Как много усилий вы тратите на то чтобы написать
Я с коллегами решили написать библиотеку, которая избавит нас от этой тягомотины и поможет убрать необходимость реализации
Пример использования:
Assisted ViewModel
Как много усилий вы тратите на то чтобы написать
ViewModelProvider.Factory для ViewModel из Architecture Components? Процесс не самый удобный, особенно когда в конструктор вы передаете только зависимости из графа . Dagger?Я с коллегами решили написать библиотеку, которая избавит нас от этой тягомотины и поможет убрать необходимость реализации
ViewModelProvider.Factory.Пример использования:
class SampleViewModel @AssistedViewModel constructor( repository:Repository): ViewModelclass SampleFragment: Fragment { private lateinit var viewModel: SampleViewModel @Inject // AssistedViewModelFactory is generated fun init(factory: AssistedViewModelFactory) { viewModel = ViewModelProviders.of(this, factory) .get(SampleViewModel::class.java) }}#Performance
Android app startup time: why we care
Почему важна производительность мобильных приложений? На мой взгляд причины следующие:
👉 Улучшение пользовательского опыта использования приложения
👉 Более высокое расположение в Google Play
👉 Возможность работы на более слабых устройствах, что расширяет аудиторию
В статье разбирается из чего состоит запуск приложения, как измерять скорость и оптимизировать её
Android app startup time: why we care
Почему важна производительность мобильных приложений? На мой взгляд причины следующие:
👉 Улучшение пользовательского опыта использования приложения
👉 Более высокое расположение в Google Play
👉 Возможность работы на более слабых устройствах, что расширяет аудиторию
В статье разбирается из чего состоит запуск приложения, как измерять скорость и оптимизировать её
Medium
Android app startup time: why we care
When we talk about mobile applications, performance is a fundamental concept. The low resource availability in these types of devices…