Android Broadcast – Telegram
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
#VectorDrawable #Images

https://medium.com/androiddevelopers/understanding-androids-vector-image-format-vectordrawable-ab09e41d5c68

Векторная графика - прекрасная вещь. Она и место сэкономит и качество изображений на любых дисплеях сделает высоким. Nick Butcher@Google начал серию статей о векторной графики (планируется всего 5) в Android. Из первой статьи вы узнаете:
👉🏻 Почему стоит использовать векторную графику
👉🏻 Насколько крутые штуки можно делать с VectorDrawable в Android
👉🏻 Как происходит путь от vector.xml до изображения
👉🏻 Когда стоит использовать векторную графику, а когда старый добрый растр будет эффективнее
👉🏻 Почему на Android не стали использовать SVG
👉🏻 Возможности VectorDrawable

9 минут и вы узнаете много полезного о VectorDrawable
#IDEA

Structural Search in IntelliJ IDEA

IDEA/Android Studio - очень крутая IDE для разработки. Она имеет множество средств для рефакторинга, одним из которых является Structural Search, котоаря позволяет задавать поиск по структуре кода (например поле класса или метод). Одна печаль - Kotlin не поддерживается 😔
#Android #Java #D8

"Android's Java 9, 10, 11, and 12 Support" - Jake Wharton

Печально признавать, но Android всегда оставал в поддержке Java от всего сообщества большого брата. Уже релизнулась Java 11, а мы все наслаждается синтаксическим сахаром от Java 8. С этим все смирились, но что будет если попробовать с помощью D8 обеспечить поддержку синтаксиса Java 9+ на Android?

В своей статье Jake продолжил раскрывать особенности работы Java на Android. По ссылке вы найдете информацию о том на какой стадии находится работа поддержки Java 9, которая уже ведется в AOSP, какие функции из Java 9+ можно завести на Android и надеемся что это скоро будет.
#ConstraintLayout #Performance

"Constraint Layout performance" Maciej Kozłowski

Многие задаются вопрос производительности ConstraintLayout. Maciej задался вопрос и решил сделать тесты.

Могу сказать только одно - не стоит его использовать как замену для простых случаев, что и подтвердили тесты. ConstraintLayout эффективен для сложных иерархий, когда старыми Layout из SDK сделать в 1 уровень трудно. При замене LinearLayout на ConstraintLayout у вас будет производительность хуже.
#Kotlin

"Kotlin: should I define Function or Property?" Igor Wojda

Kotlin ввел новые элементы для объявляения - свойство (property). Единственное что часто вызывало вопрос когда выбрать что использовать - функция или свойство?
Вопрос порой даже философский и зависит от взгляда разработчика. В статье Igor раскрывает когда стоит выбрать что.

Чтобы понять стоит ли использовать функцию, ответьте на вопрос: "Описывает ли функция поведение?".Например print(), jump() или calculate().
Если ответ положительный. то используйте функцию.

Кандидат для использования свойства должен отвечать требованиям:
1️⃣ Не бросает исключений
2️⃣ Легкий для вычисления, либо вовсе их не требует.
3️⃣ Возвращает один и тот же результат (при условие неизменения состояния объекта)

Также не забывайте о том что свойства могут быть объявлены в интерфейсе и их get()/set() функции можно определить самостоятельно.
🔥 И killer фича - property delegate!, которая позволяет переиспользовать код на новом уровне 🔥

Подробнее о property в Kolin смотрите в официальной документации.
Также официальная документация раскрывает когда должно использовать свойство, а когда функцию.
#BestPractices #Release

"How to release a bug-free Android App in production?" Amit Shekhar@GetMeAnApp

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

На мой взгляд стоящие советы следующие:
👉🏻 Не включайте библиотеки, которые используются для отладки приложения в релизной сборке, такие как LeakCanary, Stetho и пр.
👉🏻 Добавляйте возможность включения/отключения новый функций
👉🏻 Реализуйте возможность конфигурации приложения с сервера (Remote Config)
👉🏻 Проверяйте ключ для подписи приложения
👉🏻 Проверяйте список permission, которые есть в приложение. Очень странно выглядет когда будильник будет запрашивать разрешение на дотсуп к SMS или контактам.
👉🏻 Добавляфте аналитику, чтобы понимать пользователей и знать что происходит в вашем приложение. Также на забывайте про решение для аналитики крешей (напр. Firebase Crashlytics или Instabug)
👉🏻 Используйте Proguard/R8.
👉🏻 Проверяйте поведение приложения в различных пограничных случаях
👉🏻 Проверяйте deep ссылки
👉🏻 Проверяйте обновление приложения поверх установленного старого, предварительно поработав в нем чтобы были сгенерированы данные реальной работы пользователя.
👉🏻 Обновление базы данных, настроек и пр. персистетных данных. Учтите что пользователи могу быть не на последней версии приложения, а на более ранней.

Лично от себя добавлю что стоит обратить внимание на функционал из Google Play:
👉🏻 Используйте Google Play pre-launch отчет. Он позволяет првоерить работы вашего приложения на популярных устрйоствах, поддерживаемых вашим приложением.
👉🏻 Делайте обновление постепенным с помощью Google Play staged rollout
👉🏻 Используйте Google Play app signing
👉🏻 Загружайте приложение в формате App Bundle. Это позволит вам избавиться от боли создания и управления множеством APK под различные типы устрйоств.
#Gradle #Kotlin #DSL

Upgrading your build from Gradle 4.x to 5.0

Gradle 5.0 вышел совсе недавно, но добавил много полезного и добавил няшечку - Kotlin DSL 1.0. Для тех кто планирует миграцию на новую версию Gradle предоставила гайд для обновления с различных версия 4.X.
#AndroidO #TextClassification #MachineLearning

TextClassification – Part 1
TextClassification – Part 2
TextClassification – Part 3

Машинное обучение (ML) современный тренд в мире разработке и Android ему следует. Android 9.0 строился вокруг ML внутри ОС. Новый системный сервис - Text Classification, позволяет вам:
👉🏻 определять выделения (например быстро выделить весь email без необходимости выставлять зону выделения)
👉🏻 находить действия которые можно выполнять с текстом
👉🏻 писать свои собственные TextClassifier для опрееления текста и действий в нем

Подробнее обо всех возможностях и как это сделать вы найдете в статьях от Mark Allison
#Kotlin #Operators

"Increasing readability using operator conventions in Kotlin" Pamela Hill

Kotlin позволяет вам переопределять операторы для собственных типов и тем самым повышая читабельность кода. В статье раскрываются способы применения операторов и как их реализовать.
#DependencyInjection #Performance #Kotlin

Android Injection Performance Test

Мы используем Dependency Injection, но никто не думает о производительности этих решений. Dagger 2 убрал рефлексию и сделал все через кодогенерацию. Но насколько эти эффективно по производительности? Koin не использует кодогенерации вовсе.

Rafa Vázquez сделал тест сравнения популряных DI решений:
👉🏻 Koin 2.0.0-alpha2 (я удивлен почему взята альфа версия, которую толком никто не испольует)
👉🏻 Kodein 5.3.0
👉🏻 Dagger 2.16
👉🏻 Katana 1.0.1

Результаты теста следующие:
1️⃣ Dagger 2
2️⃣ Katana
3️⃣ Kodein
4️⃣ Koin 2 alpha

Koin 2.0 очевидно проиграл так как построен на рефлекии, в отличие от первой версии.
#Kotlin #Coroutines #Concurrency

CONCURRENT COROUTINES – CONCURRENCY IS NOT PARALLELISM

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

Часто в программирвоание паррарельное выполнение программ связывают с понятием concurrent.

В стастье вы найдете различие между понятием concurrency и parallelism и как это реализуют корутины в Kotlin.
#AndroidX #Library

https://developer.android.com/jetpack/androidx/androidx-rn#2018-dec-03

Очередное обновление библиотеки AndroidX (пока только альфа версия). В анонс попали аж 14 штук:
👉 Activity
👉 AppCompat
👉 Collection
👉 Coordinator Layout
👉 Fragment
👉 Loader
👉 Media
👉 MediaRouter
👉 RecyclerView
👉 RemoteCallback NEW
👉 Swipe Refresh Layout
👉 Text Classifier NEW
👉 Transition
👉 Vector Drawable

Основные изменения:
👉 AppCompatTextView теперь поддерживает атрибуты *app:drawable*Compat*, которые могут принимать VectorDrawable из AndroidX
👉 Backport коллекций Android перенес API из свежих версий SDK
👉 Новая библиотека Remote Callback, упрощающая создание и получение PendingIntent.
👉 Backport Text Classifier из Andorid O+. Сейчас частично перенес функционал Smart Linkify.
👉 VectorDrawable теперь поддерживают tint через ColorStateList из атрибутов темы
👉 Багфикс в рамках всех библиотек

Ждём стабильных релизов 🕘
#VectorDrawable #Images #AndroidX

Part 2: "Draw a Path: Rendering Android VectorDrawables"
Part 1: "Understanding Android’s vector image format: VectorDrawable"

Продолжение серии статей от Nick Butcher/Google о том как работает векторная графика в Android. Из нового поста вы узнаете:
👉 Простейший способ отрисовки path
👉 Поддержка ссылок на различные ресурсы: цвета, ColorStateList, аттрибуты темы
👉 Tinting в VectorDrawable: как работают, настраиваются и когда применять
👉 Градиенты в VectorDrawable: Linear, Radial, Sweep (Angular); tile modes
👉 Поддержка Patter-ов
👉 Как сделать тени в VectorDrawable

Приятная новость что все это уже портировано в AndroidX и полностью работает в VectorDrawableCompat, начиная с API 14
#Education

Android codelab courses are here!

Обновлены code lab по Android:
👉 Добавлены новые популярные темы
👉 Обновлены матералы до новых SDK и последней версии Android Studio

Изменения коснулись Fundamentals и Advanced курсов. Также доступны материалы для тех, кто ведёт курсы, чтобы обучать Android на оcнове материалов code lab
#D8 #Dexing #Compiler

Part 3 (final): "Avoiding Vendor- and Version-Specific VM Bugs"
Part 2: "Android's Java 9, 10, 11, and 12 Support"
Part 1: "Android's Java 8 Support"

Заключительная хардокрная статья о D8 от Jake Warton в которой он рассказывает о том как D8 отличается в dexing кода от DX и исправляет разные баги на старых версий Android и баги от корявых рук производителей устройств, которые любят переизобрести Android ОС.

О чем сможете узнать:
👉 Использование более оптимальных инструкций в D8
👉 Как D8 позволяет обходить баги, на примере OkHttp и Okio, на устрйоствах отдельных производителей
👉 Фикс бага ART ahead-of-time компилятора в Android 6.0

Вас ждет много байткода и тулинга, пристегнитесь и наберитесь терпения перед прочтением.