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

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

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
#UI #Material

Setting up a Material Components theme for Android

На Google I/O 2018 было представлено значительное обновление системы дизайна Google - Material Design 2.0. Новая библиотека com.google.android.material содержит множество изменений: новые темы, виджеты, стиль и атрибуты, на основе которы происходит кастомизация.

В статье подробно рассматриваются аспекты реализации нового дизайна в ваших приложениях на Android

Material Design Components Playground

Репозиторий Material Components for Android
#Kotlin #VarArg

Kotlin’s vararg and spread operator

Kotlin поддерживает переменное число аргументов (vararg) у функций, но в отличие от Java у него нет ограничения что vararg параметр может быть только один и должен быть расположен последним. В Kotlin у вас вполне будет валидна функция

fun sample(text:String, vararg list1: String, count: Int)

Как такое может компилироваться в валидный байт код? Какова цена разворачивания массива в vararg с помощью spread оператора (*) ? Все это вы можете узнать из статьи.
#AndroidX #RecyclerView #Selection

A guide to recyclerview-selection

Google делает много полезных библиотек в рамках AndroidX, но не всегда они славятся простой той и гибкостью 😞. Яркий пример - RecyclerView Selection. В статье вы найдете руководство о том, как настроить выбор в RecyclerView, а самое главное - череду проблем и как их пришлось решать окольными путями (. Например, не сохраняется состояние после поворота и происходит креш 🤬
👍1
#RecyclerView

Update recycler view content without refreshing the data

Знали ли вы о роли payload в
RecyclerView.Adapter.notifyItemChanged(int position, Object payload)
RecyclerView.Adapter.notifyItemRangeChanged(int positionStart, int itemCount, Object payload)
???

С помощью этих данных можно обновить элементы вашего списка без необходимости полной перерисовки. Это будет полезно когда вам надо выделить текст на элементе списка, либо свернуть/развернуть его. Как это можно реализовать найдете в статье.
#Firebase #Firestore

Cloud Firestore has Gone GA, Lower Pricing Tiers, New Locations, and more!

Обновления от команды Firebase:
🎉 Firestore вышел из Beta
💲 Новая ценовая политика... скоро. Скидки до 50% при использование серверов в отлдельных регионах
📍 Новые локации с серверами
👉 Возможность просматривать статистику использования Firestore: чтения, запись и удаление. Это поможет в оценке расходов. Работает на основе Stackdriver, благодаря чему позволяет задавать уведомления о достижении лимитов.
#UI #Layout #FlexBox

Google FlexboxLayout for Android

Те кто работает с Web технологиями знают о CSS Flexible Layout, довольно гибкое решение для построения UI. Ребята из Google реализовали это решение для Android FlexboxLayout.

Суть layout сводится к тому что он позволяет довольно гибко выстраивать сетку из View, переносить их на новую строку/столбец если они не вмещаются на экране, задвать веса

Поиграться с layout можно с помощью примера Flexbox Playground
This media is not supported in your browser
VIEW IN TELEGRAM
Пример реализации FlexbotLayoutManager для RecyclerView
#Dagger #AnnotationProcessing

Dagger 2 Reflect

Annotation Processing - бич современной Android разработки, т.к. он увеличивает время сборки значительно и полноценной поддержки инкрементальной компиляции его нет 😞. Jake Wharton разрабатывает решение, которое позволит избавиться от annotation processing для Dagger 2. Однозначное решение более медленное в работе в runtime, но вот время сборки улучшится разы и идеально подходит во время разработки.

Ждем первого релиза и скрестим пальцы 🤞 что Google поддержит эту инициативу и сделает этот проект официальной частью Google Dagger 2
#Kotlin #Architecture

Tips For Writing a Library in Kotlin

Когда вы будете писать библиотеку под Android, какой язык вы выберете: Java или Kotlin? Если конечный проект не использует Kotlin для него это может быть overhead по размеру. В свою очередь, разработка на Kotlin позволит вам использовать Multiplatform Project (MPP) и писать библиотеку, которая может использоваться на различных платформах: JVM, JS и Native!

Общие советы для написания библиотек:
👉 Делайте API компактным
👉 Делайте API абстрактным и чистым
👉 Используйте интерфейсы
👉 Модуляризация библиотеки

Для Kotlin библиотек:
👉 Добавляйте companion object, даже если он пустой
👉 Extension функции помогают делать более гибкий API
👉 Используйте reified в функциях

И наконец для MPP:
👉 Используйте Property вместо Getter-ов
👉 Скрывайте Kotlin API, которая не подходит для Java проектов
👉 Скрывайте Java API, который генерируется Kotlin (например с модификатором internal)
👉 Расширяемость
👉 Используйте Multiplatform аннотации
👉 Проблема Multiplatform SAM (Single Abstract Method) -> используйте интерфейсы вместо функций
От себя порекомендую перед тем как публиковать библиотеку покажите ее своим коллегам, ребятам из сообщества и постарайтесь максимально привлечь людей, чтобы API вашей библиотеки было изучено конечными пользователям с разными потребностями.
#AndroidAcademy #Concurrency #Coroutines #Rx

Android Academy Minsk #2: Threading

Сегодня пройдет встреча Android Academy 😎, на которой я расскажу о как делать многопоточными приложения в Android. В программе:
1️⃣ Как работает Handler/Looper механизм в Android
2️⃣ RxJava: основы подхода, в чем ее сила и как она может стать болью в вашем проекте
3️⃣ Kotlin Coroutines: основы идеи, отличие от блокирующего подхода, основы работы с корутинами, structured concurrency
4️⃣ Подводные камни многопоточной разработки

Проведите вечер понедельника с пользой и приходите в Space (Октябрьская 10Б). Мы начинаем ровно в 19:00! До встречи 👋

Участие бесплатно по предварительной регистрации. Количество билетов ограничено
#Networking #LibUpdates

OkHttp 3.13 was released

Вышла новая версия библиотеки OkHttp. В обновление реализовано:
👉Минимальная поддерживая версия Android 5.0 и Java 8. Это связано с проблемой поддержки TLS 1.2 на старых версиях Android
👉TLSv1 и TLSv1.1 отключены по умолчанию
👉Обновлено Okio до версии 1.17.3. Для тех кто использует Kotlin friendly Okio - обновитесь до версии 2.2.2 и выше
👉 Различный багфикс и улучшения API
#Gradle

Gradle 5.2 Release Notes

Вышел Gradle 5.2. Релиз не содержит каких-то значимых изменений, из основного:
👉 Новый плагин Java Platform - он позволяет описывать совместимые между собой версии библиотек. Плагин аналогичен функционалу Maven BOM, но только в специфичном формате для Gradle
👉 Сборка нативных проектов при помощи Gradle. В новом релизе рекомендуют использовать новый Gradle C++ плагин
👉 Множество улучшений и багфиксов
Android Broadcast
​#Networking #LibUpdates OkHttp 3.13 was released Вышла новая версия библиотеки OkHttp. В обновление реализовано: 👉Минимальная поддерживая версия Android 5.0 и Java 8. Это связано с проблемой поддержки TLS 1.2 на старых версиях Android 👉TLSv1 и TLSv1.1 отключены…
Why OkHttp 3.13 Requires Android 5+

OkHttp3 были вынуждены поднять минимальную версию Android до 5.0, чтобы обеспечивать лучшую защиту для приложений. Также решение оправдано, потому что количество пользователей на Android 4.X сейчас значительно меньше по сравнению с более новыми версиями ОС.

Для тех кто поддерживает Androiud 4.X в своих приложениях не переживайте, версия библиотеки 4.12 будет поддерживаться исправлениями багов до 2020 года
#NullSafety #ErrorProne #CodeQuality

Engineering NullAway, Uber’s Open Source Tool for Detecting NullPointerExceptions on Android

В Uber разработали расширение для ErrorPhone, который позволяет анализировать Java код во время компиляции на потенциальные NPE и в случае проблем не дает скомпилироваться коду.

Для тех кто пишет на Kotlin и не имеет Java исходников в проекте - библиотека неактуальна.

NullAway Github
#EffectiveJava #ErrorProne #CodeQuality

Nope'n! from Jake Wharton

Расширение для ErrorProne, которое будет полезно для авторов библиотек. Оно требует чтобы все ваши классы были явно объявлены как final, либо abstract либо помечены аннотацией @Open, в противном случае код не скомпилируется.

В результате проверки вы увидите ошибку:
Bad.java:1: error: [Nopen] Classes should be explicitly marked final, abstract, or @Openclass Bad {}
#Coroutines #Library

Coroutines Operators

RxJava очень популярное решение для работы с асинхронными задачами в Android разработке. Kotlin все активнее вытесняет Java в Android проектах и разработчики стараются втягивать нативные для зыки библиотеки, примерами которых является реализация корутин.

Для того чтобы миграция проходила проще ребята из EPAM сделали библиотеку, которая портирует основные операторы и позволяет упростить процесс миграции. Библиотека опубликована в версии 0.9.0 и авторам нужно ваше ревью и обратная связь перед релизом.

Пример использования библиотеки:
val firstName = async { "James" }
val secondName = async { "Kirk" }
zip(first, second) { first: String, second: String ->
"$first $second" // Результат = "James Kirk"
}
#Lite #Architecture #Optimizations

Expanding Access: Engineering Uber Lite

История того как в Uber пришли к тому что им надо разрабатывать Lite версию приложения из-за того что множество устройств, на которых используется приложения - это модели 2015 года и более раненого выпуска

Основные принципы которыми руководствовались разработчики:
👉 Компактный размер
👉 Минимизация расхода трафика и запросов на сервер
👉 Высокая отзывчивость UI (< 300 мс при переходе между экранами)
👉 1 DEX

Какие вопросы пришлось решать:
Поиск компактных библиотек
Выбор архитектуры приложения
ProGuard, ReDex и Android App Bundle
Настройка CI для проверок соблюдения ограничений
#UI #HowItWorks #Text

Android’s Font Renderer - Efficient text rendering with OpenGL ES

Отрисовка текста очень непростая задача и ресурсоёмкая для устройства. О том как работает механизм отрисовки текста в Android, с какие задачи решали разработчики чтобы сделать процесс отрисовки текста быстрым.

В статье раскрываются:
👉 libhwui - движок для отрисовки 2D на Android 3.0
👉 Работа Skia
👉 Изменения в Android 4.4: HarfBuzz, TextLayoutCache
👉 Растеризация и кэширование
👉 Альтернативы растеризации
👉 Кэширование до использования шрифтов
👉 Очистка кэша
👉 Оптимизация
#AndroidX #ViewPager #RecyclerView

ViewPager2 Alpha 1

Google показала ViewPager2. Основные изменения:
👉 Обратной совместимости нет
👉 Базируется на RecyclerView
👉 Реализована поддержка RTL
👉 Поддержка вертикальной ориентации
👉 Модифицируемый контент, когда элементами являются Fragment

Ждем стабильной версий