#AndroidQ #GestureNavigation
Gesture Navigation – Edge Cases
В AndroidQ была представлена стандартные жесты для навигация (аля iOS). В статье обозревается новое API View.setSystemGestureExclusionRects(List<Rect>), которое позволяет сообщать системе в каком регионе View, нельзя распознавать жесты как системные.
Gesture Navigation – Edge Cases
В AndroidQ была представлена стандартные жесты для навигация (аля iOS). В статье обозревается новое API View.setSystemGestureExclusionRects(List<Rect>), которое позволяет сообщать системе в каком регионе View, нельзя распознавать жесты как системные.
#DependencyInjection #Kotlin
Koin 2.0 Release
Состоялся релиз Koin 2.0 - просто и чистого решения на Kotlin для dependency injection.
Лично для меня Koin - прекрасный выбор, так как он решает самые распространенные задачи DI в Android и еще больше наслаждаться Kotlin в проекте. Для Java также есть поддержка.
В новой версии произошли следующие изменения:
🎉Значительно улучшена скорость работы, что решило ее проблемы на слабых устройствах
🎉Новый DSL для инициализации
Поддержка многомодульных проектов
🎉Доступна загрузка/выгрузки модулей после инициализации
🎉 Объявление зависимостей на лету
Изменения, которые сломают вам простое обновление версии:
❌ Вложенные модули для описания зависимостей больше не поддерживаются
❌ Изменено описание scope
❌ Изменено описание именованных зависимостей
Koin 2.0 Release
Состоялся релиз Koin 2.0 - просто и чистого решения на Kotlin для dependency injection.
Лично для меня Koin - прекрасный выбор, так как он решает самые распространенные задачи DI в Android и еще больше наслаждаться Kotlin в проекте. Для Java также есть поддержка.
В новой версии произошли следующие изменения:
🎉Значительно улучшена скорость работы, что решило ее проблемы на слабых устройствах
🎉Новый DSL для инициализации
Поддержка многомодульных проектов
🎉Доступна загрузка/выгрузки модулей после инициализации
🎉 Объявление зависимостей на лету
Изменения, которые сломают вам простое обновление версии:
❌ Вложенные модули для описания зависимостей больше не поддерживаются
❌ Изменено описание scope
❌ Изменено описание именованных зависимостей
#MobilePeopleTalks #Podcast
Mobile People Talks #5 - Android Q по следам Google I/O 19
Записали новый выпуск подкаста (технический). Мы немного обсудили прошедший Google IO (Саша Денисов рассказал нам о своих впечатлениях от палящего солнца), Pixel 3a, но основная часть подкаста была посвящена рассказе об Android Q от Кирилла Розова.
Mobile People Talks #5 - Android Q по следам Google I/O 19
Записали новый выпуск подкаста (технический). Мы немного обсудили прошедший Google IO (Саша Денисов рассказал нам о своих впечатлениях от палящего солнца), Pixel 3a, но основная часть подкаста была посвящена рассказе об Android Q от Кирилла Розова.
SoundCloud
Mobile People Talks
Mobile People Talks — подкаст про мобильную разработку. И все остальное.
Так что если вы не мобильный разработчик, не спешите закрывать страничку – разные выпуски имеют разные уровни погружения и буду
Так что если вы не мобильный разработчик, не спешите закрывать страничку – разные выпуски имеют разные уровни погружения и буду
Android Broadcast
#Course Android Architecture Masterclass video course Курс по архитектуре Android приложений, написанию чистого кода и разработке поддерживаемых приложений. Курс стоит $12. Курс состоит из следующих частей: 1️⃣ MVx архитектурные паттерны 2️⃣ MVx в Android…
Я давно обещал вам сделать обзор на этот курс. Досмотрел, но не дошел написать, извините 😢
Курс подойдет вам если вы только начинаете разбираться с архитектурой. Я для себя (опыт 7+ лет промышленной Android разработки) не нашел для себя ничего нового😔.
В рамках курса не раскрылись популярные решения и не хватало практики, хотя бы опросников по каждой из тем. Даже Junior разработчикам я объяснял бы архитектуру немного глубже по некоторым направлениям.
Моя оценка - 4/10 👎
Курс подойдет вам если вы только начинаете разбираться с архитектурой. Я для себя (опыт 7+ лет промышленной Android разработки) не нашел для себя ничего нового😔.
В рамках курса не раскрылись популярные решения и не хватало практики, хотя бы опросников по каждой из тем. Даже Junior разработчикам я объяснял бы архитектуру немного глубже по некоторым направлениям.
Моя оценка - 4/10 👎
#Dagger #ViewModel
Android. Less Dagger boilerplate code for ViewModel creation
Те кто писал Factory для ViewModel, у которой есть зависимости из графа и соединить весь Inject с Dagger 2, эти люди знают насколько там много boilerplate кода и как этот процесс неприятен.
Для тех кто не знает - посмотрите статью выше и поймите. В ней вы найдете рецепт как соединить Dagger и создание . ViewModel.
Cпойлер: сейчас в EPAM мы работает над библиотекой, которая будет генерировать весь этот код за вас
Android. Less Dagger boilerplate code for ViewModel creation
Те кто писал Factory для ViewModel, у которой есть зависимости из графа и соединить весь Inject с Dagger 2, эти люди знают насколько там много boilerplate кода и как этот процесс неприятен.
Для тех кто не знает - посмотрите статью выше и поймите. В ней вы найдете рецепт как соединить Dagger и создание . ViewModel.
Cпойлер: сейчас в EPAM мы работает над библиотекой, которая будет генерировать весь этот код за вас
Medium
Android. Less Dagger boilerplate code for ViewModel creation
Dagger architecture component traditional approach
#Gradle #Optimizations
Советы по оптимизации Gradle в Android проектах. Ревизия 2019 года
Советы по следам Google I/O 2019:
👉В многомодульных проектах предпочитайте Java/Kotlin модули вместо Android модулей. Они собираются быстрее и лучше работает инкрементальная сборка
👉Применяйте только необходимые плагины
👉Избегайте непонятных плагинов
👉Мигрируйте на Kotlin 1.3.30 и включайте инкрементальный kapt
👉Запускайте Android Lint только на App модулях
👉Правильно настраивайте зависимости (
👉Описывайте версии зависимостей в одном месте в проекте
👉Используйте папку
👉Кастомные плагины позволят сократить размер gradle файлов в проекте и ускорить сборку
👉Применяйте последние возможности Gradle API, например Lazy конфигурацию для тасков
👉Используйте Gradle Worker API
👉Создавайте таски кастомных типов
👉Не делайте длительных операций во время фазы конфигурации
👉Измеряйте скорость вашей сборки, чтобы искать узкие места. В этом вам помогут Build Scans, Gradle Profiler, Talaoit
Советы по оптимизации Gradle в Android проектах. Ревизия 2019 года
Советы по следам Google I/O 2019:
👉В многомодульных проектах предпочитайте Java/Kotlin модули вместо Android модулей. Они собираются быстрее и лучше работает инкрементальная сборка
👉Применяйте только необходимые плагины
👉Избегайте непонятных плагинов
👉Мигрируйте на Kotlin 1.3.30 и включайте инкрементальный kapt
👉Запускайте Android Lint только на App модулях
👉Правильно настраивайте зависимости (
api и implementation)👉Описывайте версии зависимостей в одном месте в проекте
👉Используйте папку
buildSrc для описания зависимостей👉Кастомные плагины позволят сократить размер gradle файлов в проекте и ускорить сборку
👉Применяйте последние возможности Gradle API, например Lazy конфигурацию для тасков
👉Используйте Gradle Worker API
👉Создавайте таски кастомных типов
👉Не делайте длительных операций во время фазы конфигурации
👉Измеряйте скорость вашей сборки, чтобы искать узкие места. В этом вам помогут Build Scans, Gradle Profiler, Talaoit
#Gradle #Performance
Порой приходится иметь доступ к Android API в Java/Kotlin коде, и отказывать от чистого Java/Kotlin модулей в пользу Android Library проектов.
Есть способ более простой использовать Android API и не уходить от Java/Kotlin модуля - используйте AndroidJar Gradle плагин. Также можно подключить aar с помощью aar2jar Gradle плагина.
Порой приходится иметь доступ к Android API в Java/Kotlin коде, и отказывать от чистого Java/Kotlin модулей в пользу Android Library проектов.
Есть способ более простой использовать Android API и не уходить от Java/Kotlin модуля - используйте AndroidJar Gradle плагин. Также можно подключить aar с помощью aar2jar Gradle плагина.
#Architecture #CleanArchitecture #ArchitectureComponents
How to implement a Clean Architecture on Android
"Повторение мать учения" - так можно сказать об этой статье, в которой рассказывается о Clean Architecture на примере Android приложения и рассказывает об обязанностях каждого из слоев и осуществление коммуникации между ними
How to implement a Clean Architecture on Android
"Повторение мать учения" - так можно сказать об этой статье, в которой рассказывается о Clean Architecture на примере Android приложения и рассказывает об обязанностях каждого из слоев и осуществление коммуникации между ними
Medium
How to implement a Clean Architecture on Android
Learn how to implement a Clean Architecture on Android from scratch
Есть ли у вас подписка на Medium ?
Final Results
9%
Да
2%
Покупаю по надобности
33%
Разве он платный?
56%
Нет
#JetpackCompose
Android Jetpack Compose Review
Вы верите в Jetpack Compose? Пока он очень сырой и совсем не готов к использованию, но создал много шума. Можете изучить больше подробностей о будущем разработки UI на Android в статье
Android Jetpack Compose Review
Вы верите в Jetpack Compose? Пока он очень сырой и совсем не готов к использованию, но создал много шума. Можете изучить больше подробностей о будущем разработки UI на Android в статье
Karumi Blog
Android Jetpack Compose Review
Trust me when I say Android Compose library could change the way developers write Android applications in the future. - Karumi
#Kotlin
Kotlin: Don’t just use LET for null check
Kotlin - язык с богатыми возможностями, который позволяет значительно упрощать различные рутинные операции из Java. Главное надо помнить о правиле Человека-Паука - любую фичу можно обернуть против себя и использовать ее неэффективно.
Как правильно проверить переменную на null
Больше подробностей когда использовать let и когда нет читайте в статье
Kotlin: Don’t just use LET for null check
Kotlin - язык с богатыми возможностями, который позволяет значительно упрощать различные рутинные операции из Java. Главное надо помнить о правиле Человека-Паука - любую фичу можно обернуть против себя и использовать ее неэффективно.
Как правильно проверить переменную на null
if (variable != null) { /*Do something*/ } или variable?.let { /*Do something*/ } ?Больше подробностей когда использовать let и когда нет читайте в статье
Medium
Kotlin: Don’t just use LET for null check
With the introduction of null safety in Kotlin, many uses let{...} to perform the null check. But let is{…} not appropriate for some cases…
#CodeQuality
Gradle static analysis plugin
Чтобы качественно анализировать код вашего проекта надо подключать множество различных утилит. Плагин Gradle static analysis облегчает вашу работу, предоставляя простую настройку множества плагинов, которая включает в себя следующие утилиты:
👉 Checkstyle
👉 PMD
👉 FindBugs
👉 Detekt
👉 KtLint
👉 Android Lint
В процесс работы находятся:
👉 Spotbugs
👉 CPD
👉 Error Prone
👉 Jetbrains IDEA Inspections
Высокого качества кода вашему коду
Gradle static analysis plugin
Чтобы качественно анализировать код вашего проекта надо подключать множество различных утилит. Плагин Gradle static analysis облегчает вашу работу, предоставляя простую настройку множества плагинов, которая включает в себя следующие утилиты:
👉 Checkstyle
👉 PMD
👉 FindBugs
👉 Detekt
👉 KtLint
👉 Android Lint
В процесс работы находятся:
👉 Spotbugs
👉 CPD
👉 Error Prone
👉 Jetbrains IDEA Inspections
Высокого качества кода вашему коду
#Dagger #DependencyInjection
Dagger 2.23 Release
Вышел Dagger 2.23. Релиз был направлен на исправление багов, улучшение скорости работы и причесывание API:
👉 Генерируемый код по умолчанию теперь не форматируется. Это позволяет ускорить кодогенерацию. Форматирование стоит включать в релизном билде
👉 Общее улучшение скорости сборки
👉 Генерируемый компонент теперь объявляются
👉 Более строгая валидация
Dagger 2.23 Release
Вышел Dagger 2.23. Релиз был направлен на исправление багов, улучшение скорости работы и причесывание API:
👉 Генерируемый код по умолчанию теперь не форматируется. Это позволяет ускорить кодогенерацию. Форматирование стоит включать в релизном билде
👉 Общее улучшение скорости сборки
👉 Генерируемый компонент теперь объявляются
public в случае если компонент в вашем коде объявлен как public👉 Более строгая валидация
@BindsInstance#Fresco #Facebook #Image #ProgressiveJPEG
Fresco — Android Image Library
Во современной разработке можно найти множество библиотек, которые решают задачи по загрузке картинок их кэшированию и эффективному отображению. Я уверен, что у всех на слуху, а то и в проекте, одна из библиотек Glide, Picasso и Universal Image Loader (UIL).
Есть решение, которое выделяется из этого списка - Fresco от Facebook. Ее ключевое отличие, что часть обработки изображений и кэширования написана на C/C++ и соответственно на нее не накладываются ограничения JVM. Это позволяет вашему приложению переживать больше OutOfMemory и работать быстрее.
Одной из крутых фичей библиотеки является поддержка Progressive JPEG изображений - отображение картинки постепенно при ее загрузке.
В статье вы найдете краткую вводную информацию, но а всех тех кто заинтересовался - больше подробностей в документации Facebook Fresco
Fresco — Android Image Library
Во современной разработке можно найти множество библиотек, которые решают задачи по загрузке картинок их кэшированию и эффективному отображению. Я уверен, что у всех на слуху, а то и в проекте, одна из библиотек Glide, Picasso и Universal Image Loader (UIL).
Есть решение, которое выделяется из этого списка - Fresco от Facebook. Ее ключевое отличие, что часть обработки изображений и кэширования написана на C/C++ и соответственно на нее не накладываются ограничения JVM. Это позволяет вашему приложению переживать больше OutOfMemory и работать быстрее.
Одной из крутых фичей библиотеки является поддержка Progressive JPEG изображений - отображение картинки постепенно при ее загрузке.
В статье вы найдете краткую вводную информацию, но а всех тех кто заинтересовался - больше подробностей в документации Facebook Fresco
Medium
Fresco — Android Image Library🖼
Powerful image displaying/management library from The Facebook 😎
#RxJava
RxJava Observable to Single
RxJava позволяет между собой конвертировать свои различные типы из одного в другой. Только не всегда это можно сделать без проблем, так как к пример
Если попытаться конвертировать пустой
Как уследить за такими случаями и как их обрабатывать, вы можете узнать из статьи
RxJava Observable to Single
RxJava позволяет между собой конвертировать свои различные типы из одного в другой. Только не всегда это можно сделать без проблем, так как к пример
Observable может не вызвать onNext() ни разу в случае когда поток пустой, а вот Single гарантирует что один элемент будет эмитирован либо произойдет ошибка.Если попытаться конвертировать пустой
Observable в Single, то в результате вас ждет креш из-за отсутствия данных в Observable.Как уследить за такими случаями и как их обрабатывать, вы можете узнать из статьи
Medium
RxJava Observable to Single
Transforming Single to Observable is simple, as Single satisfies Observable’s contract. But transforming Observable to Single is not
#Coroutines #ArchitectureComponents #AndroidX
Coroutines with Architecture components
На прошедшем Google I/O рассказали о том, что Kotlin Coroutines - это рекомендуемое решение для асинхронного программирования на Android. В рамках этого рассказали о многих существующих библиотеках в рамках AndroidX, которые уже имеют поддержку Coroutines и о новых версиях библиотек из Architecture Components.
В статье рассматривается интеграция Coroutine с LiveData, ViewModel и Lifecycle, которая уже доступны в первой альфа версии Architecture Components 2.2.0
Coroutines with Architecture components
На прошедшем Google I/O рассказали о том, что Kotlin Coroutines - это рекомендуемое решение для асинхронного программирования на Android. В рамках этого рассказали о многих существующих библиотеках в рамках AndroidX, которые уже имеют поддержку Coroutines и о новых версиях библиотек из Architecture Components.
В статье рассматривается интеграция Coroutine с LiveData, ViewModel и Lifecycle, которая уже доступны в первой альфа версии Architecture Components 2.2.0
Medium
Coroutines with Architecture components
How to use coroutines effectively with Architecture components
#Kotlin
When to use Kotlin's takeIf() and takeUnless() functions
Стандартная библиотека содержит множество различных утилитных функций, которые делаю код короче и приятнее. Но не всегда так все очевидно и можно легко столкнуться с проблемами - например функции takeIf и takeUnless таят в себе опасность.
Задача этих функций в том чтобы проверить значение и если оно удовлетворяет (или нет в для
На первый взгляд все выглядет хорошо, но надо учитывать порядок выполнения инструкций, так как он разный и может привезти к печальны последствиям. Больше подробностей в статье.
When to use Kotlin's takeIf() and takeUnless() functions
Стандартная библиотека содержит множество различных утилитных функций, которые делаю код короче и приятнее. Но не всегда так все очевидно и можно легко столкнуться с проблемами - например функции takeIf и takeUnless таят в себе опасность.
Задача этих функций в том чтобы проверить значение и если оно удовлетворяет (или нет в для
takeUnless) условию вернуть это значение, в противном случае - null. Например digit.takeIf { it % 2 == 0 }, что является аналогом кода if (it % 2 == 0) digit else null.На первый взгляд все выглядет хорошо, но надо учитывать порядок выполнения инструкций, так как он разный и может привезти к печальны последствиям. Больше подробностей в статье.
Todd Ginsberg
When to use Kotlin's takeIf() and takeUnless() functions • Todd Ginsberg
While handy, these functions might not always be appropriate
#GooglePlay
Building a safer Google Play for kids
Google Play становится более безопасным для детей и семей. Для разработчиков это выливается в следующие изменения:
👉 Если дети часть вашей аудитории, ты ваше приложение должно соответствовать новой политике по контенту и обработки персональных данных
👉 Реклама в вашем приложение должна соответствовать аудитории и предоставляться из рекламных сетей, которые сертифицированы в соответствии с новой политикой
👉 Если ваше приложение не предназначается для детей, то вы должны убедиться, что ваше приложение соответствует требованиям. Например, это касается контента в информации на Google Play
Теперь при публикация приложения в Google Play надо указывать целевую аудиторию и контент приложения. Для уже опубликованных приложений необходимо сделать обновления до 1 сентября 2019.
Building a safer Google Play for kids
Google Play становится более безопасным для детей и семей. Для разработчиков это выливается в следующие изменения:
👉 Если дети часть вашей аудитории, ты ваше приложение должно соответствовать новой политике по контенту и обработки персональных данных
👉 Реклама в вашем приложение должна соответствовать аудитории и предоставляться из рекламных сетей, которые сертифицированы в соответствии с новой политикой
👉 Если ваше приложение не предназначается для детей, то вы должны убедиться, что ваше приложение соответствует требованиям. Например, это касается контента в информации на Google Play
Теперь при публикация приложения в Google Play надо указывать целевую аудиторию и контент приложения. Для уже опубликованных приложений необходимо сделать обновления до 1 сентября 2019.
Android Developers Blog
Building a safer Google Play for kids
Posted by Kanika Sachdeva, Product Manager, Google Play At Google Play, we’re committed to providing a positive, safe environment for ...
#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