Fresh Code 2023 – грантовая программа для разработчиков мини-приложений
VK Mini Apps открывает регистрацию на традиционную грантовую программу, которая продлится два месяца, а уже в декабре создатели лучших 25 сервисов смогут получить гранты по 200 000 рублей!
👉 создайте оригинальное мини-приложение в тематиках программы;
👉 участвуйте в питчингах с экспертами;
👉 опубликуйте его ВКонтакте;
👉 подайте заявку на грант;
👉 дождитесь итогов.
Подробности и форма для участия – здесь
VK Mini Apps открывает регистрацию на традиционную грантовую программу, которая продлится два месяца, а уже в декабре создатели лучших 25 сервисов смогут получить гранты по 200 000 рублей!
👉 создайте оригинальное мини-приложение в тематиках программы;
👉 участвуйте в питчингах с экспертами;
👉 опубликуйте его ВКонтакте;
👉 подайте заявку на грант;
👉 дождитесь итогов.
Подробности и форма для участия – здесь
Как работают текстовые кодировки
Записали топовый выпуск Подлодки про разные неочевидные аспекты устройства текстовых кодировок и работы с ними. Больше всего, конечно, про Unicode. Если хотите узнать, почему в любом приложении, работающем с текстом, есть баги – обязательно слушайте!
По мотивам подкаста Никита Прокопов написал еще и шикарную статью, в которой подбил основные тезисы.
Записали топовый выпуск Подлодки про разные неочевидные аспекты устройства текстовых кодировок и работы с ними. Больше всего, конечно, про Unicode. Если хотите узнать, почему в любом приложении, работающем с текстом, есть баги – обязательно слушайте!
По мотивам подкаста Никита Прокопов написал еще и шикарную статью, в которой подбил основные тезисы.
podlodka.io
Podlodka #339 – Кодировки текста
There is no such thing as a plain text. Мы позвали в гости Никиту Прокопова, автора Fira Code, и разработчика сразу нескольких UI фреймворков, чтобы поговорить о том, как компьютеры работают с текстом. Тема большая, поэтому первый выпуск мы решили посвятить…
Интерактивный гайд по CRDT
Лучший пост недели. Очень просто и подробно разбираются принципы работы CRDT, сразу в виде кода и интерактивного плейграунда. Статья про JavaScript, но все сниппеты кода очень простые, и легко переносятся на Kotlin.
Лучший пост недели. Очень просто и подробно разбираются принципы работы CRDT, сразу в виде кода и интерактивного плейграунда. Статья про JavaScript, но все сниппеты кода очень простые, и легко переносятся на Kotlin.
Jakelazaroff
An Interactive Intro to CRDTs | jakelazaroff.com
CRDTs don't have to be all academic papers and math jargon. Learn what CRDTs are and how they work through interactive visualizations and code samples.
Релиз Emcee 20
Emcee – раннер для параллельного тестирования, который разрабатывает команда AvitoTech. С его помощью можно очень сильно ускорить прогон тестов – например, в самом Авитотех 600 UI тестов прогоняются 50 минут вместо 41 часа. Emcee можно использовать как в облаке, так и на своих машинах.
Так вот, на днях у ребят вышел большой релиз 20. В нем реализовали новый способ запуска тестов через CLI и запись видео прогона тестов. А в клаудную версию добавили поддержку Appium и интеграцию с GitHub Actions.
Короче говоря, если у вашего проекта много тестов, и вы хотите ускорить время их прогона – зайдите на сайт ребят и сами посмотрите все детали.
Реклама ООО "Авито Тех", ИНН 9710089440 erid: LdtCKHR4V
Emcee – раннер для параллельного тестирования, который разрабатывает команда AvitoTech. С его помощью можно очень сильно ускорить прогон тестов – например, в самом Авитотех 600 UI тестов прогоняются 50 минут вместо 41 часа. Emcee можно использовать как в облаке, так и на своих машинах.
Так вот, на днях у ребят вышел большой релиз 20. В нем реализовали новый способ запуска тестов через CLI и запись видео прогона тестов. А в клаудную версию добавили поддержку Appium и интеграцию с GitHub Actions.
Короче говоря, если у вашего проекта много тестов, и вы хотите ускорить время их прогона – зайдите на сайт ребят и сами посмотрите все детали.
Реклама ООО "Авито Тех", ИНН 9710089440 erid: LdtCKHR4V
Coil с поддержкой Compose Multiplatform
Вышла Alpha версия Coil 3.0.0 с поддержкой Compose Multiplatform! Wasm таргет будет работать, когда выйдет Ktor с его поддержкой.
Вышла Alpha версия Coil 3.0.0 с поддержкой Compose Multiplatform! Wasm таргет будет работать, когда выйдет Ktor с его поддержкой.
GitHub
coil/CHANGELOG.md at main · coil-kt/coil
Image loading for Android and Compose Multiplatform. - coil-kt/coil
Обновленный роадмап Kotlin
Команда Kotlin поделилась своими планами на ближайший год. Из самого интересного:
👉Прямой экспорт Kotlin в Swift
👉Поддержка Wasm Component model, что даст интероп с Wasm библиотеками, написанными на любом языке
👉Одинаковая схема инлайнинга для JVM и мультиплатформы
👉Поддержка SwiftPM
👉Поддержка Gradle project isolation
👉Релиз beta версии kotlinx-datetime
Я разобрал обновление роадмапа чуть подробнее у себя в Твиттере, так что можете подписываться!
Команда Kotlin поделилась своими планами на ближайший год. Из самого интересного:
👉Прямой экспорт Kotlin в Swift
👉Поддержка Wasm Component model, что даст интероп с Wasm библиотеками, написанными на любом языке
👉Одинаковая схема инлайнинга для JVM и мультиплатформы
👉Поддержка SwiftPM
👉Поддержка Gradle project isolation
👉Релиз beta версии kotlinx-datetime
Я разобрал обновление роадмапа чуть подробнее у себя в Твиттере, так что можете подписываться!
Kotlin Help
Kotlin roadmap | Kotlin
Integrating Google Sign-In into Kotlin Multiplatform
Многие начинающие разработчики начинают писать приложение с кастомной авторизации (и часто на этом заканчиваются). Но вместо этого лучше взять какой-нибудь популярный способ, использовать готовый SDK и пойти дальше делать фичи.
Автор статьи берет для этого Compose + Kotlin Multiplatform, нативные библиотеки Google Sign-In для Android и iOS, собирает всё вместе в простой UI и приправляет сниппетами кода.
(За пост в канал спасибо @Phansier)
Многие начинающие разработчики начинают писать приложение с кастомной авторизации (и часто на этом заканчиваются). Но вместо этого лучше взять какой-нибудь популярный способ, использовать готовый SDK и пойти дальше делать фичи.
Автор статьи берет для этого Compose + Kotlin Multiplatform, нативные библиотеки Google Sign-In для Android и iOS, собирает всё вместе в простой UI и приправляет сниппетами кода.
(За пост в канал спасибо @Phansier)
Medium
Integrating Google Sign-In into Kotlin Multiplatform
In this blog post I will share with you how to implement Google Sign-In in Kotlin Multiplatform. As we go step by step, we will start…
Android, Bluetooth and BLE the modern way: a complete guide
Каждый разработчик рано или поздно сталкивается с тем, что нужно сделать интеграцию через Bluetooth c каким-нибудь девайсом. Погружение в этот ад несовместимости и неотзывчивого API оставляет неизгладимое впечатление на всю жизнь. В статье разбираются основные отличия классического Bluetooth и BLE:
👉 BLE был создан как альтернатива, помогающая экономить заряд. (Привет носимые девайсы!)
👉 BLE и Bluetooth не совместимые стандарты
👉 В Android для работы с Bluetooth нужно держать 6 разрешений (для поддержки версий от Android 4.4)
👉 Данные хранятся в characteristics, откуда удобно можно тащить значения сенсоров девайса
👉 BLE медленный, не нагружайте его слишком частыми запросами
👉 Если во время тестирования что то сломалось - попробуйте выключить и включить Bluetooth программно.
(За пост в канал спасибо @Lamprof)
Каждый разработчик рано или поздно сталкивается с тем, что нужно сделать интеграцию через Bluetooth c каким-нибудь девайсом. Погружение в этот ад несовместимости и неотзывчивого API оставляет неизгладимое впечатление на всю жизнь. В статье разбираются основные отличия классического Bluetooth и BLE:
👉 BLE был создан как альтернатива, помогающая экономить заряд. (Привет носимые девайсы!)
👉 BLE и Bluetooth не совместимые стандарты
👉 В Android для работы с Bluetooth нужно держать 6 разрешений (для поддержки версий от Android 4.4)
👉 Данные хранятся в characteristics, откуда удобно можно тащить значения сенсоров девайса
👉 BLE медленный, не нагружайте его слишком частыми запросами
👉 Если во время тестирования что то сломалось - попробуйте выключить и включить Bluetooth программно.
(За пост в канал спасибо @Lamprof)
Medium
Android, Bluetooth and BLE the modern way: a complete guide
Bluetooth is an immensely fun technology to work with. Once you learn how to search for and communicate with devices, you will be surprised…
Mastering Lazy Lists in Jetpack Compose with Data Classes and MVI
Один из самых частых кейсов в разработке приложения - список с данными. Прибавьте к нему тягу к Compose, unidirectional data flow (UDF), архитектурам (aka MVI), и получите задачу, которую решает сегодняшняя статья.
Идеи Lazy Lists отличаются от RecyclerView и автор приводит связи между ними. И, хотя пример не использует библиотек для пагинации, он подойдет для понимания принципа построения простых списков на Compose с UDF-архитектурой.
(За пост в канал спасибо @Phansier)
Один из самых частых кейсов в разработке приложения - список с данными. Прибавьте к нему тягу к Compose, unidirectional data flow (UDF), архитектурам (aka MVI), и получите задачу, которую решает сегодняшняя статья.
Идеи Lazy Lists отличаются от RecyclerView и автор приводит связи между ними. И, хотя пример не использует библиотек для пагинации, он подойдет для понимания принципа построения простых списков на Compose с UDF-архитектурой.
(За пост в канал спасибо @Phansier)
Medium
Mastering Lazy Lists in Jetpack Compose with Data Classes and MVI
This post explores how to structure and utilize data classes to build clean and efficient Lazy List composables within an MVI pattern.
Обновление Google Cast
Гугл каст существует с 2013 года, а мы получаем очередное мажорное обновление. Разработчикам онлайн-кинотеатров приготовиться!
👉 Output Switcher Больше контролов для управления потоком музыки или звука!
👉 Cast to devices nearby Теперь между гугловыми девайсами проще переключаться
👉 Cast from short-form video apps Поддержка трансляции коротких видео
👉 Persistent Cast icon Обновили SDK, теперь пользователи будут меньше теряться в приложениях, где есть поддержка хромкаст
👉 Shaka Player Новый плеер для гугл каст приемников
👉 Все больше поддерживаемых устройств
(За пост в канал спасибо @Lamprof)
Гугл каст существует с 2013 года, а мы получаем очередное мажорное обновление. Разработчикам онлайн-кинотеатров приготовиться!
👉 Output Switcher Больше контролов для управления потоком музыки или звука!
👉 Cast to devices nearby Теперь между гугловыми девайсами проще переключаться
👉 Cast from short-form video apps Поддержка трансляции коротких видео
👉 Persistent Cast icon Обновили SDK, теперь пользователи будут меньше теряться в приложениях, где есть поддержка хромкаст
👉 Shaka Player Новый плеер для гугл каст приемников
👉 Все больше поддерживаемых устройств
(За пост в канал спасибо @Lamprof)
Android Developers Blog
What's new with Google Cast?
We've launched new features to make it more seamless to cast on Android devices like TV's, speakers, smart displays, and even the latest Pixel Tablet
Разбираем обновление Jetpack Compose 1.6
Compose обновился до версии 1.6, а за ним и Compose Multiplatform выпустил бета-релиз
💪 Увеличена производительность. Проблемы с производительностью списков постепенно решаются. Бенчмарки показывают 20% роста производительности при пролистывании и 12% ускорение времени запуска компонентов
💪 Улучшена работа с рекомпозицией. Преобразование remember во время компиляции в пользу производительности. Теперь ваши брейкпоинты в remember могут быть проигнорированы, если компилятор решит что remember тут не нужен
💪 Strong skipping mode. Экспериментальный режим, который обещает более предсказуемую работу с рекомпозицией для разработчиков
🖐 Поддержка нелинейного увеличения шрифта, а также удобная работа с отступами у текста
🖐 Поддержка Drag and drop. Полезно, когда ваше приложение запускают в сплит-скрине с другим
Пробежался по изменениям в альфа версиях сопутствующих библиотек:
👉 Теперь тесты для Compose не зависят от JUnit и могут быть запущены сразу для всех платформ!
👉 В версии 1.7 появится поддержка кликабельных ссылок внутри текста
👉 В следующей версии камеры добавят поддержку оверлея, что должно быть в разы быстрее и эффективнее, чем использование сторонней библиотеки
Compose обновился до версии 1.6, а за ним и Compose Multiplatform выпустил бета-релиз
💪 Увеличена производительность. Проблемы с производительностью списков постепенно решаются. Бенчмарки показывают 20% роста производительности при пролистывании и 12% ускорение времени запуска компонентов
💪 Улучшена работа с рекомпозицией. Преобразование remember во время компиляции в пользу производительности. Теперь ваши брейкпоинты в remember могут быть проигнорированы, если компилятор решит что remember тут не нужен
💪 Strong skipping mode. Экспериментальный режим, который обещает более предсказуемую работу с рекомпозицией для разработчиков
🖐 Поддержка нелинейного увеличения шрифта, а также удобная работа с отступами у текста
🖐 Поддержка Drag and drop. Полезно, когда ваше приложение запускают в сплит-скрине с другим
Пробежался по изменениям в альфа версиях сопутствующих библиотек:
👉 Теперь тесты для Compose не зависят от JUnit и могут быть запущены сразу для всех платформ!
👉 В версии 1.7 появится поддержка кликабельных ссылок внутри текста
👉 В следующей версии камеры добавят поддержку оверлея, что должно быть в разы быстрее и эффективнее, чем использование сторонней библиотеки
Android Developers Blog
What’s new in the Jetpack Compose January ’24 release
we’re releasing version 1.6 of Jetpack Compose, Android's modern, native UI toolkit, focusing on performance and efficiency improvements.
Динамическая иконка приложения в Android
Редизайн следует по пятам, и не знаете, какую иконку выбрать? Готовитесь изменить дизайн приложения к особому событию? А может быть, вы хотите подбодрить пользователя за то, что он приобрел вашу подписку?
👉 Добавляем activity-alias к основному activity с новой иконкой, столько сколько хотим вариантов иконок
👉 Используем PackageManager и переключаем setComponentEnabledSetting для необходимого activity-alias по его android:name
👉 Необходимо вернуть иконку пользователю? Обращаемся по основному activity, где находится стандартная иконка
👉 Можно независимо переключать иконки для пользователя благодаря BroadcastReceiver в любой момент времени
Редизайн следует по пятам, и не знаете, какую иконку выбрать? Готовитесь изменить дизайн приложения к особому событию? А может быть, вы хотите подбодрить пользователя за то, что он приобрел вашу подписку?
👉 Добавляем activity-alias к основному activity с новой иконкой, столько сколько хотим вариантов иконок
👉 Используем PackageManager и переключаем setComponentEnabledSetting для необходимого activity-alias по его android:name
👉 Необходимо вернуть иконку пользователю? Обращаемся по основному activity, где находится стандартная иконка
👉 Можно независимо переключать иконки для пользователя благодаря BroadcastReceiver в любой момент времени
DIY: Твоя собственная библиотека для инъекции зависимостей
Лучший способ понять, какая библиотека для инъекции зависимостей вам нужна, — начать писать свою! Автор пишет DI-библиотеку и применяет ее на достаточно простом, но прикладном кейсе.
👉 Анти-паттерн. Если вы протаскиваете зависимость через десятки классов, только ради использования в последнем
👉 Автор изобретает заново шаг за шагом Google Guice, затем Dagger 1 и в конечном счете Dagger 2. Достаточно показательно, как приходили к существующим решениям в библиотеках
👉 Интересно было посмотреть, как генерируются factory-классы через KSP
👉 Красивая работа с аннотациями, которую можно рассматривать в отрыве от статьи
А что вы используете в проекте?
Лучший способ понять, какая библиотека для инъекции зависимостей вам нужна, — начать писать свою! Автор пишет DI-библиотеку и применяет ее на достаточно простом, но прикладном кейсе.
👉 Анти-паттерн. Если вы протаскиваете зависимость через десятки классов, только ради использования в последнем
👉 Автор изобретает заново шаг за шагом Google Guice, затем Dagger 1 и в конечном счете Dagger 2. Достаточно показательно, как приходили к существующим решениям в библиотеках
👉 Интересно было посмотреть, как генерируются factory-классы через KSP
👉 Красивая работа с аннотациями, которую можно рассматривать в отрыве от статьи
А что вы используете в проекте?
Оптимизация запуска приложения
Уже оптимизировали все запросы на старте приложения, а оно все равно долго запускается?
👉 Едим слона по частям и определяем корректные метрики для измерения старта приложения. Firebase в помощь
👉 Холодный/Горячий/Теплый старт - разделяем их и анализируем изменения по каждому отдельно
👉 Утаскиваем инициализацию тяжелых библиотек и content provider, не нужных на старте, на поздний этап с помощью Startup Library
👉 Генерируем Baseline Profiles, что приводит к небольшому приросту в 7 процентов
👉 Делаем дамп в профайлере, загружаем в Perfetto и ищем самые широкие столбцы - они отнимают больше всего времени
👉 Если в отображении много пропусков, добавляем trace в самые неочевидные для вас места
👉 Обращаем внимание на то, как рендерятся стартовые экраны. Возможно, стоит воспользоваться ViewStubs, чтобы предотвратить ненужные перетасовки лейаута?
👉 Для простых экранов LinearLayout немного быстрее, чем ConstraintLayout, если вы еще используете xml
Уже оптимизировали все запросы на старте приложения, а оно все равно долго запускается?
👉 Едим слона по частям и определяем корректные метрики для измерения старта приложения. Firebase в помощь
👉 Холодный/Горячий/Теплый старт - разделяем их и анализируем изменения по каждому отдельно
👉 Утаскиваем инициализацию тяжелых библиотек и content provider, не нужных на старте, на поздний этап с помощью Startup Library
👉 Генерируем Baseline Profiles, что приводит к небольшому приросту в 7 процентов
👉 Делаем дамп в профайлере, загружаем в Perfetto и ищем самые широкие столбцы - они отнимают больше всего времени
👉 Если в отображении много пропусков, добавляем trace в самые неочевидные для вас места
👉 Обращаем внимание на то, как рендерятся стартовые экраны. Возможно, стоит воспользоваться ViewStubs, чтобы предотвратить ненужные перетасовки лейаута?
👉 Для простых экранов LinearLayout немного быстрее, чем ConstraintLayout, если вы еще используете xml
Разбираем поддержку ресурсов в Compose Multiplatform
Недавнее обновление библиотеки Compose принесло улучшенную работу с ресурсами. Разбираемся, что и как!
👉 После обновления зависимостей в папке commonMain создаем composeResources
👉 По аналогии с ресурсами в Android создаем папки для ресурсов: drawable, font, values
👉Обращение к ресурсам аналогично R классу в Android:
👉 У новых ресурсов есть поддержка языков, по аналогии с ресурсами в нативном Android. То есть values-es является рабочим вариантом для локализации KMP приложения на испанский
Не забываем что это альфа релиз, ложка дегтя:
😡 Проблемы с плагином, исправлено в 1.6.0-dev1405
🤔 .ttf шрифты не работают, конвертируйте в .otf
😡 Нет поддержки plurals
😡 Res класс очень нестабилен и иногда не генирируется (пересборка проекта помогает)
UPD: Шрифты работают, issue
Недавнее обновление библиотеки Compose принесло улучшенную работу с ресурсами. Разбираемся, что и как!
👉 После обновления зависимостей в папке commonMain создаем composeResources
👉 По аналогии с ресурсами в Android создаем папки для ресурсов: drawable, font, values
👉Обращение к ресурсам аналогично R классу в Android:
Res.drawable.icon_one
👉 У новых ресурсов есть поддержка языков, по аналогии с ресурсами в нативном Android. То есть values-es является рабочим вариантом для локализации KMP приложения на испанский
Не забываем что это альфа релиз, ложка дегтя:
😡 Проблемы с плагином, исправлено в 1.6.0-dev1405
😡 Res класс очень нестабилен и иногда не генирируется (пересборка проекта помогает)
UPD: Шрифты работают, issue
Medium
How to use Resources in Compose Multiplatform
Featured In:https://androidweekly.net/issues/issue-608
https://mailchi.mp/kotlinweekly/kotlin-weekly-392…
https://mailchi.mp/kotlinweekly/kotlin-weekly-392…
38 частых ошибок в Compose
Боитесь перехода на Compose? Слышали о большом количестве проблем, которые возникли даже до его релиза? Предлагаю развеять свои страхи и поискать их в этой статье. В ней представлена большая подборка известных страхов, проблем а также их решений:
💪 Проблемы с производительностью, обработкой состояний, рекомпозицией
💪 Утечки памяти, асинхронная работа, оптимизация работы с памятью
💪 Темы, стили
💪 Работа со сторонними библиотеками, локализация
С помощью этого списка можно довольно подробно разобраться в большом количестве ситуаций по схеме: Проблема - Анализ - Пример кода - Решение
Боитесь перехода на Compose? Слышали о большом количестве проблем, которые возникли даже до его релиза? Предлагаю развеять свои страхи и поискать их в этой статье. В ней представлена большая подборка известных страхов, проблем а также их решений:
💪 Проблемы с производительностью, обработкой состояний, рекомпозицией
💪 Утечки памяти, асинхронная работа, оптимизация работы с памятью
💪 Темы, стили
💪 Работа со сторонними библиотеками, локализация
С помощью этого списка можно довольно подробно разобраться в большом количестве ситуаций по схеме: Проблема - Анализ - Пример кода - Решение
DEV Community
Jetpack Compose Mastery Series Finale: 38 Key Issues in Compose UI
Preface Jetpack Compose is a modern UI development framework for Android that uses a...
Multiplatform magic: One Codebase, Three Platforms
Завершаем неделю статей про Jetpack Compose, рассмотрев пример кросс-платформенного приложения на KMP
👉 Отличный пример, чтобы понять, как работает KMP и как его можно приложить к вашему проекту. Используется и многопоточность на корутинах,и SQL база данных,и работа с API
👉 Стек технологий: ktor, compose, coroutines и sqldelight
👉 В этом примере используется API, а не SDK, что позволяет прикинуть как это будет выглядеть в вашем приложении с вашим REST API
👉 В конце статьи видео того как это работает на Android, iOS и Desktop
Одним из недостатков KMP в настоящее время является сложности с локализацией, что было опущено в статье. Но может в ближайших релизах станет лучше?
Завершаем неделю статей про Jetpack Compose, рассмотрев пример кросс-платформенного приложения на KMP
👉 Отличный пример, чтобы понять, как работает KMP и как его можно приложить к вашему проекту. Используется и многопоточность на корутинах,и SQL база данных,и работа с API
👉 Стек технологий: ktor, compose, coroutines и sqldelight
👉 В этом примере используется API, а не SDK, что позволяет прикинуть как это будет выглядеть в вашем приложении с вашим REST API
👉 В конце статьи видео того как это работает на Android, iOS и Desktop
Одним из недостатков KMP в настоящее время является сложности с локализацией, что было опущено в статье. Но может в ближайших релизах станет лучше?
Medium
Multiplatform Magic: One Codebase, Three Platforms
Compose Multiplatform opens a world of possibilities for developers, allowing them to build native-looking experiences for both Android and…
Дедлайны в Google Play
Грядущие обновления политик в Google Play могут принести неприятности. За их несоблюдение вы рискуете быть лишенным обновлений, а затем, временно удалены из магазина. Лучше заложить в планирование исправление этих проблем заранее!
Прошедший январь
🤜 SafetyNet считается устаревшей системой. Она в основном используется для капчи старого образца и иногда используется в старых версиях библиотек Firebase, связанных с авторизацией. Это обновление требует небольших доработок на бекенде!
🤜 Ограничение на использование GenAI.
🤜 Все новые приложения должны использовать свежий API для управления подписками
Февраль
🤜 Необходимо пройти верификацию аккаунта разработчика
Май
🤜 Все приложения должны использовать новый API для управления подписками
🤜 USE_FULL_SCREEN_INTENT выдается автоматически только приложениям, которым это нужно (возможно, будет добавлен флажок в Google Play).
🤜 Новые требования для приложений, связанных со здоровьем
Август
🤜 Ограничение приложений на использование пермишна связанного с доступом к фото и видео пользователя. Переходите лучше на системный способ выбора фото, или придется доказывать Google Play что это действительно надо
- Январь 2025
🤜 SafetyNet полностью будет отключена, старые верификации капчи более не будут работать
Грядущие обновления политик в Google Play могут принести неприятности. За их несоблюдение вы рискуете быть лишенным обновлений, а затем, временно удалены из магазина. Лучше заложить в планирование исправление этих проблем заранее!
Прошедший январь
🤜 SafetyNet считается устаревшей системой. Она в основном используется для капчи старого образца и иногда используется в старых версиях библиотек Firebase, связанных с авторизацией. Это обновление требует небольших доработок на бекенде!
🤜 Ограничение на использование GenAI.
🤜 Все новые приложения должны использовать свежий API для управления подписками
Февраль
🤜 Необходимо пройти верификацию аккаунта разработчика
Май
🤜 Все приложения должны использовать новый API для управления подписками
🤜 USE_FULL_SCREEN_INTENT выдается автоматически только приложениям, которым это нужно (возможно, будет добавлен флажок в Google Play).
🤜 Новые требования для приложений, связанных со здоровьем
Август
🤜 Ограничение приложений на использование пермишна связанного с доступом к фото и видео пользователя. Переходите лучше на системный способ выбора фото, или придется доказывать Google Play что это действительно надо
- Январь 2025
🤜 SafetyNet полностью будет отключена, старые верификации капчи более не будут работать
Android Developers
Google Play Policies | Android Developers
Improving unit test performance
Прикладные советы по ускорению запуска юнит-тестов. Основная идея заключается в отключении ненужных gradle task как локально, так и на CI
👉 Если вы используете Crashlytics, выключите injectCrashlyticsBuildIds для тестов
👉 Проверьте и удалите ненужные зависимости, использующие kapt
👉 Если вы пишете тесты аккуратно и используете моки вместо DI, то вам не нужен Dagger-Hilt для unit тестов и, следовательно, kapt и kaptTest для их конфигурации
👉 Если успешно отключили Dagger-Hilt, то и плагин не нужен. Убираем dagger.hilt.android.plugin
👉 Принудительно отключаем все kapt задачи после удаления всех его конфигураций kaptTest для unit тестов
Прикладные советы по ускорению запуска юнит-тестов. Основная идея заключается в отключении ненужных gradle task как локально, так и на CI
👉 Если вы используете Crashlytics, выключите injectCrashlyticsBuildIds для тестов
👉 Проверьте и удалите ненужные зависимости, использующие kapt
👉 Если вы пишете тесты аккуратно и используете моки вместо DI, то вам не нужен Dagger-Hilt для unit тестов и, следовательно, kapt и kaptTest для их конфигурации
👉 Если успешно отключили Dagger-Hilt, то и плагин не нужен. Убираем dagger.hilt.android.plugin
👉 Принудительно отключаем все kapt задачи после удаления всех его конфигураций kaptTest для unit тестов
Medium
Improving unit test performance in MEGA Android
By Erick Sumargo, Senior Android Engineer, Mobile, MEGA
Обновление приложения до targetSdk 34
Обязательное обновление targetSdkVersion ожидается, предположительно, в августе этого года. Добавляем задачку в беклог ближайшего спринта и не переживаем о предупреждениях из Google Play
👉 Если вы используете foreground сервисы, то для них появился foregroundServiceType, который нужно будет определить в манифесте
👉 Обновление Android привело к обновлению OpenJDK до 17. А это значит что могло сломаться: регулярные выражения, ProGuard и десериализация UUID.
👉 При использования BluetoothAdapter.getProfileConnectionState требуется BLUETOOTH_CONNECT (Должен быть и в манифесте и запрашиваться в рантайме)
👉 Ограничения для Intent. Тщательно проверьте, как используется android:exported в ваших приложениях. Неявный Intent может быть отправлен только к android:exported="true”
👉 У BroadcastReceiver новый параметр - ContextCompat.RECEIVER_EXPORTED. Добавляем его в зависимости от того, как вы с ним работаете
👉 Динамически подгружаемый код должен быть помечен как readOnly перед использованием
👉 Ограничения на работу с ZipFile. Теперь будет кидаться ошибка, если в имени есть модификаторы пути до файла ".." или "/".
👉 Расширение ограничений при запуске приложений в фоне. Добавляем еще один параметр в PendingIntent.
В целом, ассистент миграции поможет вам перевести приложение на новое SDK, но лучше самостоятельно проверить, что все упомянутые моменты были переведены верно, иначе рискуете получить неверное поведение приложения или просто краш
Обязательное обновление targetSdkVersion ожидается, предположительно, в августе этого года. Добавляем задачку в беклог ближайшего спринта и не переживаем о предупреждениях из Google Play
👉 Если вы используете foreground сервисы, то для них появился foregroundServiceType, который нужно будет определить в манифесте
👉 Обновление Android привело к обновлению OpenJDK до 17. А это значит что могло сломаться: регулярные выражения, ProGuard и десериализация UUID.
👉 При использования BluetoothAdapter.getProfileConnectionState требуется BLUETOOTH_CONNECT (Должен быть и в манифесте и запрашиваться в рантайме)
👉 Ограничения для Intent. Тщательно проверьте, как используется android:exported в ваших приложениях. Неявный Intent может быть отправлен только к android:exported="true”
👉 У BroadcastReceiver новый параметр - ContextCompat.RECEIVER_EXPORTED. Добавляем его в зависимости от того, как вы с ним работаете
👉 Динамически подгружаемый код должен быть помечен как readOnly перед использованием
👉 Ограничения на работу с ZipFile. Теперь будет кидаться ошибка, если в имени есть модификаторы пути до файла ".." или "/".
👉 Расширение ограничений при запуске приложений в фоне. Добавляем еще один параметр в PendingIntent.
В целом, ассистент миграции поможет вам перевести приложение на новое SDK, но лучше самостоятельно проверить, что все упомянутые моменты были переведены верно, иначе рискуете получить неверное поведение приложения или просто краш
Android Developers
Behavior changes: Apps targeting Android 14 or higher | Android Developers
Learn about changes in Android 14 that will affect apps when they target Android 14 or higher.