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

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

Introducing Adiantum: Encryption for the Next Billion Users

Google представила новый формат шифрования - Adiantum, который предназначен для запуска на телефонах и умных устройствах, которые не имеют специального железа/чипа для шифрования на аппаратном уровне.

Необходимость такого формата связана с тем что новый миллиард устройств - это Индия, страны Африки и Южной Америки, где покупаются дешевые устройства, который работают на старых версиях ОС или Android GO + такие устройства в основе используют процессоры на основе архитектуры ARM Cortex-A7, который не имеют аппаратного шифрования.
#Room #Coroutines

Room 🔗 Coroutines

Room 2.1 добавил поддержку Kotlin Coroutines. Теперь Room DAO можно описывать следующим образом:

@Daointerface
UsersDao {
    @Query("SELECT * FROM users")
suspend fun getUsers(): List<User>

    @Insert
suspend fun insertUser(user: User)

    @Update
suspend fun updateUser(user: User)

    @Delete
suspend fun deleteUser(user: User)
}

В статье описаются детали как механизм работает под капотом
#Chromium #PWA #TrustedWeb

Introducing a Trusted Web Activity for Android

В Chromium 72 официально анонсировали поддержку Trusted Web Activity (TWA). Это позволяет вашему приложению отображать Web контент в Chrome Custom tab или WebView без UI браузера в полноэкранном режиме.
#PWA

Play Store теперь принимает прогрессивные веб-приложения (PWA)

Статья поможет вам в первых шагах с Progressive Web Apps (PWA):
👉 Преимущества перед стандартными PWA
👉 Является ли TWA гибридным фреймворком, похожим на Cordova?
👉 Требования Play Store
👉 Способы разработки
👉 Ограничения
👉 Создание первого APK с PWA
👉 Тестирование
#ANR

Причины возникновения ANR и как этого избежать

Application Not Responding (ANR) - это ошибка, которая возникает в результате приложение не отвечает. Условия возникновения ANR:
👉События ввода (кнопки, касания экрана и пр.) не обрабатываются 5 секунд
👉BroadcastReceiver.onReceive() не был обработан за отведенное время (foreground приложение - 10 сек, background - 60 сек)
👉ContentProvider не завершил выполнение в течение 10 секунд

Как избежать ANR:
👉 Вся работа, несвязанная с отображение, должна выноситься в фоновые потоки
👉 Сложные вычисления производятся в отдельном потоке
👉 Используйте Handler для взаимодействия между Main/UI потоком приложения и рабочими потоками

Удобными способами для выполнения операций в фоне является использование библиотек RxJava или Kotlin Coroutines

В статье также описывается откуда прорастает показ ANR диалога и как он показывается
#ANR #Library

ANR-WatchDog - A simple watchdog that detects Android ANR error and throws a meaningful exception

Единственный способ для Android приложения поймать ANR - это опубликовать его в Google Play и смотреть за их статистикой в консоле.Очень полезно получать ошибки с ANR во время разработки и тестирования.

Библиотека ANR-WatchDog призвана решить эту проблема. Она настраивает таймеры на определение того, что ваш Main/UI поток не отвечает. Если такое событие происходит, библиотека выбрасывает ошибку ANRError. При включенном дебагере библиотека отключается.

Подключение библиотеки
implementation 'com.github.anrwatchdog:anrwatchdog:1.3.0'

В Application.onCreate() добавьте
new ANRWatchDog().start();

Рекомендую подключать библиотеку только в тестовых сборках вашего приложения и не включать его в production.
#Kotlin

The Argument Over Kotlin Synthetics

Kotlin Android Extensions призваны упростить жизнь Android разработчиков, они включают в себя:
👉 View Binding (отказ от findViewById)
👉 Generation of Parcelable (не надо руками писать реализацию)

Какова цена за эти удобства? Действительно ли все так удобно. Автор статьи решил рассмотреть почему не стоит использовать View Binding:
Доступны только из Kotlin
Не поддерживается Nullability
Нет гарантий что сгенерированный код будет производительным
Все находиться в глобальном пространстве имен
Нет гарантий типов
#UI #Design

State of the Navigation Drawer

Navigation Drawer присутствует довольно давно в Android приложениях, но он имеет минусы:
сокрытие навигации с экрана
разработчики порой его перегружают элементами
пользователи не видят новый функционал, которая добавляется в приложения

Как альтернатива Drawer предлагается использовать Bottom Navigation. Он позволяет решить проблемы, присущие Drawer, но также имеет ограничения, например он располагает от 3 до 5 элементов.

В своих последних приложения Google стала использовать комбинированный подход с Drawer и Bottom App Bar

Что сейчас имеет место и есть ли универсальное решение? Вопрос как всегда философский и не имеет четкого ответа. В статье автор сделал обзор существующих решений и их эффективности.