Android Broadcast
14.2K subscribers
3.53K photos
343 videos
11 files
5.91K links
Подборка новостей и статей для Android разработчиков.

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

РКН https://abdev.by/rkn_tg_ab
Download Telegram
#Android11 #ScopedStorage

Android 11 Storage FAQ

Представленный в Android 10 Scoped Storage добрался до релиза в Android 11. Scoped Storage предназначен упорядочить доступ приложений к файлам пользователя и защитить их от произвольного доступа любым приложением. Изменения будут применены для всех приложение с targetSdk=30+ (Android 11).

В статье можно найти ответы на самые частые вопросы по данной теме:
👉 можно ли обращаться к файлам по пути, используя, например, File API
👉 Что со скоростью доступа к файлам
👉 Как осуществить полный доступ к файловой системе как раньше
👉 Каким приложениям стоит запрашивать разрешение MANAGE_EXTERNAL_STORAGE
👉 Что с Storage Access Framework
👉 Изменения в Scoped Storage в Android 11 по сравнению с Android 10
👉 Тестирование Scoped Storage
👉 Новые ограничения для записи в приватные директории приложений
👉 Что использовать вместо MediaStore.MediaColumns.DATA?
👉 Миграция данных вне Scoped Storage
👉 Исключения в доступе к папкам Android и obb
#AndroidBroadcast #AndroidStudio #Plugin

Расширение возможностей Android Studio (livestream)
Когда: четверг, 9 июля, 20.00 (GMT)

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

Гость выпуска Павел Стрельченко - Android разработчик в компании hh.ru, занимается поддержкой основных приложений и разрабатывает внутренние инструменты для улучшения работы своей команды

Паша поможет Кириллу упростить написание кода для Dagger, написав в прямом эфире плагин для генерации кода. Займет это около получаса, но сэкономит много времени при работе с ViewModel + Dagger
#Network #Tooling

HTTP Toolkit - интересная утилита для перехвата http(s) трафика:
👉 работает с множеством клиентов, включая Android
👉 в отличие от более известного аналога - Charles, процесс подключения проходит быстрее и удобнее (особенно via ADB)

Бесплатная версия позволяет:
👉 просматривать запросы и ответы
👉 редактировать/подменять запросы и ответы
#JetPack #Benchmark

Going Deep on Jetpack Benchmark

Возможность измерения производительности важна для обеспечения плавности пользовательского UI. В составе JetPack есть библиотека Benchmark для этих целей, а в статье рассматривается работа, которую проделал Google, для улучшения точности ее результатов.

👉 уменьшение вмешательства в работу приложения. (Библиотека запускает специальную непрозрачную activity, которая уменьшает вмешательство от других приложений)
👉 Стабилизация частоты процессора
👉 Приоритет потоков. У потока фреймворка наивысший приоритет, у JIT-потока приоритет снижен
👉 "Прогрев" и повторение теста
#Dagger #Hilt #Koin

Change DI Library from Koin to Dagger-Hilt

Разработчики кто имеет опыт с Dagger сразу хорошо воспринимали Koin в плане удобства его синтаксиса, но всех огорчало что отсутствует некоторые возможности, особенно проверка графа во время компиляции.

Может ли Hilt стать тем что все так разработчики хотели? Скорее всего только в описание компонентов, ведь под капотом мы имеем старый Dagger

В статье приводится опыт миграции с Koin на Hilt
#Kotlin #Refactoring 

Tackle tech debt with @Deprecated annotation

Статья про возможности @kotlin.Deprecated аннотации:
👉 помечать устаревший код
👉 использовать разные уровни:
⚠️ warning - при компиляции warning
error - при компиляции ошибка
🙈 hidden - код не доступен для вызова, при компиляции - Unresolved Reference error
👉 каждый уровень по своему подсвечивается в IDE
👉 может использоваться с большим количеством target'ов (class, function, constructor, property и т.д.)
👉 работает с Java

Отдельно отмечаются возможности параметра replaceWith:
👉 благодаря ему можно не только подсвечивать устаревший код, но и заменять его на новый, используя пункт меню в IDE suggestions
👉 можно заменять устаревший код как в одном месте, так и во всем проекте
👉 можно указать и какие импорты необходимо добавить при замене
#Android11

Android 11 Beta 2 and Platform Stability

Вышла вторая Beta версия Android 11, а вместе с ней достигнут Platfrom Stability релиз, это значит что мы получаем финальное Android SDK и NDK, а также разрешена публикация приложений с targetSdk="30".

Тем кто хочется подготовиться к новой версии Android - уже самое время когда можно начать это делать, ведь изменений в поведении системы для разработчиков уже не будет.
#Android11

Testing platform changes in Android 11

В Android 11 появилась новая возможность для тестирования и отладки изменений в поведении приложений при переходе на новое targetSdk. Теперь разработчик может контролировать какие изменения новой версии Android будут включены в системы. Это позволит проверять только их

Подробнее об App Compatibility Framework
#Dagger2

Introducing Hephaestus

Настройка Dagger 2 в новом проекте обычно включает в себя несколько шагов:
1️⃣попытаться собрать проект и из ошибок сборки
2️⃣понять какие зависимости отсутствуют
3️⃣добавить их
4️⃣при необходимости синхронизовать проект
5️⃣повторить

Разработчики из Square выяснили, что этот процесс является узким горлышком в продуктивности их разработчиков, и создали плагин для компилятора Hephaestus.

Функционал очень схож с тем, что предоставляет Hilt, однако Hilt содержит больше возможностей и при этом накладывает различные ограничения. Если ваш проект уже на Hilt, то скорее всего Hephaestus вам не нужен, но если вы только задумались о том, как упростить работу с Dagger 2, то стоит сравнить отличия Hephaestus и Hilt

Важное отличие Hephaestus - он работает на основе плагина для Kotlin компилятора, а не на основе Java annotation processing
Современные Android-устройства достаточно безопасны и вот почему

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

Автор статьи решил выяснить насколько платформа является безопасной и вот какие плюсы он нашел:
👉  любой телефон с Android на борту соответствует CDD
👉  шифрование встроенного хранилища
👉  верифицированная загрузка
👉  безопасное хранение ключей шифрования
👉  ограниченный доступ к файлам приложениями в Android 11
#UI #ServerDrivenUi

Beagle - еще одно решение для реализации концепции Server-Driven UI. Эта концепция позволяет управлять интерфейсом приложения с бэкенда.

Особенности Beagle:
👉 доступно использование для Android, iOS, Web
👉 используется декларативный UI подход
👉 под капотом применяется Yoga Layout  
👉 примеры кода на Kotlin и Swift
👉 имеется хорошая документация с руководствами
👉 документация для реализации подхода и со стороны бэкенда (примеры кода микросервиса тоже на kotlin)
👉 есть playground - где можно попробовать описать компоненты и страницы в json формате
👉 позволяет управлять контентом, визуальной структурой и действиями.

Действия, это например:
👉🏼 отправка http(s) запросов
👉🏼 показ диалогов и алертов
👉🏼 навигация внутри приложения
👉🏼 открытие url-ссылок в стороннем браузере
👉🏼 и также есть возможность реализовать собственные действия
#Kotlin #Generics

Generics in Kotlin

Хороший разбор основных понятий Generic в Kotlin:
👉 Type vs Class vs Subtype
👉 Вариативность
👉 Ковариативность
👉 Контрвариант
👉 Инвариант
👉 Type projection
👉 Star projection
👉 Затирание типов
👉 reified
#GooglePlay

Обновление политики Google Play от 8 июля 2020

Что нового:
👉 Политики для новых приложений теперь будут применяться одновременно с существующими, а не как раньше - в день объявления о новых политиках
👉 Больше информации о том, какую политику нарушает ваше приложение и скриншоты, где это обнаружено
👉 Новые требования для приложений в категорию "Новости"
👉 Новые требования по модерации контента в AR, генерируемого пользователям. Например, нельзя разместить его в зоне военной базы или частной собственности.
👉 Обновленные требования по участии в категории "Приложения для семьи и детей"
👉 Новые требования по размещению рекламу, например нельзя будет показывать нескрываемую рекламу дольше 5 секунд в местах, где это нарушает нормальную работу приложения
👉 Новая политика Mobile Unwanted Software (MUwS).

Новые политики вступают в силу 12 августа 2020

Доступ ко всем файлам
👉 Приложения теперь должны запрашивать доступ только к тем директориям, которые критически для их работы
👉 Разрешение MANAGE_EXTERNAL_STORAGE для приложения с targetSdk = 30 (Android 11) будет доступен только с начала 2021 и по критериям, одобренными Google Play. До этого времени размещать приложения с объявлением этого разрешения нельзя
👉 Изменения касательно работы с файлами вступают в силу в начале 2021. Пора готовиться!
#Animations

Анимация в Android: плавные переходы фрагментов внутри Bottom Sheet

Наличие анимаций делает приложение более приятным для использования, однако их добавление - не всегда самая простая задача, особенно когда это касается BottomSheet.

Авторы статьи пытались использовать animateLayoutChanges, setCustomAnimations для FragmentTransaction, Shared Element Transition, но в итоге остановились на кастомном Transition. Так же рассматриваются альтернативные способы и почему они не были использованы.
#GooglePlay

Implementing In-App Updates in Android

Обновление приложения может быть критически необходимым, например, в случае проблем с безопасностью или в случае падения. Однако не у всех пользователей установлено автоматическое обновление приложений в Google Play. Чтобы решить эту проблему, можно воспользоваться In-app обновлениями из Play Core library.

В статье рассматривается 2 способа настройки обновлений:
👉 Flexible (выполняется в фоне, не прерывая пользователя)
👉 Immediate (полноэкраннный, требующий установки и перезагрузки приложения для дальнейшего использования).
#DateTime

Tick Tock: Desugaring and Timezones

В Android Studio 4 появился desugaring некоторых Java 8+ APIs, в том числе и java.time. Однако для таймзон по умолчанию используется java.util.TimeZone, которая зависит от рантайма, что является проблемой для Android, так как многие устройства уже перестали получать обновления, а только в 2019 году в мире было 7 изменений таймзон.

Чтобы решить данную проблему, была создана библиотека Tick Tock, которая использует провайдер таймзон, зависящий от вшитого словаря.
Какую библиотеку как основную вы используете для работы с датой и временем при разработке Android приложений?
Anonymous Poll
46%
Старый java.util.Datе
10%
Java 8 Date/Time API
16%
ThreeTen или ThreeTenABP
14%
Joda Time
1%
Другая библиотека
1%
Не разрабатываю под Android (вообще или нативные приложения)
12%
Не учавствую в опросе
#AndroidBroadcast #Kotlin #Coroutines

Библиотеки kotlinx.* (Livestream)
Когда: вторник, 14 июля, 20:00 (GMT+3)

Обсуждаем библиотеки Kotlin с их разработчиком. В программе Coroutines, Serialization, IO, DateTime, Стандартная Библиотека, новинки Kotlin 1.4 и ближайшее развитие экосистемы Kotlin.

В гостях Всеволод Толстопятов из JetBrains. Всеволод занимается библиотеками и экосистемой вокруг Kotlin с фокусами на Coroutines и Serialization.
#Kotlin

With the receiver in scope

Kotlin поддерживает 2 типа функций:
👉 Обычные (T) -> E
👉 С Receiver-ом T.() -> E

Функции с receiver-ом позволяют сделать код более читабельным в отдельнх случаях, но всегда ли стоит прибегать к ним? Ответ - нет! Не стоит ставить во главу минимальное количество строк и символов в коде. Главное требование должно быть легкая читаемость кода разработчиками