#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
👉 Новые ограничения для записи в приватные директории приложений
👉 Что использовать вместо
👉 Миграция данных вне Scoped Storage
👉 Исключения в доступе к папкам
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
Medium
Android 11 storage FAQ
First introduced in Android 10, scoped storage is designed to protect app and user data and reduce file clutter. Since then, you’ve…
#AndroidBroadcast #AndroidStudio #Plugin
Расширение возможностей Android Studio (livestream)
Когда: четверг, 9 июля, 20.00 (GMT)
Улучшить продуктивность можно не только за счет библиотек, но и с помощью плагинов IDE, а как написать легко свой расскажем в выпуске.
Гость выпуска Павел Стрельченко - Android разработчик в компании hh.ru, занимается поддержкой основных приложений и разрабатывает внутренние инструменты для улучшения работы своей команды
Паша поможет Кириллу упростить написание кода для Dagger, написав в прямом эфире плагин для генерации кода. Займет это около получаса, но сэкономит много времени при работе с
Расширение возможностей Android Studio (livestream)
Когда: четверг, 9 июля, 20.00 (GMT)
Улучшить продуктивность можно не только за счет библиотек, но и с помощью плагинов IDE, а как написать легко свой расскажем в выпуске.
Гость выпуска Павел Стрельченко - Android разработчик в компании hh.ru, занимается поддержкой основных приложений и разрабатывает внутренние инструменты для улучшения работы своей команды
Паша поможет Кириллу упростить написание кода для Dagger, написав в прямом эфире плагин для генерации кода. Займет это около получаса, но сэкономит много времени при работе с
ViewModel
+ Dagger#Network #Tooling
HTTP Toolkit - интересная утилита для перехвата http(s) трафика:
👉 работает с множеством клиентов, включая Android
👉 в отличие от более известного аналога - Charles, процесс подключения проходит быстрее и удобнее (особенно via ADB)
Бесплатная версия позволяет:
👉 просматривать запросы и ответы
👉 редактировать/подменять запросы и ответы
HTTP Toolkit - интересная утилита для перехвата http(s) трафика:
👉 работает с множеством клиентов, включая Android
👉 в отличие от более известного аналога - Charles, процесс подключения проходит быстрее и удобнее (особенно via ADB)
Бесплатная версия позволяет:
👉 просматривать запросы и ответы
👉 редактировать/подменять запросы и ответы
Httptoolkit
HTTP Toolkit
Beautiful, cross-platform & open-source tools for debugging, testing and building with HTTP(S), on Windows, Linux & Mac.
#JetPack #Benchmark
Going Deep on Jetpack Benchmark
Возможность измерения производительности важна для обеспечения плавности пользовательского UI. В составе JetPack есть библиотека Benchmark для этих целей, а в статье рассматривается работа, которую проделал Google, для улучшения точности ее результатов.
👉 уменьшение вмешательства в работу приложения. (Библиотека запускает специальную непрозрачную activity, которая уменьшает вмешательство от других приложений)
👉 Стабилизация частоты процессора
👉 Приоритет потоков. У потока фреймворка наивысший приоритет, у JIT-потока приоритет снижен
👉 "Прогрев" и повторение теста
Going Deep on Jetpack Benchmark
Возможность измерения производительности важна для обеспечения плавности пользовательского UI. В составе JetPack есть библиотека Benchmark для этих целей, а в статье рассматривается работа, которую проделал Google, для улучшения точности ее результатов.
👉 уменьшение вмешательства в работу приложения. (Библиотека запускает специальную непрозрачную activity, которая уменьшает вмешательство от других приложений)
👉 Стабилизация частоты процессора
👉 Приоритет потоков. У потока фреймворка наивысший приоритет, у JIT-потока приоритет снижен
👉 "Прогрев" и повторение теста
Medium
Going Deep on AndroidX Benchmark
Performance has been an important part to ensure smooth user experience, and Android Team had released the first AndroidX Benchmark…
#Dagger #Hilt #Koin
Change DI Library from Koin to Dagger-Hilt
Разработчики кто имеет опыт с Dagger сразу хорошо воспринимали Koin в плане удобства его синтаксиса, но всех огорчало что отсутствует некоторые возможности, особенно проверка графа во время компиляции.
Может ли Hilt стать тем что все так разработчики хотели? Скорее всего только в описание компонентов, ведь под капотом мы имеем старый Dagger
В статье приводится опыт миграции с Koin на Hilt
Change DI Library from Koin to Dagger-Hilt
Разработчики кто имеет опыт с Dagger сразу хорошо воспринимали Koin в плане удобства его синтаксиса, но всех огорчало что отсутствует некоторые возможности, особенно проверка графа во время компиляции.
Может ли Hilt стать тем что все так разработчики хотели? Скорее всего только в описание компонентов, ведь под капотом мы имеем старый Dagger
В статье приводится опыт миграции с Koin на Hilt
Medium
Change DI Library from Koin to Dagger-Hilt
M y first Android DI library was Koin. Dagger had a high running curve at the beginning and it was difficult to learn, and at that time, I…
#Kotlin #Refactoring
Tackle tech debt with @Deprecated annotation
Статья про возможности @kotlin.Deprecated аннотации:
👉 помечать устаревший код
👉 использовать разные уровни:
⚠️ warning - при компиляции warning
⛔ error - при компиляции ошибка
🙈 hidden - код не доступен для вызова, при компиляции -
👉 каждый уровень по своему подсвечивается в IDE
👉 может использоваться с большим количеством target'ов (class, function, constructor, property и т.д.)
👉 работает с Java
Отдельно отмечаются возможности параметра replaceWith:
👉 благодаря ему можно не только подсвечивать устаревший код, но и заменять его на новый, используя пункт меню в IDE suggestions
👉 можно заменять устаревший код как в одном месте, так и во всем проекте
👉 можно указать и какие импорты необходимо добавить при замене
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
👉 можно заменять устаревший код как в одном месте, так и во всем проекте
👉 можно указать и какие импорты необходимо добавить при замене
Medium
Tackle tech debt with @Deprecated annotation
Let’s face it, we all have to tackle tech debt, because, things are going so fast in IT, we always try to catch up with the latest trends…
#Android11
Android 11 Beta 2 and Platform Stability
Вышла вторая Beta версия Android 11, а вместе с ней достигнут Platfrom Stability релиз, это значит что мы получаем финальное Android SDK и NDK, а также разрешена публикация приложений с
Тем кто хочется подготовиться к новой версии Android - уже самое время когда можно начать это делать, ведь изменений в поведении системы для разработчиков уже не будет.
Android 11 Beta 2 and Platform Stability
Вышла вторая Beta версия Android 11, а вместе с ней достигнут Platfrom Stability релиз, это значит что мы получаем финальное Android SDK и NDK, а также разрешена публикация приложений с
targetSdk="30"
.Тем кто хочется подготовиться к новой версии Android - уже самое время когда можно начать это делать, ведь изменений в поведении системы для разработчиков уже не будет.
Android Developers Blog
Android 11 Beta 2 and Platform Stability
News and insights on the Android platform, developer tools, and events.
#Android11
Testing platform changes in Android 11
В Android 11 появилась новая возможность для тестирования и отладки изменений в поведении приложений при переходе на новое targetSdk. Теперь разработчик может контролировать какие изменения новой версии Android будут включены в системы. Это позволит проверять только их
Подробнее об App Compatibility Framework
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
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
К преимуществам Android обычно относят настраиваемость, доступные цены, широкое разнообразие устройств, а про безопасность упоминаний, как правило, нет.
Автор статьи решил выяснить насколько платформа является безопасной и вот какие плюсы он нашел:
👉 любой телефон с Android на борту соответствует CDD
👉 шифрование встроенного хранилища
👉 верифицированная загрузка
👉 безопасное хранение ключей шифрования
👉 ограниченный доступ к файлам приложениями в Android 11
Хабр
Современные Android-устройства достаточно безопасны и вот почему
Говоря о преимуществах платформы Android, большинство пользователей обычно называют настраиваемость, разнообразие устройств и гибкие цены. И почему-то о безопасности речи нет. Видимо, большинство...
#UI #ServerDrivenUi
Beagle - еще одно решение для реализации концепции Server-Driven UI. Эта концепция позволяет управлять интерфейсом приложения с бэкенда.
Особенности Beagle:
👉 доступно использование для Android, iOS, Web
👉 используется декларативный UI подход
👉 под капотом применяется Yoga Layout
👉 примеры кода на Kotlin и Swift
👉 имеется хорошая документация с руководствами
👉 документация для реализации подхода и со стороны бэкенда (примеры кода микросервиса тоже на kotlin)
👉 есть playground - где можно попробовать описать компоненты и страницы в json формате
👉 позволяет управлять контентом, визуальной структурой и действиями.
Действия, это например:
👉🏼 отправка http(s) запросов
👉🏼 показ диалогов и алертов
👉🏼 навигация внутри приложения
👉🏼 открытие url-ссылок в стороннем браузере
👉🏼 и также есть возможность реализовать собственные действия
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
Generics in Kotlin
Хороший разбор основных понятий Generic в Kotlin:
👉 Type vs Class vs Subtype
👉 Вариативность
👉 Ковариативность
👉 Контрвариант
👉 Инвариант
👉 Type projection
👉 Star projection
👉 Затирание типов
👉 reified
Medium
Generics in Kotlin
Generics means we use a class or an implementation in a very generic manner.
#GooglePlay
Обновление политики Google Play от 8 июля 2020
Что нового:
👉 Политики для новых приложений теперь будут применяться одновременно с существующими, а не как раньше - в день объявления о новых политиках
👉 Больше информации о том, какую политику нарушает ваше приложение и скриншоты, где это обнаружено
👉 Новые требования для приложений в категорию "Новости"
👉 Новые требования по модерации контента в AR, генерируемого пользователям. Например, нельзя разместить его в зоне военной базы или частной собственности.
👉 Обновленные требования по участии в категории "Приложения для семьи и детей"
👉 Новые требования по размещению рекламу, например нельзя будет показывать нескрываемую рекламу дольше 5 секунд в местах, где это нарушает нормальную работу приложения
👉 Новая политика Mobile Unwanted Software (MUwS).
Новые политики вступают в силу 12 августа 2020
Доступ ко всем файлам
👉 Приложения теперь должны запрашивать доступ только к тем директориям, которые критически для их работы
👉 Разрешение
👉 Изменения касательно работы с файлами вступают в силу в начале 2021. Пора готовиться!
Обновление политики Google Play от 8 июля 2020
Что нового:
👉 Политики для новых приложений теперь будут применяться одновременно с существующими, а не как раньше - в день объявления о новых политиках
👉 Больше информации о том, какую политику нарушает ваше приложение и скриншоты, где это обнаружено
👉 Новые требования для приложений в категорию "Новости"
👉 Новые требования по модерации контента в AR, генерируемого пользователям. Например, нельзя разместить его в зоне военной базы или частной собственности.
👉 Обновленные требования по участии в категории "Приложения для семьи и детей"
👉 Новые требования по размещению рекламу, например нельзя будет показывать нескрываемую рекламу дольше 5 секунд в местах, где это нарушает нормальную работу приложения
👉 Новая политика Mobile Unwanted Software (MUwS).
Новые политики вступают в силу 12 августа 2020
Доступ ко всем файлам
👉 Приложения теперь должны запрашивать доступ только к тем директориям, которые критически для их работы
👉 Разрешение
MANAGE_EXTERNAL_STORAGE
для приложения с targetSdk = 30 (Android 11) будет доступен только с начала 2021 и по критериям, одобренными Google Play. До этого времени размещать приложения с объявлением этого разрешения нельзя👉 Изменения касательно работы с файлами вступают в силу в начале 2021. Пора готовиться!
YouTube
Google Play PolicyBytes - July 2020 Policy Updates
Joe Davis, Outreach and Policy Education Lead at Google, explains the July 2020 Play policy updates, will review Google Play’s updated enforcement grace periods for this and all future policy updates, and goes over the new policy center. Stay tuned to learn…
#Animations
Анимация в Android: плавные переходы фрагментов внутри Bottom Sheet
Наличие анимаций делает приложение более приятным для использования, однако их добавление - не всегда самая простая задача, особенно когда это касается BottomSheet.
Авторы статьи пытались использовать
Анимация в Android: плавные переходы фрагментов внутри Bottom Sheet
Наличие анимаций делает приложение более приятным для использования, однако их добавление - не всегда самая простая задача, особенно когда это касается BottomSheet.
Авторы статьи пытались использовать
animateLayoutChanges
, setCustomAnimations
для FragmentTransaction
, Shared Element Transition
, но в итоге остановились на кастомном Transition
. Так же рассматриваются альтернативные способы и почему они не были использованы.Хабр
Анимация в Android: плавные переходы фрагментов внутри Bottom Sheet
Написано огромное количество документации и статей о важной визуальной составляющей приложений — анимации. Несмотря на это мы смогли вляпаться в проблемы столкнулись с загвоздками при её реализации....
#GooglePlay
Implementing In-App Updates in Android
Обновление приложения может быть критически необходимым, например, в случае проблем с безопасностью или в случае падения. Однако не у всех пользователей установлено автоматическое обновление приложений в Google Play. Чтобы решить эту проблему, можно воспользоваться In-app обновлениями из Play Core library.
В статье рассматривается 2 способа настройки обновлений:
👉
👉
Implementing In-App Updates in Android
Обновление приложения может быть критически необходимым, например, в случае проблем с безопасностью или в случае падения. Однако не у всех пользователей установлено автоматическое обновление приложений в Google Play. Чтобы решить эту проблему, можно воспользоваться In-app обновлениями из Play Core library.
В статье рассматривается 2 способа настройки обновлений:
👉
Flexible
(выполняется в фоне, не прерывая пользователя)👉
Immediate
(полноэкраннный, требующий установки и перезагрузки приложения для дальнейшего использования).Medium
Implementing In-App Updates in Android
I’m sure we all must have come across the situations while working on the applications where we needed to send out an app update can say…
#DateTime
Tick Tock: Desugaring and Timezones
В Android Studio 4 появился desugaring некоторых Java 8+ APIs, в том числе и java.time. Однако для таймзон по умолчанию используется java.util.TimeZone, которая зависит от рантайма, что является проблемой для Android, так как многие устройства уже перестали получать обновления, а только в 2019 году в мире было 7 изменений таймзон.
Чтобы решить данную проблему, была создана библиотека Tick Tock, которая использует провайдер таймзон, зависящий от вшитого словаря.
Tick Tock: Desugaring and Timezones
В Android Studio 4 появился desugaring некоторых Java 8+ APIs, в том числе и java.time. Однако для таймзон по умолчанию используется java.util.TimeZone, которая зависит от рантайма, что является проблемой для Android, так как многие устройства уже перестали получать обновления, а только в 2019 году в мире было 7 изменений таймзон.
Чтобы решить данную проблему, была создана библиотека Tick Tock, которая использует провайдер таймзон, зависящий от вшитого словаря.
Zac Sweers
Tick Tock: Desugaring and Timezones
Dealing with timezone data in a desugaring world.
Какую библиотеку как основную вы используете для работы с датой и временем при разработке Android приложений?
Anonymous Poll
46%
Старый java.util.Datе
10%
Java 8 Date/Time API
16%
ThreeTen или ThreeTenABP
14%
Joda Time
1%
Другая библиотека
1%
Не разрабатываю под Android (вообще или нативные приложения)
12%
Не учавствую в опросе
#Huawei #Competation
Huawei объявляет конкурс приложений с призовым фондом в 1 млн. долларов
Конкурс инновационных приложений Huawei под названием Apps UP приглашает разработчиков со всего мира создавать инновационные приложения с использованием HMS Core. Разыгрывается 1 миллион долларов!
Huawei объявляет конкурс приложений с призовым фондом в 1 млн. долларов
Конкурс инновационных приложений Huawei под названием Apps UP приглашает разработчиков со всего мира создавать инновационные приложения с использованием HMS Core. Разыгрывается 1 миллион долларов!
AppTractor
Huawei объявляет конкурс приложений с призовым фондом в 1 млн. долларов
Конкурс инновационных приложений Huawei под названием Apps UP приглашает разработчиков со всего мира создавать инновационные приложения с использованием HMS Core.
#AndroidBroadcast #Kotlin #Coroutines
Библиотеки kotlinx.* (Livestream)
Когда: вторник, 14 июля, 20:00 (GMT+3)
Обсуждаем библиотеки Kotlin с их разработчиком. В программе Coroutines, Serialization, IO, DateTime, Стандартная Библиотека, новинки Kotlin 1.4 и ближайшее развитие экосистемы Kotlin.
В гостях Всеволод Толстопятов из JetBrains. Всеволод занимается библиотеками и экосистемой вокруг Kotlin с фокусами на Coroutines и Serialization.
Библиотеки 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 типа функций:
👉 Обычные
👉 С Receiver-ом
Функции с receiver-ом позволяют сделать код более читабельным в отдельнх случаях, но всегда ли стоит прибегать к ним? Ответ - нет! Не стоит ставить во главу минимальное количество строк и символов в коде. Главное требование должно быть легкая читаемость кода разработчиками
With the receiver in scope
Kotlin поддерживает 2 типа функций:
👉 Обычные
(T) -> E
👉 С Receiver-ом
T.() -> E
Функции с receiver-ом позволяют сделать код более читабельным в отдельнх случаях, но всегда ли стоит прибегать к ним? Ответ - нет! Не стоит ставить во главу минимальное количество строк и символов в коде. Главное требование должно быть легкая читаемость кода разработчиками
Medium
With the receiver in scope
Repetition is a bane of software development. Kotlin scope functions help when they are idiomatically used.