#Java #D8 #Desugarung #JakeWharton
D8 Library Desugaring
Все Android разработчики знакомы с фрагментированностью платформы, что не дает нам использовать последнии версии Android SDK в приложениях. Google помогла в решение этой проблемы, предоставля библиотеки AndroidX.
Есть одно "НО" - проблема не решена для Java API. Android разработчики стали чувствовать проблему меньше с приходом Kotlin, но все же в JDK есть интересные API:
👉 Java 8 Stream Collection (API 24)
👉 Java 8 Date Time (API 26)
👉 Optional (API 24)
👉 CompletableFuture (API 24)
Использовать в большинстве приложений не получится т.к. наиболее распространенные minSdk - это 21 или 23.
В Android Studio 4.0 (а точнее в Android Gradle Plugin и D8) была добавлена новая возможность “core library desugaring”, которая позволяет делать бэкпорт этих API, а также новых методов, появившиеся в других API (более подробный список здесь) и исправлять баги в Java API на старых версиях Android.
В своей статье Jake разбирается как устроена новая фича в D8
D8 Library Desugaring
Все Android разработчики знакомы с фрагментированностью платформы, что не дает нам использовать последнии версии Android SDK в приложениях. Google помогла в решение этой проблемы, предоставля библиотеки AndroidX.
Есть одно "НО" - проблема не решена для Java API. Android разработчики стали чувствовать проблему меньше с приходом Kotlin, но все же в JDK есть интересные API:
👉 Java 8 Stream Collection (API 24)
👉 Java 8 Date Time (API 26)
👉 Optional (API 24)
👉 CompletableFuture (API 24)
Использовать в большинстве приложений не получится т.к. наиболее распространенные minSdk - это 21 или 23.
В Android Studio 4.0 (а точнее в Android Gradle Plugin и D8) была добавлена новая возможность “core library desugaring”, которая позволяет делать бэкпорт этих API, а также новых методов, появившиеся в других API (более подробный список здесь) и исправлять баги в Java API на старых версиях Android.
В своей статье Jake разбирается как устроена новая фича в D8
#IDEA
IntelliJ Platform Roadmap for 2020
Скорее всего любой Android разработчик пользуется Android Studio, а также Flutter разработчики. Базируется на Android Studio на основе InjelliJ IDEA от JetBrains. Авторы перед наступающим годом рассказали о свои планах по улучшению IDE в 2020:
👉 Скорость индексации проекта
👉 Улучшение в многопоточности
👉 Загрузка/выгрузка плагинов без перезагрузки
👉 Поддержка «парного программирования» (Collaborative Editing)
👉 Сборка и дебаг кода на удаленной машине (Cloud Execution)
👉 Редизайн модели проекта, которая позволит убрать текущие ограничения
Нас ждет очень много интересного и часть этих изменений будет попадать в Community Edition, что позволит нам получить их в Android Studio, естественно с задержками.
IntelliJ Platform Roadmap for 2020
Скорее всего любой Android разработчик пользуется Android Studio, а также Flutter разработчики. Базируется на Android Studio на основе InjelliJ IDEA от JetBrains. Авторы перед наступающим годом рассказали о свои планах по улучшению IDE в 2020:
👉 Скорость индексации проекта
👉 Улучшение в многопоточности
👉 Загрузка/выгрузка плагинов без перезагрузки
👉 Поддержка «парного программирования» (Collaborative Editing)
👉 Сборка и дебаг кода на удаленной машине (Cloud Execution)
👉 Редизайн модели проекта, которая позволит убрать текущие ограничения
Нас ждет очень много интересного и часть этих изменений будет попадать в Community Edition, что позволит нам получить их в Android Studio, естественно с задержками.
JetBrains
IntelliJ IDEA – the IDE for Pro Java and Kotlin Development
IntelliJ IDEA is the JetBrains IDE for pro development in Java and Kotlin. Built for your comfort, it unlocks productivity, ensures quality code, supports cutting-edge tech, and protects your privacy.
#Kotlin #Multiplatform #Podcast
Kotlin Multiplatform - выходим за рамки Kotlin/Android c IceRock
Поговорили c Android разработчиками из компании IceRock об их опыте разработке на Kotlin не только под Android, но и под iOS с использованием Kotlin Multiplatform: как прошел этот переход, пришлось ли изучать множество новых технологий, помогло ли им это развиваться и улучшило ли это скорость написания проектов и их качество.
Kotlin Multiplatform - выходим за рамки Kotlin/Android c IceRock
Поговорили c Android разработчиками из компании IceRock об их опыте разработке на Kotlin не только под Android, но и под iOS с использованием Kotlin Multiplatform: как прошел этот переход, пришлось ли изучать множество новых технологий, помогло ли им это развиваться и улучшило ли это скорость написания проектов и их качество.
YouTube
Kotlin Multiplatform: Выходим за рамки Kotlin/Android c IceRock
Поговорили c Android разработчиками из компании IceRock об их опыте разработке на Kotlin не только под Android, но и под iOS с использованием Kotlin Multipla...
В компании какого типа работаете вы?
Final Results
32%
Аутсорс (для сторонних компания)
47%
Продуктовая (собственные публичные приложения)
3%
Фрилансер
1%
Работаю сам на себя
13%
Аутсорс + Продуктовая (2 профиля в одной компании)
3%
Другой
#JetpackCompose
Если вы следите за развитием Jetpack Compose, то вам стоит обратить внимание на официальный пример JetNews. В develop ветке репозитория обновляется все на основе последних изменений в snapshot версии Jetpack Compose.
Если вы следите за развитием Jetpack Compose, то вам стоит обратить внимание на официальный пример JetNews. В develop ветке репозитория обновляется все на основе последних изменений в snapshot версии Jetpack Compose.
GitHub
GitHub - android/compose-samples: Official Jetpack Compose samples.
Official Jetpack Compose samples. Contribute to android/compose-samples development by creating an account on GitHub.
#Codelab #Coroutines #ArchitectureComponents
Advanced Coroutines with Kotlin Flow and LiveData
Продолжительность: 57 минут
В библиотеках ViewMode, Lifecycle и LiveData 2.2.0 было добавлена расширенная поддержка Kotlin Coroutines:
👉 Специальный билдер
👉 Конвертация
👉 Поддержка запуска
В новой Codelab вы можете найти практическое занятие, которое поможет усвоить вам все аспекты нового функционала, а также расскажет о
Почему стоит обратить внимание на
1️⃣ Это полностью нативный для Kotlin способ для работы с реактивными потоками данных
2️⃣ Он проще чем RxJava. Написать свой оператор намного проще
3️⃣ Flow быстрее RxJava и других существующих реализации Rx на Java/Kotlin (тесты есть в репозитории kotlinx.coroutines)
Advanced Coroutines with Kotlin Flow and LiveData
Продолжительность: 57 минут
В библиотеках ViewMode, Lifecycle и LiveData 2.2.0 было добавлена расширенная поддержка Kotlin Coroutines:
👉 Специальный билдер
liveData {}
, который внутри может выполнять suspend функции👉 Конвертация
Flow
<-> LiveData
👉 Поддержка запуска
Coroutine
с Lifecycle
и соответсвующие CoroutineScope
в Fragment
и Activity
В новой Codelab вы можете найти практическое занятие, которое поможет усвоить вам все аспекты нового функционала, а также расскажет о
Flow
, принципах работы с ними и его интеграции в ваши Android приложения для решения распространённых задач.Почему стоит обратить внимание на
Flow
?1️⃣ Это полностью нативный для Kotlin способ для работы с реактивными потоками данных
2️⃣ Он проще чем RxJava. Написать свой оператор намного проще
3️⃣ Flow быстрее RxJava и других существующих реализации Rx на Java/Kotlin (тесты есть в репозитории kotlinx.coroutines)
Google Codelabs
Learn advanced coroutines with Kotlin Flow and LiveData
In this codelab, you’ll build a coroutine-based Android app that uses Architecture Components to fetch data from the network and a Room database.
#Kotlin #Coroutines #Flow
Instant Search with Kotlin Coroutines
В продолжение темы работы с Coroutine Flow - в статье разбирается задача организации поиска «на лету» (по мере ввода) в UI для Android на основе Flow.
Instant Search with Kotlin Coroutines
В продолжение темы работы с Coroutine Flow - в статье разбирается задача организации поиска «на лету» (по мере ввода) в UI для Android на основе Flow.
Hellsoft
Instant Search with Kotlin Coroutines
A guide for implementing instant search in an Android application using Kotlin Coroutines, and how to write a test for it.
#Coroutine
В последнее время я нахожу много материалов по Kotlin Coroutine. Думаю, что это связано с тем что Kotlin Coroutine активно пропагандируются командой Android для решения асинхронных задач и то что Flow - это способ решения задач для обработки потоков данных (замена RxJava). С одной стороны я понимаю, что пропаганда этого подхода - закономерный шаг при лозунге «Kotlin First» в Android. Но что там с альтернативами? На подходе RxJava 3, есть Reaktive - Rx на чистом Kotlin, возможно кто-то строит асинхронные запросы на основе стандартного API в Android SDK/JDK.
Не могу скрывать, что я и сам придерживаюсь подхода Kotlin Coroutine. Тяну ли я Coroutine в свои проекты - регулярно! Я люблю поделиться своим опытом или рассказать о результатах интересных исследований, поэтому выступаю с докладами, в рамках которых я имею возможность проводить краткие опросы. Результаты опроса «Используете ли вы Coroutine?» меня печалят - большая часть зала пользуется RxJava для асинхронных задач.
К чему я все это вёл - дайте свой фидбек почему так происходит и я постараюсь исправить ситуацию. Заказчика вашего переубедить я не смогу, но помочь с повышением уровня знаний - запросто.
Присоединяетесь к обсуждению в @android_broadcast_discussions
В последнее время я нахожу много материалов по Kotlin Coroutine. Думаю, что это связано с тем что Kotlin Coroutine активно пропагандируются командой Android для решения асинхронных задач и то что Flow - это способ решения задач для обработки потоков данных (замена RxJava). С одной стороны я понимаю, что пропаганда этого подхода - закономерный шаг при лозунге «Kotlin First» в Android. Но что там с альтернативами? На подходе RxJava 3, есть Reaktive - Rx на чистом Kotlin, возможно кто-то строит асинхронные запросы на основе стандартного API в Android SDK/JDK.
Не могу скрывать, что я и сам придерживаюсь подхода Kotlin Coroutine. Тяну ли я Coroutine в свои проекты - регулярно! Я люблю поделиться своим опытом или рассказать о результатах интересных исследований, поэтому выступаю с докладами, в рамках которых я имею возможность проводить краткие опросы. Результаты опроса «Используете ли вы Coroutine?» меня печалят - большая часть зала пользуется RxJava для асинхронных задач.
К чему я все это вёл - дайте свой фидбек почему так происходит и я постараюсь исправить ситуацию. Заказчика вашего переубедить я не смогу, но помочь с повышением уровня знаний - запросто.
Присоединяетесь к обсуждению в @android_broadcast_discussions
Почему вы не используете Coroutine в своём проекте на работе?
Anonymous Poll
34%
Мне повезло - я использую Coroutine
4%
Все просто - не нравятся Coroutine
11%
Меня устраивает как было раньше
4%
Не даёт втянуть заказчик
19%
Из-за legacy кода ограничены в возможностях
5%
Сложность изучения
9%
Другой вариант
13%
Посмотреть результаты
#Kotlin #CodeQuality
Вышел Detekt 1.3.0
Вышла новая версия утилиты для проверки качества Kotlin кода. В обновлении произошли следующие важные изменения:
👉 Новые правила: UnnecessaryAnnotationUseSiteTarget и MapGetWithNotNullAssertionOperator
👉 Минимальная поддерживаемая версия Gradle выросла до 5.0
👉 Исправление багов
👉 Улучшения в документации
Вышел Detekt 1.3.0
Вышла новая версия утилиты для проверки качества Kotlin кода. В обновлении произошли следующие важные изменения:
👉 Новые правила: UnnecessaryAnnotationUseSiteTarget и MapGetWithNotNullAssertionOperator
👉 Минимальная поддерживаемая версия Gradle выросла до 5.0
👉 Исправление багов
👉 Улучшения в документации
#Git #Tests #Modularization
Selectively running Android modularized unit tests on your CI server
Рецепт как запускать тесты только в тех модулях, в которых произошли изменения в вашем ПР. Это позволит уменьшить количество применяемых тестов и быстрее проверять ПР.
Selectively running Android modularized unit tests on your CI server
Рецепт как запускать тесты только в тех модулях, в которых произошли изменения в вашем ПР. Это позволит уменьшить количество применяемых тестов и быстрее проверять ПР.
#News
Для всех кто слушает подкаст от Android Broadcast и любит Apple сервисы есть радостная новость - подкаст стал доступен в Apple Podcasts.
Для тех же кто пользуется Android подкаст можно найти в SoundCloud и Pocket Cast. Пишите в личку @krlrozov, если хотите увидеть подкаст и в других ваших любимых сервисах.
Для всех кто слушает подкаст от Android Broadcast и любит Apple сервисы есть радостная новость - подкаст стал доступен в Apple Podcasts.
Для тех же кто пользуется Android подкаст можно найти в SoundCloud и Pocket Cast. Пишите в личку @krlrozov, если хотите увидеть подкаст и в других ваших любимых сервисах.
#MotionLayout #Animation
MotionLayout: A new way to create animations on Android
Обещанного 3 года ждут? Мы ждали Motion Editor всего 2 😁. Уже в Android Studio 4.0 Motion Editor доступен всем! Теперь мы получили удобный визуальный редактор для анимаций и пора вспомнить, что было и как MotionLayout меняет игры в анимацию!
MotionLayout: A new way to create animations on Android
Обещанного 3 года ждут? Мы ждали Motion Editor всего 2 😁. Уже в Android Studio 4.0 Motion Editor доступен всем! Теперь мы получили удобный визуальный редактор для анимаций и пора вспомнить, что было и как MotionLayout меняет игры в анимацию!
Autsoft Zrt.
MotionLayout: A new way to create animations on Android
Oh, no! A new animation framework for Android, again? We have quite a few already, do we really need a new one? First, let's see the previous approaches we used to create animations in our applications! Animation solutions so far ObjectAnimator This subclass…
#Новости
Всем привет! Вот уже пошел третий день как на канале не появляются новости. Я не ленюсь и все также смотрю и читаю новости, пытаюсь найти что-то интересное, но видно все авторы ушли в новогодние 🎄и рождественские 🔔праздники, в связи с чем и контента пока будет меньше чем обычно.
Вы всегда можете поскролить вверх, посмотреть ранние статьи или нажать хэштег и найти всё по интересующей вас теме.
Всем привет! Вот уже пошел третий день как на канале не появляются новости. Я не ленюсь и все также смотрю и читаю новости, пытаюсь найти что-то интересное, но видно все авторы ушли в новогодние 🎄и рождественские 🔔праздники, в связи с чем и контента пока будет меньше чем обычно.
Вы всегда можете поскролить вверх, посмотреть ранние статьи или нажать хэштег и найти всё по интересующей вас теме.
#BestPractices
The Seven (Actually 10) Cardinal Sins of Android Development
Мы все крутые программисты, но даже мы можем допустить ошибки. Спешим быстрее закончить, чтобы переключиться на новую задачу. Может сроки жмут и надо быстрее сдать или уже накрыт стол и какое тут до задач. Довольно часто причиной служит незнание каких-то аспектов.
В статье разбираются ошибки, которые не стоит допускать в вашем коде. С чем-то из этого вы будете знакомы, а с чем-то нет:
👉 Статические ссылки на Android компоненты с жизненным циклом (
👉 Неправильно получение ссылки на
👉 Хранение
👉 Аргументы в конструкторе
👉 Задание переменных
👉 Не сохранять состояние через в
👉 Загружать данные только при
👉 Инициализация
👉 Переопределение
👉 Не final static переменные
The Seven (Actually 10) Cardinal Sins of Android Development
Мы все крутые программисты, но даже мы можем допустить ошибки. Спешим быстрее закончить, чтобы переключиться на новую задачу. Может сроки жмут и надо быстрее сдать или уже накрыт стол и какое тут до задач. Довольно часто причиной служит незнание каких-то аспектов.
В статье разбираются ошибки, которые не стоит допускать в вашем коде. С чем-то из этого вы будете знакомы, а с чем-то нет:
👉 Статические ссылки на Android компоненты с жизненным циклом (
Activity
/Fragment
/View
и др.)👉 Неправильно получение ссылки на
Fragment
👉 Хранение
Fragment
в FragmentPagerAdapter
(ViewPager
)👉 Аргументы в конструкторе
Fragment
👉 Задание переменных
Fragment
с использованием set функций при создании👉 Не сохранять состояние через в
Bundle
при использование ViewModel
👉 Загружать данные только при
savedInstanceState == null
👉 Инициализация
Fragment
в некорректном состоянии👉 Переопределение
onResume()
/onPause()
для всего подряд👉 Не final static переменные
Medium
The Seven (Actually 10) Cardinal Sins of Android Development
Merry Christmas to everyone! In this article, I intend to show you a few commonly recurring mistakes that some developers make by accident…
#LiveData #Kotlin #Nullability
Improving LiveData nullability in Kotlin
Не раздражало ли вас, что при объявлении
Проблема заключается в том, что LiveData написана на Java и ничего не знает о системе типов в Kotlin и особенностях Generic. Исправить это через -ktx библиотеки не получится, так как надо переписывать LiveData на Kotlin или иметь спец аннотации для Java, чтобы обеспечивать совместимость.
В статье автор описывает не самое красивое решение, но эффективное - создание подкласса
Improving LiveData nullability in Kotlin
Не раздражало ли вас, что при объявлении
LiveData<Value>
в Kotlin, вы все равно можете получить null
в Observer
или задать null
значение через LiveData.value
? Проблема заключается в том, что LiveData написана на Java и ничего не знает о системе типов в Kotlin и особенностях Generic. Исправить это через -ktx библиотеки не получится, так как надо переписывать LiveData на Kotlin или иметь спец аннотации для Java, чтобы обеспечивать совместимость.
В статье автор описывает не самое красивое решение, но эффективное - создание подкласса
MutableLiveData
с полной поддержкой Kotlin.Medium
Improving LiveData nullability in Kotlin
LiveData’s interop with Kotlin has always been a bit tricky. This blurb shows one way to handle LiveData’s nullability in a Kotlin world.
#Coroutines #Flow #Reactive
Back-pressure in Kotlin Flows
Back-pressure - это та вещь про которую надо задумываться когда вы работает с Reactive подходами. Back-pressure - это когда источник данных посылает новые данные быстрее чем им может обработать подписчик. Из-за этого возникает необходимость задания политики что делать с очередью данных.
В статье разбирается как об Back-pressure не надо задумываться когда вы используете Coroutine Flow, благодаря suspend функциям и принципам их работы.
Back-pressure in Kotlin Flows
Back-pressure - это та вещь про которую надо задумываться когда вы работает с Reactive подходами. Back-pressure - это когда источник данных посылает новые данные быстрее чем им может обработать подписчик. Из-за этого возникает необходимость задания политики что делать с очередью данных.
В статье разбирается как об Back-pressure не надо задумываться когда вы используете Coroutine Flow, благодаря suspend функциям и принципам их работы.
Medium
Backpressure in Kotlin Flows
This is one of the best features of reactive programming and it is borrowed from fluid dynamics. Wikipedia defines it as:
#AndroidX #Browser
AndroidX Browser 1.2.0
Вышла новая мажорная версия библиотеки Browser 1.2.0 в которой произошли следующие ключевые изменения:
👉 Поддержка Trusted Web Activities вышла в Stable
👉 Поддержка темной темы для ChromeCustomTab
👉 CustomTabsSession может быть создана с заданным заранее id, что позволяет объединять сессию с одного клиента для последовательно запущенных CustomTab
AndroidX Browser 1.2.0
Вышла новая мажорная версия библиотеки Browser 1.2.0 в которой произошли следующие ключевые изменения:
👉 Поддержка Trusted Web Activities вышла в Stable
👉 Поддержка темной темы для ChromeCustomTab
👉 CustomTabsSession может быть создана с заданным заранее id, что позволяет объединять сессию с одного клиента для последовательно запущенных CustomTab
Android Developers
Browser | Jetpack | Android Developers
#Dagger #IDEA
Introducing Scabbard: Easily visualize Dagger 2 dependency graphs
Это случилось - плагин для визуализации графа зависимостей Dagger 2. И называется это счастье - Scabbard. Он позволяет увидеть Component, Subcomponent, зависимости, их Scope и отношения между ними.
Проект еще в разработке и находится в версии 0.1.0
👉 Gihub проекта
👉 Инструкция по настройке
Introducing Scabbard: Easily visualize Dagger 2 dependency graphs
Это случилось - плагин для визуализации графа зависимостей Dagger 2. И называется это счастье - Scabbard. Он позволяет увидеть Component, Subcomponent, зависимости, их Scope и отношения между ними.
Проект еще в разработке и находится в версии 0.1.0
👉 Gihub проекта
👉 Инструкция по настройке
This media is not supported in your browser
VIEW IN TELEGRAM
Пример визуализации графа из Android Studio