Android Broadcast
14.4K subscribers
3.68K photos
367 videos
11 files
6.1K links
Подборка новостей и статей для Android разработчиков.

Реклама и связь с автором @ab_manager

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
Вы можете подробнее изучить тему 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 исправит эту досадную реализацию
#Gradle #Flake #Test

Introducing flaky test mitigation tools for Gradle

Разработчики из Gradle представили новый плагин Test Retry Gradle Plugin, который повторяет выполнение неудачно выполнившихся тестов заданное количество раз. Flaky тесты отображаются специальным образом в тестовом отчете и Build Scan

Поддерживается следующие тестовые фреймворки:
👉 JUnit4
👉 JUnit Platform (JUnit 5)
👉 Spock
👉 TestNG
#DependencyInjection #Dagger #Fragment

Constructor injection into Fragments with respect of scopes

Android имеет одно неприятное ограничения - основные компоненты должны создаваться только через конструктор по умолчанию. Исключением стал Fragment в AndroidX.Fragment 1.1.0, который позволяет задать кастомную FragmentFactory в FragmentManager. Я уже ранее рассказывал как можно соединить Dagger и Inject в конструкторы Fragment.

В статье вы можете найти как решить проблему, когда у вас есть Dagger Scope и нужно делать inject зависимостей из них.
#AndroidAcademy #Minsk #Coroutines

Android Academy Minsk Advanced Topic #0 Coroutines

Android Academy Minsk начинает год с Advanced курса в рамках которого вы сможете узнать о более продвинутых практиках в Android разработке

Начнется курс с рассказа о Kotlin Coroutine. Kotlin изменил Android разработку и вывел ее на новый уровень. Coroutine позволили упростить написание асинхронного кода, сделав ее эффективнее и потребляя меньше ресурсов, а также представив Flow - реактивный подход, который по скорости работы уделывает RxJava 😮 И расскажет об этом всем Йонатан Левин.

Регистрируйтесь! Количество мест ограничено!
Задасто свои вопросы вы можете в @androidacademyminsk

Для тех кому не хватит мест - не переживайте, будут доступны записи докладов.

Следующим занятием пройдёт воркшоп, который позволит закрепить полученные знания на практике
#Security #Networking #OkHttp

How to Prepare Your Android App for a Pentest – Networking Edition

Pentests (penetration testing) - это симуляция кибер атаки на приложение с целью выявления уязвимостей, которые могут быть использованы злоумышленниками.

В статье разбираются такие понятия как TLS, Certificate pinning, Hostname verification, а самое главное интеграция этого в вашего приложения на основе OkHttp.