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
Forwarded from ❗️NEWS Android Dev Подкаст (Denis Nek)
https://androiddev.apptractor.ru/android-dev-podkast-85/

Подкаст #85. ML в Android

Machine Learning, а вернее запуск моделей на мобильных устройствах, тема не столько популярная, как выбор архитектуры мобильного приложения, но в ней таится очень много интересного. Интервью со Славой, бывшим разработчиком Prisma, о всех его приключениях в мобильном ML мире. В выпуске вы узнаете сколько тензоров нужно, чтобы сжечь Xiaomi и как не уйти в запой, когда инференс на одном устройстве занимает 3 секунды, а на другом с той же моделью 5 минут.

https://github.com/XiaoMi/mace - Xiaomi MACE
https://firebase.google.com/docs/ml-kit/ - Firebase ML Kit (beta)
https://tensorflow.org/lite/ - TensorFlow Lite
https://research.fb.com/downloads/caffe2/ - Caffe2 by Facebook
https://pytorch.org/ - PyTorch
https://code.fb.com/ml-applications/qnnpack/ - Optimized Mobile Deep Learning by Facebook
https://developer.qualcomm.com/software/qualcomm-neural-processing-sdk - Qualcomm Neural Processing SDK for AI (SNPE)
https://developer.huawei.com/consumer/en/devservice/doc/2020315 - HUAWEI HiAI
https://developer.android.com/ndk/guides/neuralnetworks/ - Neural Networks API by Google
http://ai-benchmark.com/ - AI benchmarks
https://blog.prismalabs.ai/real-time-portrait-segmentation-on-smartphones-39c84f1b9e66 - Prisma about portrait segmentation
https://www.androidauthority.com/kirin-970-vs-snapdragon-845-859742/ - NPU vs DSP

А еще не забудьте послушать пилотный выпуск подкаста про Flutter https://soundcloud.com/flutterdevpodcast/0-pilotnyy-vypusk
#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 для проверок соблюдения ограничений