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

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

РКН https://abdev.by/rkn_tg_ab
Download Telegram
#CustomView

Documenting your XML attributes – Custom View

Многим приходилось сталкиваться с View не из Android SDK или AndroidX, а также писать их самостоятельно. И самое обидное порой, что разработчик может добавить множество XML атрибутов для кастомизации View, но не задокументировать их. Зачастую в таком случае единственным источником правды становится репозиторий проекта на GitHub, а то и вовсе исходник.

В статье разбирается как задокументировать атрибуты View и как это улучшит разработку.
#Coroutines #Flow #RxJava

From RxJava 2 to Kotlin Flow: Threading

Kotlin Flow - это реализация реактивных стримов на основе Coroutine, и естественно Android разработчики будут сравнивать ее к тому, чему уже привыкли - RxJava 2.

В статье автор проводит сравнение работы по управлению Java потоками выполнения в RxJava Obserable и Coroutine Flow, а также миграции с первого подхода на последний.
#WebView #DarkTheme

Enabling dark theme in Android WebViews

Темная тема - крутая фича, но проблемным местом ее интеграции оставалось WebView, где контент отрисовывается независимо от приложения с чем адаптация этого виджета для поддержки темной темы становилась сложнее.

Следующая версия библиотеки androidx.webkit 1.2.0 (пока достигла статуса alpha01) добавляет возможности по работе с темной темой
#DevFest

GDG DevFest On Demand

Google собрала видеозаписи всех докладов сезона DevFest 2019 года со всех уголков мира и по всем темам в одном месте
#UI #ServerDrivenUi

Dynamic screens using server-driven UI in Android

Не любой контент получится отобразить простым путём маппинга модели на UI. Порой описание элементов могут иметь множество полей разного типа и меняться в зависимости от типа элемента. Как же решать эту задачу?

Построить одну универсальную View и скрывать/показывать поля? Может сработать, но решение не гибкое и код станет кучей if...else. На помощь может прийти решение Server Driven UI (SDUI), когда сервер управляет тем, что показать и как. Нечто подобное HTML, но SDUI - нативное и более ограничено в возможностях.

В статье рассматривается пример реализации описания формата для SDUI и различные фреймворки, которые позволяют отображать его: Litho от Facebook, Epoxy от Airbnb и другие менее известные
This media is not supported in your browser
VIEW IN TELEGRAM
Анонсирована Kotlin Conf 2020! Она пройдет в Канаде, 9 - 11 сентября.

Грустно, добраться туда далековато и непросто. Придется пропустить этот год и ждать возвращения конференции в Европу, а может и Россию.
#ViewModel #ArchitectureComponent #UnderTheHood

Android ViewModel. How it works

Android Architecture Components - довольно популярное решение на сегодня в Android разработке. Понимание механизмов работы его компонентов поможет эффективнее использовать его и подать идеи как реализовать другой функционал с использованием аналогичных механизмов.

В статье разбирается:
👉 ViewModelProvider
👉 ViewModelStore
👉 ViewModelStoreOwner
👉 Эволюция ViewModel: 2017, 2018, 2019
👉 Где хранится ViewModel чтобы переживать пересоздания Activity/Fragment при смене конфигурации
​​#Animation

Change Theme Dynamically with Circular Reveal Animation on Android

Разбор того, как работает анимация смены темы в Telegram
#Dagger #DependencyInjection

Вышел Dagger 2.26

Новая версия популярного DI фреймворка увидела свет. Она не привнесла значительных изменений, но постаралась сделать библиотеку лучше:
👉 Миграция dagger-android на AndroidX. Версия на Android Support Library также доступна
👉 Исправление багов инкрементальной компиляции
👉 Удаление использование не Android API из Guava
👉 Breaking changes: companion object больше нельзя объявлять как @Module для Dagger Component. Добавление аннотации необходимо только на внешнем классе.
#Kotlin #CodeQuality

Вышел Detekt 1.5.0

В новой версии статического анализатора Kotlin кода вы найдёте:
👉 Detekt теперь по умолчанию «тихий». Это значит, что в выводе будут появляться только сообщения об найденных проблемах
👉 Detekt по умолчанию будут помечать сборку как «failed» если найдена хотя бы одна проблема
👉 Улучшение HTML отчетов
👉 Новое правило ExplicitCollectionElementAccessMethod - замена вызова get() и set() у List и Map на синтаксис через []
👉 Новое правило ForbiddenMethod - возможность задать список методов, запрещенных к вызову
👉 Исправление багов
#Coroutines

Coroutines and Java Synchronization Don't Mix

Kotlin Coroutine - это не только другой стиль написания асинхронного кода (по сравнению с Java Thread), но и отличия в реализации использования Java потоков под капотом. Coroutine реализованы на основе continuation-passing style. Это ведёт к тому, что не все средства синхронизации к которым привыкли разработчики с Java будут работать с Kotlin Coroutines.

В статье разбирается особенность работы synchronized и почему не стоит его использовать с Coroutine.
#Text

A simple implementation of rounded background for text in Android

Механизм Span - мощный инструмент для кастомизации текста. В статье разбирается пример как сделать фон текста с закруглением и особенности при работе с многострочным текстом
#Kotlin #Binary #Compatibility #Library

Бинарная совместимость Reaktive: как мы её обеспечиваем

Разработка библиотек - не самое простое занятие. Ты не можешь получить отчет об ошибке в Crashlytics, твои пользователи (программисты) не всегда могут оставить внятный фидбек, а еще тебе надо обеспечивать обратную совместимость.

Обратную совместимость обычно разделяют на 2 вида: API и Binary. Первая довольная проста - все что написано на старой версии библиотеки, должно запускаться и на новой.

С Binary совместимость все сложнее. В статье один из авторов библиотеки Reaktive разбирает, что именно такое Binary совместимость и как ее обеспечивают на примере этой библиотеки.
#Internship #НеРеклама

Летняя стажировка в Яндекс

Стартовал набор на летнюю стажировку в Яндекс. Направлений стажировки много:
👉 мобильная разработка (Android, iOS)
👉 бэкенд-разработка
👉 фронтенд-разработка
👉 машинное обучение
👉 аналитика

Участников ждут:
👉 от трёх до шести месяцев оплачиваемой работы бок о бок с ментором,
👉 только реальные задачи по улучшению продукта,
👉 приятное место, где работают увлеченные люди и проходят интересные мероприятия

Прием заявок заканчивается 31 мая 2020. Пройти стажировку можно в разных локациях или вам оплатят дорогу и проживание в хостеле

Ответы на популярные вопросы о стажировке здесь

Рекомендую всем попробовать попасть в программу Яндекс. Я помню как устроился на работу в Яндекс в Минске и мой уровень пошел в гору невероятными темпами, потому что я работал с очень сильными специалистами, у которых я учился изо дня в день.
#Kotlin #Kronos

Kronos-Android: Easy NTP

Библиотека для получения реального времени с сервера и его синхронизацией. Позволит избежать ситуаций, когда пользователь меняет время на устройстве для получения бонусов 😁
#Kotlin

Расширения в Kotlin. Опасный атавизм или полезный инструмент?

Kotlin привнёс множество новинок и удобств для Android разработчиков после долгого застоя в Java. И как любой реформатор есть, те кто отнеся положительно, и отрицательно к нему.

В статье разбирается почему Extension Function в Kotlin. По мнению автора проблемы заключаются в том, что:
👉 Расширения на DTO — нарушение шаблона Data Transfer Object
👉 Расширения специфичны и трудно понять какая функция обычная, а какая расширение
👉 Расширения разбросаны по всему проекту, образуя помойку
👉 Не замокать функции расширения при юнит-тестировании
👉 Есть вероятность перекрытия функции расширения одноименной функцией, размещенной внутри расширенного класса
👉 Расширение привязано к классу, а не к объекту, и это может вызвать путаницу
#Podcast #Flutter

Android Broadcast Podcast #6: "Из Android во Flutter" с Евгением Сатуровым

Flutter - один из самых бурно развивающихся кроссплатформенных фреймворков для создания мобильных приложений под Android и iOS. Его популярность дала новую жизнь Dart - языку программирования, который используется в Flutter. Разработчики под Android обратили внимание на новинку от любимой компании Google. Гость выпуска, Женя Сатуров, поделился тем, как он после нескольких лет в нативной Android разработке, ушел в Flutter и почувствовал новое вдохновение.

Сравнили удобство разработки под Android и Flutter:
- Kotlin и Dart
- Android Studio для Android и для Flutter, и конечно же Visual Studio Code
- Каково было привыкать на Flutter без стандартного набора Android разработки
- Архитектурные подходы

Немного о госте Жене Сатурове. Был Android разработчиком (4.5 года опыта за плечами). Год назад его поглатил Flutter. Основатель и ведущий soundcloud.com/flutterdevpodcast. Член программного комитета Mobius, Lead GDG Воронеж и частый спикер на конференциях.

Полезные ссылки:
👉 Flutter Dev Podcast
👉 Flutter Dev Podcast в Telegram
👉 То место, откуда начинается Flutter - flutter.dev
👉 Краткий экскурс во Flutter
👉 Доклад от Жени Сатурова "Flutter in action: how to stop considering and hit the road"

Отдельное спасибо Антону Рожкову за помощь в монтаже выпуска
#JetpackCompose #Animation

Intro to animations with Jetpack Compose

Много говорить про Jetpack Compose пока не хочу, так как все сыро и будет еще меняться перед бета и альфа. В статье найдёте взгляд на анимации в новом декларативном подходе.
Инженеры Avito решили открыть исходники своих наработок для Android проектов: библиотеки для приложений и тестовых фреймворков, Gradle плагины.

Обратной совместимости пока не гарантируется, но может появится если будут желающие использовать библиотеки и у себя в проектах.