#Firebase
Firebase App Distribution - Distributing test releases of your apps
После покупки Google-ом Fabric все части платформы стали интегрироваться или заменяться сервисами в Firebase.
Этого постигло и сервис Fabric Beta на замену которому пришёл Firebase App Distribution. С помощью этого сервиса вы можете распространять тестовые сборки вашего Android или iOS приложения. Есть Gradle Plug-in, поддержка Fastlane и CLI.
В статье вы найдёте интро по сервису и как настроить его интеграцию в Gradle
Внимание: Fabric будет отключена 31 марта 2020 года и миграция для всех пользователей этого сервиса обязательна
Firebase App Distribution - Distributing test releases of your apps
После покупки Google-ом Fabric все части платформы стали интегрироваться или заменяться сервисами в Firebase.
Этого постигло и сервис Fabric Beta на замену которому пришёл Firebase App Distribution. С помощью этого сервиса вы можете распространять тестовые сборки вашего Android или iOS приложения. Есть Gradle Plug-in, поддержка Fastlane и CLI.
В статье вы найдёте интро по сервису и как настроить его интеграцию в Gradle
Внимание: Fabric будет отключена 31 марта 2020 года и миграция для всех пользователей этого сервиса обязательна
#UI
Edge-to-Edge - Android library for enabling edge-to-edge content and insetting views using simple Kotlin DSL
Android 10 стал активнее развивать идею «Edge-to-Edge», когда приложение занимает всю область экрана.
Одной из реализаций этого тренда стала поддержка навигации жестами и новые типы WindowInsets:
👉 MandatorySystemGestureInsets
👉 StableInsets
👉 SystemGestureInsets
👉 SystemWindowInsets
👉 TappableElementInsets
Однозначно стало все сложнее. Библиотека «Edge-to-Edge» призвана упростить работу с
Edge-to-Edge - Android library for enabling edge-to-edge content and insetting views using simple Kotlin DSL
Android 10 стал активнее развивать идею «Edge-to-Edge», когда приложение занимает всю область экрана.
Одной из реализаций этого тренда стала поддержка навигации жестами и новые типы WindowInsets:
👉 MandatorySystemGestureInsets
👉 StableInsets
👉 SystemGestureInsets
👉 SystemWindowInsets
👉 TappableElementInsets
Однозначно стало все сложнее. Библиотека «Edge-to-Edge» призвана упростить работу с
WindowInsets
GitHub
GitHub - sergejsha/edge-to-edge: Full screen Android apps using simple Kotlin DSL
Full screen Android apps using simple Kotlin DSL. Contribute to sergejsha/edge-to-edge development by creating an account on GitHub.
Вы можете подробнее изучить тему Android Insets из Android 10, посмотрев доклад Константина Цховребова - «Android Insets — deal with fears and get ready for Android Q»
#Gradle
Decommissioning HTTP for Gradle Services
Начиная с 15 января 2020 Gradle сервисы станут доступны только по HTTPS. Если вдруг у вас что-то перестанет собираться - обратите внимание.
Что будет затронуто:
👉 Gradle Plugin Portal (plugins.gradle.org/m2)
👉 Gradle Distributions - сервис для загрузки Gradle Wrapper
Проверьте в своем проекте
Decommissioning HTTP for Gradle Services
Начиная с 15 января 2020 Gradle сервисы станут доступны только по HTTPS. Если вдруг у вас что-то перестанет собираться - обратите внимание.
Что будет затронуто:
👉 Gradle Plugin Portal (plugins.gradle.org/m2)
👉 Gradle Distributions - сервис для загрузки Gradle Wrapper
Проверьте в своем проекте
distributionUrl
в файле gradle/wrapper/gradle-wrapper.properties
blog.gradle.org
Decommissioning HTTP for Gradle Services
Starting in January 2020, Gradle services will only serve requests made with HTTPS. From that point on,
all requests made with HTTP will be denied and any builds and artifact mirrors that use a Gradle URL wi...
all requests made with HTTP will be denied and any builds and artifact mirrors that use a Gradle URL wi...
#Tests #Intro
Серия статей которая делает вступление в типы тестирования на Android и с помощью каких инструментов их можно осуществлять
Статьи:
1️⃣ Типы тестов, пирамида, основные библиотеки и инструменты
2️⃣ Non-instrumented (они же Unit) тесты, Robolectrics
3️⃣ Instrumented тесты: UIAutomator, Espresso
4️⃣ "End-to-End" и ручное тестирование: Appium, типы "End-to-End" тестов
Серия статей которая делает вступление в типы тестирования на Android и с помощью каких инструментов их можно осуществлять
Статьи:
1️⃣ Типы тестов, пирамида, основные библиотеки и инструменты
2️⃣ Non-instrumented (они же Unit) тесты, Robolectrics
3️⃣ Instrumented тесты: UIAutomator, Espresso
4️⃣ "End-to-End" и ручное тестирование: Appium, типы "End-to-End" тестов
У меня всегда была мечта сделать конференцию для Android разработчиков. Только по этой технологии и все что связано с ней. Но мир суров и на любую конференцию нужен бюджет и аудитория. Очень хочется узнать интересно было ли вам прийти на такую конференцию.
Давайте обсуждать в @android_broadcast_discussions
Давайте обсуждать в @android_broadcast_discussions
Интересно вам сходить на конференцию по Android?
Final Results
31%
Да, но только бесплатно
35%
Да, готов заплатить (около 50$)
19%
Да, только за счет компании
7%
Нет
8%
Другое
#Kotlin #Operator
Companion object invoke operator overloading for default constructor argument in generic classes
Встречались ли вы с возможность, что вы можете создать объект интерфейса через конструктор? Спобов для этого 2:
👉 Создать функцию c именем интерфейса в том же пакете где лежит интерфейс (например так делается для List)
👉 Переопределить оператор invoke
В статье разбирается пример как
Companion object invoke operator overloading for default constructor argument in generic classes
Встречались ли вы с возможность, что вы можете создать объект интерфейса через конструктор? Спобов для этого 2:
👉 Создать функцию c именем интерфейса в том же пакете где лежит интерфейс (например так делается для List)
👉 Переопределить оператор invoke
В статье разбирается пример как
invoke
оператор помог задать дефолтное значение в конструкторе, в котором принимается generic параметрMedium
Companion object invoke operator overloading for default constructor argument in generic classes
A real world case in a coroutine test rule implementation
#JetpackCompose
A Deep Dive Into Jetpack Compose
"This article is not about how to use Jetpack Compose or its basics" - вот такой фразой начинается статья. В статье разбирается почему нам нужно заменить систему View и как это делается в Jetpack Compose
A Deep Dive Into Jetpack Compose
"This article is not about how to use Jetpack Compose or its basics" - вот такой фразой начинается статья. В статье разбирается почему нам нужно заменить систему View и как это делается в Jetpack Compose
Medium
A Deep Dive Into Jetpack Compose
Designing a Kotlin-first UI Kit
#Coroutines
Android Broadcast Podcast #4: "Coroutines Under The Hood" c Ильмиром Усмановым
Поговорили с Ильмиром Усмановым о устройстве Coroutine под капотом и о их будущем, а также о том какого работать в JetBrains над проектом, от которого миллионы разработчиков ждут покорения новых вершин.
Ильмис Усманов - разработчик Kotlin/JVM компилятора в JetBrains. За его плечами 6 лет опыта разработки компиляторов, 2 из которых - поддержка Coroutine в компиляторе. Также наш гость контрибьютил в ART (Android Runtime).
В выпуске вы узнаете:
- Как устроиться в JetBrains
- Как развлекаются программисты из JetBrains
- Coroutine в Jetpack Compose
- Почему релиз Jetpack Compose может затянуться
- Новый IR backend Kotlin компилятора
- Что будет в Kotlin 1.4 для Coroutine
- Jake Wharton исправляет байт-код от Kotlin/JVM
- Какие возможности могут появиться в Coroutine в будущем
- Улучшения в дебаггере IDEA для поддержки Coroutine
- Inline кода, благодаря которому Flow работают так быстро
Полезные ссылки:
👉 Coroutines Keep
👉 Доклад про inline Coroutine от Ильмира
👉 Kotlin Flow
👉 Kotlin Slack
👉 Kotlin Telegram
Android Broadcast Podcast #4: "Coroutines Under The Hood" c Ильмиром Усмановым
Поговорили с Ильмиром Усмановым о устройстве Coroutine под капотом и о их будущем, а также о том какого работать в JetBrains над проектом, от которого миллионы разработчиков ждут покорения новых вершин.
Ильмис Усманов - разработчик Kotlin/JVM компилятора в JetBrains. За его плечами 6 лет опыта разработки компиляторов, 2 из которых - поддержка Coroutine в компиляторе. Также наш гость контрибьютил в ART (Android Runtime).
В выпуске вы узнаете:
- Как устроиться в JetBrains
- Как развлекаются программисты из JetBrains
- Coroutine в Jetpack Compose
- Почему релиз Jetpack Compose может затянуться
- Новый IR backend Kotlin компилятора
- Что будет в Kotlin 1.4 для Coroutine
- Jake Wharton исправляет байт-код от Kotlin/JVM
- Какие возможности могут появиться в Coroutine в будущем
- Улучшения в дебаггере IDEA для поддержки Coroutine
- Inline кода, благодаря которому Flow работают так быстро
Полезные ссылки:
👉 Coroutines Keep
👉 Доклад про inline Coroutine от Ильмира
👉 Kotlin Flow
👉 Kotlin Slack
👉 Kotlin Telegram
YouTube
"Под капотом у Kotlin Coroutine" с Ильмиром Усмановым@JetBrains
Поговорили с Ильмиром Усмановым о устройстве Coroutine под капотом и о их будущем, а также о том какого работать в JetBrains над проектом, от которого миллионы разработчиков ждут покорения новых вершин.
Ильмис Усманов - разработчик Kotlin/JVM компилятора…
Ильмис Усманов - разработчик Kotlin/JVM компилятора…
#Kotlin
Safely accessing lateinit variables
Рецепт безопасного обращения к lateinit переменным в Kotlin, которое появилось в версии 1.2:
Только не проще ли бы использовать nullable property и использовать
Моя рекомендация - не стоит убегать от nullable значений,
Заменить
Safely accessing lateinit variables
Рецепт безопасного обращения к lateinit переменным в Kotlin, которое появилось в версии 1.2:
lateinit var fullName: String
if (::fullName.isInitialized) {
print("Hi, $fullName")
}
Только не проще ли бы использовать nullable property и использовать
null
со старой доброй проверкой if (fullName != null)
. Моя рекомендация - не стоит убегать от nullable значений,
lateinit
должно использовать только в случаях когда у вас инициализация происходит не в конструкторе, а в методе который вызывается сразу за ним, например Activity.onCreate()
. Причем метод откуда приходит значения не должен быть асинхронным.Заменить
lateinit
можно nullable property или делегатом lazy. А вообще используйте его только с Dagger в Android компонентах.Okkotlin
Safely accessing lateinit variables
Lateinit variables are handy when we can't define a variable value upfront. Let's see how we can safely access lateinit variables without crashing our program.
#MotionLayout #Animation
Creating Onboarding Flow with MotionLayout
MotionLayout и визуальный редактор анимаций на его основе уже стучатся в дверь в Android Studio 4.0. В статье автор разбирает как с помощь нового Layout сделали красивую анимацию Onboarding с Bubble
Creating Onboarding Flow with MotionLayout
MotionLayout и визуальный редактор анимаций на его основе уже стучатся в дверь в Android Studio 4.0. В статье автор разбирает как с помощь нового Layout сделали красивую анимацию Onboarding с Bubble
Medium
Creating Onboarding Flow with MotionLayout
The Android platform offers the ability to completely customise components that are not available in the prebuilt widgets and layouts or…
#Kotlin #CodeQuality #Coroutines
Вышел Detekt 1.4.0
Вышла новая версия статического анализатора Kotlin кода Detekt 1.4.0 в которой появилась поддержка правил для Coroutine. Полный список изменений:
🔥 Новая категория правил
🔥 Новое правило
🔥 Новое правило
👉 KtLint обновлён до 0.36.0
👉 Свойства
👉 Улучшен анализ кода некоторыми правилами
👉 Исправление багов
Вышел Detekt 1.4.0
Вышла новая версия статического анализатора Kotlin кода Detekt 1.4.0 в которой появилась поддержка правил для Coroutine. Полный список изменений:
🔥 Новая категория правил
coroutines
🔥 Новое правило
GlobalCoroutineUsage
, которое отслеживает использование GlobalScope. По умолчанию выключено🔥 Новое правило
RedundantSuspendModifier
, которое проверят,что suspend
модификатор указан только там, где это нужно. Например, у функций у которых есть вызов других suspend
функций👉 KtLint обновлён до 0.36.0
👉 Свойства
ignoreOverriddenFunction
и ignoreOverriddenFunctions
для некоторых правил унифицированы в одно - ignoreOverridden
👉 Улучшен анализ кода некоторыми правилами
👉 Исправление багов
#Gradle
Optional dependencies are not optional
Gradle в версии номер 6.0 добавил много возможностей для управления зависимостями. Также этому помогло введение в боевой режим Gradle Module Metadata, который позволяет описывать больше информации по сравнению с
В статье разбирается подключение опциональных зависимостей и подключать опциональные зависимости для необходимых функций вашего приложения
Optional dependencies are not optional
Gradle в версии номер 6.0 добавил много возможностей для управления зависимостями. Также этому помогло введение в боевой режим Gradle Module Metadata, который позволяет описывать больше информации по сравнению с
pom.xml
. В статье разбирается подключение опциональных зависимостей и подключать опциональные зависимости для необходимых функций вашего приложения
blog.gradle.org
Optional dependencies are not optional
In a previous blog post, we demonstrated how capabilities could be used to elegantly solve the problem of having multiple logging frameworks on the classpath.
In this post, we will again use this concept in ...
In this post, we will again use this concept in ...
#UI #ConstraintLayout
The Essential Components of ConstraintLayout
ConstraintLayout призван создавать сложные иерархию View без необходимости вложений. Возможности о которых вы могли не знать:
👉 Соотношение сторон (замена PercentFrameLayout)
👉 Guideline
👉 Barrier
👉 Group
👉 Chains (замена LinearLayout)
👉 Flow
Эти возможности разбираются в статье, за исключением Flow (про него читайте в отдельной статье)
The Essential Components of ConstraintLayout
ConstraintLayout призван создавать сложные иерархию View без необходимости вложений. Возможности о которых вы могли не знать:
👉 Соотношение сторон (замена PercentFrameLayout)
👉 Guideline
👉 Barrier
👉 Group
👉 Chains (замена LinearLayout)
👉 Flow
Эти возможности разбираются в статье, за исключением Flow (про него читайте в отдельной статье)
Medium
The Essential Components of ConstraintLayout
Explore the perks of ConstraintLayout
#RxJava #Kotlin
Fundamentals of RxJava with Kotlin for absolute beginners
Хороше интро в мир RxJava на Kotlin:
👉 Что такое RxJava
👉 Создание Observable
👉 Backpressure
👉 Типы emitter: Flowable, Maybe, Single, Completable
👉 Schedulers
👉 Операторы
👉 Disposable - отмена выполнения
👉 Subject = Observable + Observer
Fundamentals of RxJava with Kotlin for absolute beginners
Хороше интро в мир RxJava на Kotlin:
👉 Что такое RxJava
👉 Создание Observable
👉 Backpressure
👉 Типы emitter: Flowable, Maybe, Single, Completable
👉 Schedulers
👉 Операторы
👉 Disposable - отмена выполнения
👉 Subject = Observable + Observer
Medium
Fundamentals of RxJava with Kotlin for absolute beginners
Reactive programming provides a solid foundation towards a scalable application, and today I will give you an introduction on how to use…
#MotionLayout #Animation #AndroidStudio
How to perfect android animations using MotionLayout
MotionLayout привносит совсем новый уровень удобства создания анимаций в Android Studio, создавая их не в коде, а через визуальный редактор. В статье разбирается как сделать анимацию с помощью нового инструмента
How to perfect android animations using MotionLayout
MotionLayout привносит совсем новый уровень удобства создания анимаций в Android Studio, создавая их не в коде, а через визуальный редактор. В статье разбирается как сделать анимацию с помощью нового инструмента
Medium
How to perfect android animations using MotionLayout
Animations are fantastic.
#WorkManager
When WorkManager Stops Working
Будьте внимательны при использование Work Manager unique work и политики APPEND. Проблема заключается в том, что это политика реализована на цепочках и если одна из задач выполняется с ошибкой, то все последующие не будут выполняться.
Что можно сделать:
👉 Не использовать политику APPEND
👉 Никогда не давать unique work завершаться с ошибкой. Только Success и внутри объект с результатом
👉 Использовать WorkManager.pruneWork()
Ждем когда Google исправит эту досадную реализацию
When WorkManager Stops Working
Будьте внимательны при использование Work Manager unique work и политики APPEND. Проблема заключается в том, что это политика реализована на цепочках и если одна из задач выполняется с ошибкой, то все последующие не будут выполняться.
Что можно сделать:
👉 Не использовать политику APPEND
👉 Никогда не давать unique work завершаться с ошибкой. Только Success и внутри объект с результатом
👉 Использовать WorkManager.pruneWork()
Ждем когда Google исправит эту досадную реализацию