#UI
How I resolved WindowManager.BadTokenException for Toast#handleShow()?
Для всех тех кто сталкивался с тем, что падает приложение с WindowManager.BadTokenException при показе Toast, то эта статья объяснит вам как устроена система работы окон приложения и какую роль играют в ней токены.
Помимо всего вы получите библиотеку для показа Toast без проблем на любой версии Android
How I resolved WindowManager.BadTokenException for Toast#handleShow()?
Для всех тех кто сталкивался с тем, что падает приложение с WindowManager.BadTokenException при показе Toast, то эта статья объяснит вам как устроена система работы окон приложения и какую роль играют в ней токены.
Помимо всего вы получите библиотеку для показа Toast без проблем на любой версии Android
Medium
How I resolved WindowManager.BadTokenException for Toast#handleShow()?
“Every problem is a gift — without problems, we would not grow.” ― Anthony Robbins
#AR #ARCore
ARCore Depth API открыли для всех
ARCore - это SDK для работы с дополненной реальностью. ARCore, в отличие от своего предшественника (проекта Tango), не требует специальной аппаратной поддержки, благодаря чему может применяться на различных Android устройствах.
В продолжение развития проекта Google выпустил ARCore Depth API, которое может строить карту глубины и позволяет при отображении цифровых объектов учитывать положение других объектов. И для этого не нужно никаких специальных датчиков или нескольких камер - достаточно одной обычной камеры 💪
ARCore Depth API открыли для всех
ARCore - это SDK для работы с дополненной реальностью. ARCore, в отличие от своего предшественника (проекта Tango), не требует специальной аппаратной поддержки, благодаря чему может применяться на различных Android устройствах.
В продолжение развития проекта Google выпустил ARCore Depth API, которое может строить карту глубины и позволяет при отображении цифровых объектов учитывать положение других объектов. И для этого не нужно никаких специальных датчиков или нескольких камер - достаточно одной обычной камеры 💪
AppTractor
ARCore Depth API открыли для всех
API может с помощью одной обычной камеры строить карту глубины для сцены. Уже не требуются специальные датчики или нескольких объективов - все, что нужно, это одна RGB-камера.
#Android11 #Security
New Android 11 tools to make apps more private and stable
Android 11, как и любой другой мажорный релиз этой ОС, привнесли улучшения в безопасности и предоставили нам 2 новых API.
Data Access Auditing API
Позволит вам отслеживать доступ к закрытым и защищенным данным, например местоположение.
Process Exit Reasons
Возможность получить причину падения приложения. История крешей теперь доступна через ActivityManager. С помощью ActivityManager.setProcessStateSummary() вы сможете добавить свою собственную информацию, которая будет полезна в отладке
New Android 11 tools to make apps more private and stable
Android 11, как и любой другой мажорный релиз этой ОС, привнесли улучшения в безопасности и предоставили нам 2 новых API.
Data Access Auditing API
Позволит вам отслеживать доступ к закрытым и защищенным данным, например местоположение.
Process Exit Reasons
Возможность получить причину падения приложения. История крешей теперь доступна через ActivityManager. С помощью ActivityManager.setProcessStateSummary() вы сможете добавить свою собственную информацию, которая будет полезна в отладке
Medium
New Android 11 tools to make apps more private and stable
As part of our continuing effort to help you build high quality apps, we often look for areas where we can invest in tools and resources…
#Android11 #Security
Package visibility in Android 11
В Android 11 введены ограничения для доступа к установленным приложениям на устройстве. Теперь вы можете получить доступ к информации только тех приложений, id которых укажите заранее в манифесте вашего приложения и какие действия с ними можно делать (пример описания пакетов для доступа).
Получить доступ ко всем установленным приложениям все же остался с помощью нового разрешения QUERY_ALL_PACKAGES. Публикация приложений, использующих это разрешение, будет ограничена новой политикой Google Play.
Package visibility in Android 11
В Android 11 введены ограничения для доступа к установленным приложениям на устройстве. Теперь вы можете получить доступ к информации только тех приложений, id которых укажите заранее в манифесте вашего приложения и какие действия с ними можно делать (пример описания пакетов для доступа).
Получить доступ ко всем установленным приложениям все же остался с помощью нового разрешения QUERY_ALL_PACKAGES. Публикация приложений, использующих это разрешение, будет ограничена новой политикой Google Play.
Medium
Package visibility in Android 11
On Android 10 and earlier, apps could query the full list of installed apps on the system using methods like queryIntentActivities. In…
#Kotlin
Kotlin 1.4-M3 is Out: Standard Library Changes
Вышел последний milestone (превью версия) Kotlin 1.4. За этим нас ждет RC версия, в которой финализируются фичи.
Что нового в 1.4-M3:
👉 Kotlin JVM библиотеки теперь содержат информацию о Java 9 модулях. Раньше так сделать было нельзя из-за бага в Android Gradle Plugin
👉 Функциональные интерфейсы в стандартной библиотеке. Благодаря поддержке SAM в Kotlin классах такие интерфейсы как
👉 Новые операторы для коллекций:
👉 Функции min и max для коллекций переименованы в minOrNull и maxOrNull, а существующие версии помечены как deprecated
👉 Аннотация Throws теперь добавлена в общую библиотеку, а не только в JVM
👉 Функции
👉 Добавлена возможность конвертации KType в Java Type без подключения библиотеки рефлексии
Kotlin 1.4-M3 is Out: Standard Library Changes
Вышел последний milestone (превью версия) Kotlin 1.4. За этим нас ждет RC версия, в которой финализируются фичи.
Что нового в 1.4-M3:
👉 Kotlin JVM библиотеки теперь содержат информацию о Java 9 модулях. Раньше так сделать было нельзя из-за бага в Android Gradle Plugin
👉 Функциональные интерфейсы в стандартной библиотеке. Благодаря поддержке SAM в Kotlin классах такие интерфейсы как
Comparator
теперь помечены функциональными👉 Новые операторы для коллекций:
sumOf
, minOf
, maxOf
, flatMapIndexed
👉 Функции min и max для коллекций переименованы в minOrNull и maxOrNull, а существующие версии помечены как deprecated
👉 Аннотация Throws теперь добавлена в общую библиотеку, а не только в JVM
👉 Функции
contains
, indexOf
и lastIndexOf для FloatArray
и DoubleArray
помечены deprecated👉 Добавлена возможность конвертации KType в Java Type без подключения библиотеки рефлексии
The JetBrains Blog
Kotlin 1.4-M3 is Out: Standard Library Changes | The Kotlin Blog
Today we’re glad to present the last milestone preview of Kotlin 1.4 – 1.4-M3. In this post, we’ll guide you through the changes this preview brings to the Kotlin standard library. Other components ar
#Android11 #Online #Meetup
Android 11 Beta Meetup
Android 11 Beta был анонсирован 10-го июня, но GDG Москва решили не собираться по этому поводу сразу, а дать сообществу и экспертам немного времени, чтобы попробовать с ним поработать, накопить опыт и вопросы, а потом уже собраться и поговорить об этом!
Федор Цымбал, СТО компании MERA, выступит с докладом "Новинки Android 11 о которых не все слышали".
Где конечно будет говорить о фишках Android 11. Однако в этот раз это будут не Bubbles, IME Animations, One-Time Permissions и прочие новинки, о которых слышали все, кто хоть немного интересовался 11-й версией. Он расскажет о том, что еще не так широко известно, однако должно быть не менее важно или интересно как разработчику под Android, так и простому пользователю.
После доклада к митапу присоединится Кирилл Розов, создатель канала @android_broadcast, для того чтобы обсудить новинки и ответить на ваши вопросы!
Если вы хотите предложить к обсуждению интересующую вас тему, вы можете это сделать через форму регистрации
🎁Автора самой интересной темы ждет приз!
Android 11 Beta Meetup
Android 11 Beta был анонсирован 10-го июня, но GDG Москва решили не собираться по этому поводу сразу, а дать сообществу и экспертам немного времени, чтобы попробовать с ним поработать, накопить опыт и вопросы, а потом уже собраться и поговорить об этом!
Федор Цымбал, СТО компании MERA, выступит с докладом "Новинки Android 11 о которых не все слышали".
Где конечно будет говорить о фишках Android 11. Однако в этот раз это будут не Bubbles, IME Animations, One-Time Permissions и прочие новинки, о которых слышали все, кто хоть немного интересовался 11-й версией. Он расскажет о том, что еще не так широко известно, однако должно быть не менее важно или интересно как разработчику под Android, так и простому пользователю.
После доклада к митапу присоединится Кирилл Розов, создатель канала @android_broadcast, для того чтобы обсудить новинки и ответить на ваши вопросы!
Если вы хотите предложить к обсуждению интересующую вас тему, вы можете это сделать через форму регистрации
🎁Автора самой интересной темы ждет приз!
Meetup
Login to Meetup | Meetup
Not a Meetup member yet? Log in and find groups that host online or in person events and meet people in your local community who share your interests.
#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.