#Gradle
Gradle 5.2 Release Notes
Вышел Gradle 5.2. Релиз не содержит каких-то значимых изменений, из основного:
👉 Новый плагин Java Platform - он позволяет описывать совместимые между собой версии библиотек. Плагин аналогичен функционалу Maven BOM, но только в специфичном формате для Gradle
👉 Сборка нативных проектов при помощи Gradle. В новом релизе рекомендуют использовать новый Gradle C++ плагин
👉 Множество улучшений и багфиксов
Gradle 5.2 Release Notes
Вышел Gradle 5.2. Релиз не содержит каких-то значимых изменений, из основного:
👉 Новый плагин Java Platform - он позволяет описывать совместимые между собой версии библиотек. Плагин аналогичен функционалу Maven BOM, но только в специфичном формате для Gradle
👉 Сборка нативных проектов при помощи Gradle. В новом релизе рекомендуют использовать новый Gradle C++ плагин
👉 Множество улучшений и багфиксов
blog.gradle.org
Introducing the new C++ plugins
This post introduces some new plugins for C++ that we’ve been working on. These plugins can build C++ libraries and applications. They work on macOS, Linux, and Windows with GCC, Clang and Visual C++/Visual ...
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 года
OkHttp3 были вынуждены поднять минимальную версию Android до 5.0, чтобы обеспечивать лучшую защиту для приложений. Также решение оправдано, потому что количество пользователей на Android 4.X сейчас значительно меньше по сравнению с более новыми версиями ОС.
Для тех кто поддерживает Androiud 4.X в своих приложениях не переживайте, версия библиотеки 4.12 будет поддерживаться исправлениями багов до 2020 года
Medium
OkHttp 3.13 Requires Android 5+
Today we’re releasing OkHttp 3.13
#NullSafety #ErrorProne #CodeQuality
Engineering NullAway, Uber’s Open Source Tool for Detecting NullPointerExceptions on Android
В Uber разработали расширение для ErrorPhone, который позволяет анализировать Java код во время компиляции на потенциальные NPE и в случае проблем не дает скомпилироваться коду.
Для тех кто пишет на Kotlin и не имеет Java исходников в проекте - библиотека неактуальна.
NullAway Github
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, в противном случае код не скомпилируется.
В результате проверки вы увидите ошибку:
Nope'n! from Jake Wharton
Расширение для ErrorProne, которое будет полезно для авторов библиотек. Оно требует чтобы все ваши классы были явно объявлены как final, либо abstract либо помечены аннотацией @Open, в противном случае код не скомпилируется.
В результате проверки вы увидите ошибку:
Bad.java:1: error: [Nopen] Classes should be explicitly marked final, abstract, or @Openclass Bad {}
GitHub
GitHub - JakeWharton/nopen: An error-prone checker which requires that classes be final, abstract or annotated with @ Open.
An error-prone checker which requires that classes be final, abstract or annotated with @ Open. - JakeWharton/nopen
#Coroutines #Library
Coroutines Operators
RxJava очень популярное решение для работы с асинхронными задачами в Android разработке. Kotlin все активнее вытесняет Java в Android проектах и разработчики стараются втягивать нативные для зыки библиотеки, примерами которых является реализация корутин.
Для того чтобы миграция проходила проще ребята из EPAM сделали библиотеку, которая портирует основные операторы и позволяет упростить процесс миграции. Библиотека опубликована в версии 0.9.0 и авторам нужно ваше ревью и обратная связь перед релизом.
Пример использования библиотеки:
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"
}
GitHub
GitHub - epam/CoroutinesExtensions: To modify data RxJava provides a lot of methods, but Kotlin Coroutines doesn’t have them. This…
To modify data RxJava provides a lot of methods, but Kotlin Coroutines doesn’t have them. This library’s goal is creating functions that will provide users possibility to use the same functional as...
#Lite #Architecture #Optimizations
Expanding Access: Engineering Uber Lite
История того как в Uber пришли к тому что им надо разрабатывать Lite версию приложения из-за того что множество устройств, на которых используется приложения - это модели 2015 года и более раненого выпуска
Основные принципы которыми руководствовались разработчики:
👉 Компактный размер
👉 Минимизация расхода трафика и запросов на сервер
👉 Высокая отзывчивость UI (< 300 мс при переходе между экранами)
👉 1 DEX
Какие вопросы пришлось решать:
❓ Поиск компактных библиотек
❓ Выбор архитектуры приложения
❓ ProGuard, ReDex и Android App Bundle
❓ Настройка CI для проверок соблюдения ограничений
Expanding Access: Engineering Uber Lite
История того как в Uber пришли к тому что им надо разрабатывать Lite версию приложения из-за того что множество устройств, на которых используется приложения - это модели 2015 года и более раненого выпуска
Основные принципы которыми руководствовались разработчики:
👉 Компактный размер
👉 Минимизация расхода трафика и запросов на сервер
👉 Высокая отзывчивость UI (< 300 мс при переходе между экранами)
👉 1 DEX
Какие вопросы пришлось решать:
❓ Поиск компактных библиотек
❓ Выбор архитектуры приложения
❓ ProGuard, ReDex и Android App Bundle
❓ Настройка CI для проверок соблюдения ограничений
Uber Blog
Expanding Access: Engineering Uber Lite | Uber Blog
Many people around the world use Android phones based on hardware developed in 2015 and earlier. Uber engineers explain how they developed a lightweight rider app to serve this global audience.
#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
👉 Растеризация и кэширование
👉 Альтернативы растеризации
👉 Кэширование до использования шрифтов
👉 Очистка кэша
👉 Оптимизация
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
Ждем стабильной версий
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, который не имеют аппаратного шифрования.
Introducing Adiantum: Encryption for the Next Billion Users
Google представила новый формат шифрования - Adiantum, который предназначен для запуска на телефонах и умных устройствах, которые не имеют специального железа/чипа для шифрования на аппаратном уровне.
Необходимость такого формата связана с тем что новый миллиард устройств - это Индия, страны Африки и Южной Америки, где покупаются дешевые устройства, который работают на старых версиях ОС или Android GO + такие устройства в основе используют процессоры на основе архитектуры ARM Cortex-A7, который не имеют аппаратного шифрования.
Google Online Security Blog
Introducing Adiantum: Encryption for the Next Billion Users
Posted by Paul Crowley and Eric Biggers, Android Security & Privacy Team Storage encryption protects your data if your phone falls in...
#Room #Coroutines
Room 🔗 Coroutines
Room 2.1 добавил поддержку Kotlin Coroutines. Теперь Room DAO можно описывать следующим образом:
В статье описаются детали как механизм работает под капотом
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)
}
В статье описаются детали как механизм работает под капотом
Medium
Room 🔗 Coroutines
Add some suspense to your database
#Chromium #PWA #TrustedWeb
Introducing a Trusted Web Activity for Android
В Chromium 72 официально анонсировали поддержку Trusted Web Activity (TWA). Это позволяет вашему приложению отображать Web контент в Chrome Custom tab или WebView без UI браузера в полноэкранном режиме.
Introducing a Trusted Web Activity for Android
В Chromium 72 официально анонсировали поддержку Trusted Web Activity (TWA). Это позволяет вашему приложению отображать Web контент в Chrome Custom tab или WebView без UI браузера в полноэкранном режиме.
Chromium Blog
Introducing a Trusted Web Activity for Android
A Trusted Web Activity (TWA) displays a full screen Chrome browser inside of an Android app with no browser UI. Although Android apps rout...
#PWA
Play Store теперь принимает прогрессивные веб-приложения (PWA)
Статья поможет вам в первых шагах с Progressive Web Apps (PWA):
👉 Преимущества перед стандартными PWA
👉 Является ли TWA гибридным фреймворком, похожим на Cordova?
👉 Требования Play Store
👉 Способы разработки
👉 Ограничения
👉 Создание первого APK с PWA
👉 Тестирование
Play Store теперь принимает прогрессивные веб-приложения (PWA)
Статья поможет вам в первых шагах с Progressive Web Apps (PWA):
👉 Преимущества перед стандартными PWA
👉 Является ли TWA гибридным фреймворком, похожим на Cordova?
👉 Требования Play Store
👉 Способы разработки
👉 Ограничения
👉 Создание первого APK с PWA
👉 Тестирование
Хабр
Play Store теперь принимает прогрессивные веб-приложения (PWA)
Дисклеймер: я не связан с Google Play, Chrome или любой упомянутой компанией. Это не официальное заявление. Логотип и названия используются только для иллюстрации. В Chrome 72 для Android...
#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 и как этого избежать
Application Not Responding (ANR) - это ошибка, которая возникает в результате приложение не отвечает. Условия возникновения ANR:
👉События ввода (кнопки, касания экрана и пр.) не обрабатываются 5 секунд
👉BroadcastReceiver.onReceive() не был обработан за отведенное время (foreground приложение - 10 сек, background - 60 сек)
👉ContentProvider не завершил выполнение в течение 10 секунд
Как избежать ANR:
👉 Вся работа, несвязанная с отображение, должна выноситься в фоновые потоки
👉 Сложные вычисления производятся в отдельном потоке
👉 Используйте Handler для взаимодействия между Main/UI потоком приложения и рабочими потоками
Удобными способами для выполнения операций в фоне является использование библиотек RxJava или Kotlin Coroutines
В статье также описывается откуда прорастает показ ANR диалога и как он показывается
Хабр
Причины возникновения ANR и как этого избежать
ANR (Application Not Responding) — ошибка, которая возникает, когда приложение не отвечает. В итоге открывается диалоговое окно, предлагающее пользователю подожд...
#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 поток не отвечает. Если такое событие происходит, библиотека выбрасывает ошибку
Подключение библиотеки
В Application.onCreate() добавьте
Рекомендую подключать библиотеку только в тестовых сборках вашего приложения и не включать его в production.
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.
GitHub
GitHub - SalomonBrys/ANR-WatchDog: A simple watchdog that detects Android ANR (Application Not Responding) error and throws a meaningful…
A simple watchdog that detects Android ANR (Application Not Responding) error and throws a meaningful exception - SalomonBrys/ANR-WatchDog
#Kotlin
The Argument Over Kotlin Synthetics
Kotlin Android Extensions призваны упростить жизнь Android разработчиков, они включают в себя:
👉 View Binding (отказ от findViewById)
👉 Generation of Parcelable (не надо руками писать реализацию)
Какова цена за эти удобства? Действительно ли все так удобно. Автор статьи решил рассмотреть почему не стоит использовать View Binding:
➖ Доступны только из Kotlin
➖ Не поддерживается Nullability
➖ Нет гарантий что сгенерированный код будет производительным
➖ Все находиться в глобальном пространстве имен
➖ Нет гарантий типов
The Argument Over Kotlin Synthetics
Kotlin Android Extensions призваны упростить жизнь Android разработчиков, они включают в себя:
👉 View Binding (отказ от findViewById)
👉 Generation of Parcelable (не надо руками писать реализацию)
Какова цена за эти удобства? Действительно ли все так удобно. Автор статьи решил рассмотреть почему не стоит использовать View Binding:
➖ Доступны только из Kotlin
➖ Не поддерживается Nullability
➖ Нет гарантий что сгенерированный код будет производительным
➖ Все находиться в глобальном пространстве имен
➖ Нет гарантий типов
Medium
The Argument Over Kotlin Synthetics
It all started with a commit message
#UI #Design
State of the Navigation Drawer
Navigation Drawer присутствует довольно давно в Android приложениях, но он имеет минусы:
➖ сокрытие навигации с экрана
➖ разработчики порой его перегружают элементами
➖ пользователи не видят новый функционал, которая добавляется в приложения
Как альтернатива Drawer предлагается использовать Bottom Navigation. Он позволяет решить проблемы, присущие Drawer, но также имеет ограничения, например он располагает от 3 до 5 элементов.
В своих последних приложения Google стала использовать комбинированный подход с Drawer и Bottom App Bar
Что сейчас имеет место и есть ли универсальное решение? Вопрос как всегда философский и не имеет четкого ответа. В статье автор сделал обзор существующих решений и их эффективности.
State of the Navigation Drawer
Navigation Drawer присутствует довольно давно в Android приложениях, но он имеет минусы:
➖ сокрытие навигации с экрана
➖ разработчики порой его перегружают элементами
➖ пользователи не видят новый функционал, которая добавляется в приложения
Как альтернатива Drawer предлагается использовать Bottom Navigation. Он позволяет решить проблемы, присущие Drawer, но также имеет ограничения, например он располагает от 3 до 5 элементов.
В своих последних приложения Google стала использовать комбинированный подход с Drawer и Bottom App Bar
Что сейчас имеет место и есть ли универсальное решение? Вопрос как всегда философский и не имеет четкого ответа. В статье автор сделал обзор существующих решений и их эффективности.
Medium
State of the Navigation Drawer
UI design patterns evolve. Some come into fashion and some go out of fashion. A pattern, once common, over used, and pervasive has been…
#AndroidX #ViewPager2 #HowItWorks
ViewPager2 under the Hood
На днях Google представила первую альфа версию ViewPager2. Я писал об это ранее. В статье разбирается как работает под капотом ViewPager2 и каким образом перенесли функциональность ViewPager на RecyclerView.
ViewPager2 under the Hood
На днях Google представила первую альфа версию ViewPager2. Я писал об это ранее. В статье разбирается как работает под капотом ViewPager2 и каким образом перенесли функциональность ViewPager на RecyclerView.
helw.net
ViewPager2 under the Hood
blog of ahmed el-helw
#Kotlin #NullSafety
Null is your friend, not a mistake
Null - это бич Java разработки или нет? Очень неприятно когда у вас падает NPE 😞. Чтобы это исправить было сделано много разных решений:
👉
👉 Optional Java 8
👉 Невозможность работы с
👉 Куча
👉 Статические анализаторы кода
Все решения имеют свои плюсы + работают не всегда.
Kotlin решил эту проблемы намного изящнее все типы делятся на Nullable и NonNullable, который четко определяют можно ли быть у вас null значение в типе и при обращение будет заставлять обрабатывать.
Роман Элизаров (папка Kotlin Coroutines) в статье рассказывает почему null - это не есть зло и как Kotlin эффективно организовал работу с такими типами значений!
Null is your friend, not a mistake
Null - это бич Java разработки или нет? Очень неприятно когда у вас падает NPE 😞. Чтобы это исправить было сделано много разных решений:
👉
@Nullable
, @NonNull
аннотации👉 Optional Java 8
👉 Невозможность работы с
null
, например RxJava 2 типы не могут эмитировать null
значения👉 Куча
if(value != null)
👉 Статические анализаторы кода
Все решения имеют свои плюсы + работают не всегда.
Kotlin решил эту проблемы намного изящнее все типы делятся на Nullable и NonNullable, который четко определяют можно ли быть у вас null значение в типе и при обращение будет заставлять обрабатывать.
Роман Элизаров (папка Kotlin Coroutines) в статье рассказывает почему null - это не есть зло и как Kotlin эффективно организовал работу с такими типами значений!
Medium
Null is your friend, not a mistake
NullPointerException is dreaded in Java. All sorts of workarounds exist to avoid nulls. Fear not. They are not needed with Kotlin.
#RecyclerView #Animation #DiffUtil
RecyclerView — time to animate! (with payloads and DiffUtil)
Что вы знаете о
В статье раскрываются подробности как анимировать изменения RecyclerView на основе описанного механизма.
RecyclerView — time to animate! (with payloads and DiffUtil)
Что вы знаете о
payload
в RecyclerView.Adapter.notifyItemChanged(int position, Object payload) ? Она позволяет вам сообщать что изменилось, а не заставляет обновить целый элемент в RecyclerView. DiffUtil также поддерживаются payload
и позволяет вам точечно обновлять элементы списка. В статье раскрываются подробности как анимировать изменения RecyclerView на основе описанного механизма.
Undabot
RecyclerView — time to animate! (with payloads and DiffUtil)
Throughout this post I will explain how to initiate default RecyclerView animations. The focus will be on the payloads and DiffUtil…