Android Broadcast
14.2K subscribers
3.52K photos
339 videos
11 files
5.89K links
Подборка новостей и статей для Android разработчиков.

Связь с автором @android_broadcast_bot
Реклама @android_broadcast_bot

РКН https://abdev.by/rkn_tg_ab
Download Telegram
#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 года и миграция для всех пользователей этого сервиса обязательна
#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» призвана упростить работу с WindowInsets
Вы можете подробнее изучить тему Android Insets из Android 10, посмотрев доклад Константина Цховребова - «Android Insets — deal with fears and get ready for Android Q»
#UI #Audio

AudioRecordView

Библиотека для визуализации аудио во время записи
#Gradle

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
#Tests #Intro

Серия статей которая делает вступление в типы тестирования на Android и с помощью каких инструментов их можно осуществлять

Статьи:
1️⃣ Типы тестов, пирамида, основные библиотеки и инструменты
2️⃣ Non-instrumented (они же Unit) тесты, Robolectrics
3️⃣ Instrumented тесты: UIAutomator, Espresso
4️⃣ "End-to-End" и ручное тестирование: Appium, типы "End-to-End" тестов
У меня всегда была мечта сделать конференцию для Android разработчиков. Только по этой технологии и все что связано с ней. Но мир суров и на любую конференцию нужен бюджет и аудитория. Очень хочется узнать интересно было ли вам прийти на такую конференцию.

Давайте обсуждать в @android_broadcast_discussions
#Kotlin #Operator

Companion object invoke operator overloading for default constructor argument in generic classes

Встречались ли вы с возможность, что вы можете создать объект интерфейса через конструктор? Спобов для этого 2:
👉 Создать функцию c именем интерфейса в том же пакете где лежит интерфейс (например так делается для List)
👉 Переопределить оператор invoke

В статье разбирается пример как invoke оператор помог задать дефолтное значение в конструкторе, в котором принимается generic параметр
#JetpackCompose

A Deep Dive Into Jetpack Compose

"This article is not about how to use Jetpack Compose or its basics" - вот такой фразой начинается статья. В статье разбирается почему нам нужно заменить систему View и как это делается в Jetpack Compose
#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
#Kotlin

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 компонентах.
#MotionLayout #Animation

Creating Onboarding Flow with MotionLayout

MotionLayout и визуальный редактор анимаций на его основе уже стучатся в дверь в Android Studio 4.0. В статье автор разбирает как с помощь нового Layout сделали красивую анимацию Onboarding с Bubble
#Kotlin #CodeQuality #Coroutines

Вышел 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, который позволяет описывать больше информации по сравнению с pom.xml.

В статье разбирается подключение опциональных зависимостей и подключать опциональные зависимости для необходимых функций вашего приложения
#UI #ConstraintLayout

The Essential Components of ConstraintLayout

ConstraintLayout призван создавать сложные иерархию View без необходимости вложений. Возможности о которых вы могли не знать:
👉 Соотношение сторон (замена PercentFrameLayout)
👉 Guideline
👉 Barrier
👉 Group
👉 Chains (замена LinearLayout)
👉 Flow

Эти возможности разбираются в статье, за исключением Flow (про него читайте в отдельной статье)
#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
#MotionLayout #Animation #AndroidStudio

How to perfect android animations using MotionLayout

MotionLayout привносит совсем новый уровень удобства создания анимаций в Android Studio, создавая их не в коде, а через визуальный редактор. В статье разбирается как сделать анимацию с помощью нового инструмента
#WorkManager

When WorkManager Stops Working

Будьте внимательны при использование Work Manager unique work и политики APPEND. Проблема заключается в том, что это политика реализована на цепочках и если одна из задач выполняется с ошибкой, то все последующие не будут выполняться.

Что можно сделать:
👉 Не использовать политику APPEND
👉 Никогда не давать unique work завершаться с ошибкой. Только Success и внутри объект с результатом
👉 Использовать WorkManager.pruneWork()

Ждем когда Google исправит эту досадную реализацию