Вход в приложение
#security #android
Почти в любом приложении, которое хоть как-то связано с хранением и работой с приватными данными, имеется аутентификация: или вход по паролю, или вход по биометрии + паролю.
И кажется, что задача супер простая: добавь сверху экран, который будет появляться при старте приложения, сохрани пароль на устройстве и сверяй с тем, что ввёл пользователь. Но на практике — большинство приложений в большей или меньшей степени реализуют вход некорректно: неправильно хранят пароль, не используют
Я поискал за вас и даю сразу несколько статей и уроков, которые с огромной вероятностью помогут вам корректно реализовать вход в приложение:
1️⃣ Тут автор рассказывает про пример некорректной авторизации в приложение и про свойства
2️⃣ Отличное видео, где по шагам описывается процесс создания биометрической авторизации в приложение: разницу между различными классами для авторизации, как затащить alpha-версию библиотеки для входа (удивился, что она до сих пор в alpha) и наконец-то сделать корректный вход по отпечатку.
3️⃣ Библиотека PINkman, которая позволяет добавить вход по пину в приложение: можете не тащить всю либу в проект, но внутри — много крутых идей по корректному хранению пароля в системе. А можете и затащить, если не хочется разбираться.
4️⃣ Статья, где автор описывает ещё одно хитрое свойство — setUserAuthenticationValidityDurationSeconds, которое также может быть использовано как уязвимость для входа.
5️⃣ Ну и напоследок — больше информации про составляющие качественной криптографии в Android:
Конечно, идеальной защиты не существует и от "паяльника" в руках злоумышленника врядли поможет какой-то из методов защиты. Но для всех остальных случаев ваша защита способна защитить приложение и приватные данные пользователя.
#security #android
Почти в любом приложении, которое хоть как-то связано с хранением и работой с приватными данными, имеется аутентификация: или вход по паролю, или вход по биометрии + паролю.
И кажется, что задача супер простая: добавь сверху экран, который будет появляться при старте приложения, сохрани пароль на устройстве и сверяй с тем, что ввёл пользователь. Но на практике — большинство приложений в большей или меньшей степени реализуют вход некорректно: неправильно хранят пароль, не используют
CryptoObject
, дают возможность обойти экран входа и т.д.Я поискал за вас и даю сразу несколько статей и уроков, которые с огромной вероятностью помогут вам корректно реализовать вход в приложение:
1️⃣ Тут автор рассказывает про пример некорректной авторизации в приложение и про свойства
CryptoObject
, setUserAuthenticationRequired
и о том, как эксплуатировать эти хаки. 2️⃣ Отличное видео, где по шагам описывается процесс создания биометрической авторизации в приложение: разницу между различными классами для авторизации, как затащить alpha-версию библиотеки для входа (удивился, что она до сих пор в alpha) и наконец-то сделать корректный вход по отпечатку.
3️⃣ Библиотека PINkman, которая позволяет добавить вход по пину в приложение: можете не тащить всю либу в проект, но внутри — много крутых идей по корректному хранению пароля в системе. А можете и затащить, если не хочется разбираться.
4️⃣ Статья, где автор описывает ещё одно хитрое свойство — setUserAuthenticationValidityDurationSeconds, которое также может быть использовано как уязвимость для входа.
5️⃣ Ну и напоследок — больше информации про составляющие качественной криптографии в Android:
KeyStore
, MasterKeys
, Blocking
, Padding
и другие страшные слова.Конечно, идеальной защиты не существует и от "паяльника" в руках злоумышленника врядли поможет какой-то из методов защиты. Но для всех остальных случаев ваша защита способна защитить приложение и приватные данные пользователя.
🔥17👍6❤4😁1
Автоматизация публикации в магазины приложений
#android
Как-то на канале было рассказано о теме, связанной с автоматизацией процессов публикации приложений.
На глаза попалась статья, которая дополняет тот пост и делает автоматизацию ещё более полной.
В статье рассказывается про то, как сделать полной загрузку своих билдов в Google Play и AppGallery. Описывается другой плагин, который делает загрузку в AppGallery более полной. Кажется, что отличное решение.
Лучше может быть только единое решение с большинством магазинов приложений, вдруг кто-то ищет идею для написания CI-таски 😉
#android
Как-то на канале было рассказано о теме, связанной с автоматизацией процессов публикации приложений.
На глаза попалась статья, которая дополняет тот пост и делает автоматизацию ещё более полной.
В статье рассказывается про то, как сделать полной загрузку своих билдов в Google Play и AppGallery. Описывается другой плагин, который делает загрузку в AppGallery более полной. Кажется, что отличное решение.
Лучше может быть только единое решение с большинством магазинов приложений, вдруг кто-то ищет идею для написания CI-таски 😉
👍11
Android Studio Hedgehog
#android
Тут пару дней назад вышла canary-версия новой Android Studio — Hedgehog 🦔. Если вдруг тут есть любители попробовать свежие IDE самостоятельно, но можете устанавливать, а для всех остальных — опишу основные новинки.
1️⃣ Визард для Baseline Profiles — любопытная фича, которая позволяет довольно сильно уменьшить время запуска приложения, и теперь можно автоматически генерировать профили для новых модулей. Что ж, будем изучать.
2️⃣ Safe Mode для IDE — возможно полезная фича для тех, кто любит экспериментировать с небезопасными плагинами и конфигурациями. Можно запускать IDE в safe mode и откатить настройки, если что-то пошло не так.
3️⃣ Embedded Layout Inspector — фича, которая позволяет проанализировать экран прямо на вашем устройстве, показать дерево компонентов и сделать процесс дебага
4️⃣ JVM 17 bytecode — теперь у последнего плагина Gradle таргет на JVM 17, так что обновляем свои
#android
Тут пару дней назад вышла canary-версия новой Android Studio — Hedgehog 🦔. Если вдруг тут есть любители попробовать свежие IDE самостоятельно, но можете устанавливать, а для всех остальных — опишу основные новинки.
1️⃣ Визард для Baseline Profiles — любопытная фича, которая позволяет довольно сильно уменьшить время запуска приложения, и теперь можно автоматически генерировать профили для новых модулей. Что ж, будем изучать.
2️⃣ Safe Mode для IDE — возможно полезная фича для тех, кто любит экспериментировать с небезопасными плагинами и конфигурациями. Можно запускать IDE в safe mode и откатить настройки, если что-то пошло не так.
3️⃣ Embedded Layout Inspector — фича, которая позволяет проанализировать экран прямо на вашем устройстве, показать дерево компонентов и сделать процесс дебага
View
ещё удобнее. 4️⃣ JVM 17 bytecode — теперь у последнего плагина Gradle таргет на JVM 17, так что обновляем свои
sourceCompatibility
и targetCompatibility
.👍17❤1
InsetsX
#compose
Небольшая библиотека, которая позволяет вам шустро настраивать инсеты при использовании Compose Multiplatform для Android и iOS.
Выглядит очень круто, и работает по аналогии со стандартным плагином для Android (отличается только package-name).
Ну и помните, что Compose Multiplatform для iOS пока сырой, так что тащите осторожнее.
#compose
Небольшая библиотека, которая позволяет вам шустро настраивать инсеты при использовании Compose Multiplatform для Android и iOS.
Выглядит очень круто, и работает по аналогии со стандартным плагином для Android (отличается только package-name).
Ну и помните, что Compose Multiplatform для iOS пока сырой, так что тащите осторожнее.
👍11💋2🤔1
Android Performance — I/O 2023
#android
Думаю все в курсе, недавно прошедшего Google I/O, где было представлено много всего интересного для Android. Однако сегодня я хочу рассказать про новые штуки для улучшения производительности приложения.
1️⃣ Обновления Baseline Profiles — они помогают заметно улучшить время старта приложения, избегая JIT-компиляции. Ребята улучшили процесс создания профилей, добавили шаблон в Android Studio, а также Baseline Profile Gradle plugin. Чтобы лучше разобраться с фичёй — вот вам codelab по теме.
2️⃣ Startup Profiles — вдогонку к предыдущему пункту фича, которая позволяет описать код, который пойдёт в primary dex file вашего приложения, за счёт чего вы уменьшите время его старта.
3️⃣ Android Studio Power Profiler будет особо полезен для приложений, которые используют камеру, GPS и другие датчики. Можно мониторить потребление ими заряда телефона, что поможет в отладке.
Подробнее о всех нововведениях можно почитать тут. 🤓
#android
Думаю все в курсе, недавно прошедшего Google I/O, где было представлено много всего интересного для Android. Однако сегодня я хочу рассказать про новые штуки для улучшения производительности приложения.
1️⃣ Обновления Baseline Profiles — они помогают заметно улучшить время старта приложения, избегая JIT-компиляции. Ребята улучшили процесс создания профилей, добавили шаблон в Android Studio, а также Baseline Profile Gradle plugin. Чтобы лучше разобраться с фичёй — вот вам codelab по теме.
2️⃣ Startup Profiles — вдогонку к предыдущему пункту фича, которая позволяет описать код, который пойдёт в primary dex file вашего приложения, за счёт чего вы уменьшите время его старта.
3️⃣ Android Studio Power Profiler будет особо полезен для приложений, которые используют камеру, GPS и другие датчики. Можно мониторить потребление ими заряда телефона, что поможет в отладке.
Подробнее о всех нововведениях можно почитать тут. 🤓
👍15🤔1
Coroutines — неочевидные баги
#kotlin #android
Прочитал хорошую статью с не самыми очевидными багами при работе с Coroutines, и спешу поделиться ей с вами.
Тут рассказывается:
👉 что будет если вызвать tryEmit() при работе с
👉 что будет с Coroutines, которые вызываются в одном
👉 неприятный баг при работе с
А какие неочевидные баги встречали вы?
#kotlin #android
Прочитал хорошую статью с не самыми очевидными багами при работе с Coroutines, и спешу поделиться ей с вами.
Тут рассказывается:
👉 что будет если вызвать tryEmit() при работе с
SharedFlow
без дополнительной настройки replay и extraBufferCapacity;👉 что будет с Coroutines, которые вызываются в одном
repeatOnLifecycle
;👉 неприятный баг при работе с
suspendCancellableCoroutine
.А какие неочевидные баги встречали вы?
❤12👍6🤔1
Профайлинг gradle
#gradle
Недавно обновлял версию Gradle до самой последней, и случайно наткнулся на инструмент, которого раньше не замечал, но который может сильно помочь в настройке Gradle.
Суть в профайлинге различных конфигураций и настроек: вы указываете список тасок, которые хотите протестировать, настройки для них, сохраняете сценарии — и запускаете на своей машине или CI.
В итоге за парочку прогонов сможете выбрать оптимальную конфигурацию.
#gradle
Недавно обновлял версию Gradle до самой последней, и случайно наткнулся на инструмент, которого раньше не замечал, но который может сильно помочь в настройке Gradle.
Суть в профайлинге различных конфигураций и настроек: вы указываете список тасок, которые хотите протестировать, настройки для них, сохраняете сценарии — и запускаете на своей машине или CI.
В итоге за парочку прогонов сможете выбрать оптимальную конфигурацию.
👍12
App Size Metrics на CI
#android #ci #gradle
Размер приложения — очень важная метрика, которой мы часто пренебрегаем. А если в какой-то момент размер APK начинает беспокоить, и мы заводим себе задачу в спринт, чтобы уменьшить его размер, то всё равно со временем всё возвращается обратно.
Есть статистика, которая говорит, что увеличение размера apk на 6mb уменьшает количество загрузок на 1%. 🫣 В процентах кажется, что это маленькая величина, но на деле — это могут быть сотни, а то и тысячи юзеров.
Хорошая статья, где рассказывается о том, как сделать размер apk меньше — тут, но впервые мне на глаза попадается плагин, который поможет контролировать размер приложения при помощи CI.
Идея довольно простая: при каждом PR будет запускаться job, которая проверит разницу между последним коммитом и вашими изменениями, и напишет разницу. Это сразу поможет проверить, всё ли хорошо с добавляемыми изменениями или нет. Ну и у вас не будет теперь тех.долга для того, чтобы размер приложения уменьшать. Сплошные плюсы🤓 .
Больше деталей, как всё настроить можно прочитать тут.
#android #ci #gradle
Размер приложения — очень важная метрика, которой мы часто пренебрегаем. А если в какой-то момент размер APK начинает беспокоить, и мы заводим себе задачу в спринт, чтобы уменьшить его размер, то всё равно со временем всё возвращается обратно.
Есть статистика, которая говорит, что увеличение размера apk на 6mb уменьшает количество загрузок на 1%. 🫣 В процентах кажется, что это маленькая величина, но на деле — это могут быть сотни, а то и тысячи юзеров.
Хорошая статья, где рассказывается о том, как сделать размер apk меньше — тут, но впервые мне на глаза попадается плагин, который поможет контролировать размер приложения при помощи CI.
Идея довольно простая: при каждом PR будет запускаться job, которая проверит разницу между последним коммитом и вашими изменениями, и напишет разницу. Это сразу поможет проверить, всё ли хорошо с добавляемыми изменениями или нет. Ну и у вас не будет теперь тех.долга для того, чтобы размер приложения уменьшать. Сплошные плюсы
Больше деталей, как всё настроить можно прочитать тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍1
Network Inspector в Flamingo
#android
В Android Studio Flamingo появилась полезнейшая фича — Network Inspector.
Она сильно упрощает дебаг запросов к приложению: ведь можно менять формат запроса, Body, Headers, Response... в целом, почти всё, для чего вам нужен был Charles.
Небольшая статья с демо как использовать эту фичу для себя.
#android
В Android Studio Flamingo появилась полезнейшая фича — Network Inspector.
Она сильно упрощает дебаг запросов к приложению: ведь можно менять формат запроса, Body, Headers, Response... в целом, почти всё, для чего вам нужен был Charles.
Небольшая статья с демо как использовать эту фичу для себя.
🔥18👍3
Обзор уязвимостей Positive Hack Days
#security
Отдельное место у меня занимают статьи, которые рассказывают о лучших практиках безопасности Android-приложений: ведь даже если приложение будет с идеальным UI-UX, но будет иметь дыры в безопасности, то вся работа может свестись на нет. 🥴
Вот вам отличный список-обзор уязвимостей с недавнего Positive Hack Days: рекомендую сделать овервью своего приложения, вдруг найдёте что-то подобное.
Тут и
#security
Отдельное место у меня занимают статьи, которые рассказывают о лучших практиках безопасности Android-приложений: ведь даже если приложение будет с идеальным UI-UX, но будет иметь дыры в безопасности, то вся работа может свестись на нет. 🥴
Вот вам отличный список-обзор уязвимостей с недавнего Positive Hack Days: рекомендую сделать овервью своего приложения, вдруг найдёте что-то подобное.
Тут и
exported=true
для WebViewActivity
, и проблемы в дебаг-панели, и вход без PIN-кода в приложение через виджет... в общем, есть на что обратить внимание. 👌🔥17❤1👍1
Давайте устроим пятничный холивар в комментах:
Если бы вы сейчас писали приложение с нуля, то какой бы стек выбрали и почему?
- без ограничений по библиотекам и технологиям;
- можно выбрать или нативную, или кроссплатформенную разработку;
- если это нативная разработка, то под iOS будет отдельная команда; 😌
Если бы вы сейчас писали приложение с нуля, то какой бы стек выбрали и почему?
- без ограничений по библиотекам и технологиям;
- можно выбрать или нативную, или кроссплатформенную разработку;
- если это нативная разработка, то под iOS будет отдельная команда; 😌
😁7👍3
values() или entries()
#kotlin
В Kotlin 1.9.0 из стадии Experimental в Stable перешла property entries(), которую можно вызывать для любых Enum и получить список всех элементов, которые в нём объявлены.
Зачем же нужна ещё одна функция, когда есть values()?
На самом деле, причин сразу несколько:
1️⃣ При каждом вызове функции создаётся новый Array: это одна из известных причин "скрытых" performance-багов.
2️⃣ При работе вызывается
3️⃣ Ну и ещё — сложнее писать extension-функции для
Ну а в
Чуть больше информации можно найти тут. Теперь вы знаете, что ответить на собеседовании, и почему стоит перейти на entries().🤓
#kotlin
В Kotlin 1.9.0 из стадии Experimental в Stable перешла property entries(), которую можно вызывать для любых Enum и получить список всех элементов, которые в нём объявлены.
Зачем же нужна ещё одна функция, когда есть values()?
На самом деле, причин сразу несколько:
Array<E>
, который мутабелен, а также меньше подходит для работы с коллекциями, чем список. Array<E>
вместо стандартных List<T>
.Ну а в
entries()
таких недостатков нет, а самое главное, что при вызове всегда используется один и тот же список и нет повторного создания.Чуть больше информации можно найти тут. Теперь вы знаете, что ответить на собеседовании, и почему стоит перейти на entries().
Please open Telegram to view this post
VIEW IN TELEGRAM
❤31👍12🔥5
Gradle 8.x
#gradle
Кстати, забыл поделиться опытом по обновлению Gradle в своём основном проекте. Возможно, он будет для вас полезен.
Главной задержкой для обновления у меня было отсутствие поддержки свежей версии Gradle в Huawei-плагине. Никакой информации о том, что делать я не нашёл, но позже написал в поддержу Huawei и они создали целый раздел, где кратко описали, как обойти ограничение. Был приятно удивлён качеством поддержки.👌
После этого, особых проблем при обновлении не было:
👉 обязательно посмотрите список изменений: довольно много флагов изменяют своё состояние, например
👉 если вы не перешли на
👉 собирая проект, обратите внимание на ворнинги, которые необходимо разрешить: у меня это был целый ряд новых правил в proguard.
В целом, на этом всё. Теперь записал в тех.долг перейти на ksp и на нетранзитивные классы ресурсов, но об этом уже в следующий раз.🤘
#gradle
Кстати, забыл поделиться опытом по обновлению Gradle в своём основном проекте. Возможно, он будет для вас полезен.
Главной задержкой для обновления у меня было отсутствие поддержки свежей версии Gradle в Huawei-плагине. Никакой информации о том, что делать я не нашёл, но позже написал в поддержу Huawei и они создали целый раздел, где кратко описали, как обойти ограничение. Был приятно удивлён качеством поддержки.
После этого, особых проблем при обновлении не было:
👉 обязательно посмотрите список изменений: довольно много флагов изменяют своё состояние, например
nonFinalResIds
, nonTransitiveRClass
. Если вы будете использовать встроенный "мигратор" из Android Studio, то он проставит все флаги за вас (ну или почти все).👉 если вы не перешли на
enableR8.fullMode
, то обязательно выключите его в properties, иначе после сборки проекта можете увидеть целый ряд непонятных крашей.👉 собирая проект, обратите внимание на ворнинги, которые необходимо разрешить: у меня это был целый ряд новых правил в proguard.
В целом, на этом всё. Теперь записал в тех.долг перейти на ksp и на нетранзитивные классы ресурсов, но об этом уже в следующий раз.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥2
Как у вас устроена документация?
#вопрос
А поделитесь своими знаниями о ведении документации:
👉 есть ли она у вас в проекте?
👉 какими сервисами пользуетесь для ведения и почему?
👉 как устроен процесс добавления знаний в документацию, и кто за это отвечает?
👉 полезные доклады или статьи, которые могут сильно помочь в ведении документации.
Сейчас пытаюсь выстроить процесс создания документации: остановился на Obsidian как инструменте для сохранения знаний.
Notion кажется слишком неудобным для большого количества информации, ну и плюс — нет поддержки Markdown, если захочется перейти в другой сервис. Но, возможно, у вас есть больше аргументов в его пользу.
Буду ряд любой информации по топику, в будущем обязательно поделюсь с вами наработками.🤓
#вопрос
А поделитесь своими знаниями о ведении документации:
👉 есть ли она у вас в проекте?
👉 какими сервисами пользуетесь для ведения и почему?
👉 как устроен процесс добавления знаний в документацию, и кто за это отвечает?
👉 полезные доклады или статьи, которые могут сильно помочь в ведении документации.
Сейчас пытаюсь выстроить процесс создания документации: остановился на Obsidian как инструменте для сохранения знаний.
Notion кажется слишком неудобным для большого количества информации, ну и плюс — нет поддержки Markdown, если захочется перейти в другой сервис. Но, возможно, у вас есть больше аргументов в его пользу.
Буду ряд любой информации по топику, в будущем обязательно поделюсь с вами наработками.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14
Оптимизации Compose
#compose
Классная статья, в которой рассказывается о полезных оптимизациях для Compose.
Вполне возможно, что эти рекомендации помогут и вашему UI работать быстрее.
Тут и про оптимизацию пропусков в Composable-функциях, и про то, что делать при долгих вычислениях при рекомпозиции, а также куча ссылок о том, как писать свои Compose-layouts. Ну и для каждого кейса есть свой пример с кодом. 👌
Ссылка на статью тут.
#compose
Классная статья, в которой рассказывается о полезных оптимизациях для Compose.
Вполне возможно, что эти рекомендации помогут и вашему UI работать быстрее.
Тут и про оптимизацию пропусков в Composable-функциях, и про то, что делать при долгих вычислениях при рекомпозиции, а также куча ссылок о том, как писать свои Compose-layouts. Ну и для каждого кейса есть свой пример с кодом. 👌
Ссылка на статью тут.
🔥15👍6
Android Studio Templates
#android
Полезная статья, где описаны базовые шаблоны для работы в Android Studio, а ещё — есть целый набор кастомных, но полезных шаблонов. Сам я редко использую эту фичу, хотя думаю стоит не забывать ей пользоваться, ведь это экономит время на бойлерплейт.
Например:
👉
👉
👉
Авто предлагает создать ещё целый ряд шаблонов: HiltViewModel, MutableStateFlow и StateFlow, Binds в Hilt... в общем, всё это здорово сэкономит наше свами время.
#android
Полезная статья, где описаны базовые шаблоны для работы в Android Studio, а ещё — есть целый набор кастомных, но полезных шаблонов. Сам я редко использую эту фичу, хотя думаю стоит не забывать ей пользоваться, ведь это экономит время на бойлерплейт.
Например:
👉
void
, fun0
, fun1
, fun2
— создаёт функцию с необходимым нам набором параметров;👉
ifn
/ inn
— то же самое, что и if ( … == null) / if ( … != null);👉
comp
— создаёт Compose-функцию;Авто предлагает создать ещё целый ряд шаблонов: HiltViewModel, MutableStateFlow и StateFlow, Binds в Hilt... в общем, всё это здорово сэкономит наше свами время.
👍20❤3
Утечки памяти в Android
#android
Довольно распространённой ошибкой при написании Android-приложений является
Сейчас есть несколько методов, которые помогают в распознавании утечек в Android, тот же LeakCanary. Но для полного понимания необходимо знать, а как возникают утечки и на что стоит обратить внимание, чтобы не допустить их появления?
В этом вам поможет эта замечательная статья. Автор рассказывает про то, как:
👉 работает Garbage Collector, и какие знания нужны нам, чтобы не допускать утечек;
👉 что такое многопоточные утечки памяти, и снова как их не допустить);
👉 про файловые дескрипторы, и какие утечки они могут вызвать.
Ждём вторую часть, где будет больше информации о практических инструментах, которые помогут бороться с утечками.🤓
#android
Довольно распространённой ошибкой при написании Android-приложений является
OutOfMemoryError
. Уверен, что любой (ну или почти любой) разработчик сталкивался с этой ошибкой. Одной из причин возникновения этой проблемы являются утечки памяти.Сейчас есть несколько методов, которые помогают в распознавании утечек в Android, тот же LeakCanary. Но для полного понимания необходимо знать, а как возникают утечки и на что стоит обратить внимание, чтобы не допустить их появления?
В этом вам поможет эта замечательная статья. Автор рассказывает про то, как:
👉 работает Garbage Collector, и какие знания нужны нам, чтобы не допускать утечек;
👉 что такое многопоточные утечки памяти, и снова как их не допустить);
👉 про файловые дескрипторы, и какие утечки они могут вызвать.
Ждём вторую часть, где будет больше информации о практических инструментах, которые помогут бороться с утечками.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23
Пишем свой Main Loop в Android
#android
При написании любого приложения необходимо взаимодействовать с главным потоком. К счастью, нам не нужно писать свой Loop для каждого приложения, мы работаем с уже готовым компонентом.
Но вот вам годная статья, где автор, чтобы лучше понять принцип работы главного цикла в Android пишет свой аналог: при этом получается детальная статья, где описывается то, как работает непосредственно главный поток.
Всячески рекомендую, чтобы, наконец, разобраться с этой темой и не оплошать на собеседовании.🤞
#android
При написании любого приложения необходимо взаимодействовать с главным потоком. К счастью, нам не нужно писать свой Loop для каждого приложения, мы работаем с уже готовым компонентом.
Но вот вам годная статья, где автор, чтобы лучше понять принцип работы главного цикла в Android пишет свой аналог: при этом получается детальная статья, где описывается то, как работает непосредственно главный поток.
Всячески рекомендую, чтобы, наконец, разобраться с этой темой и не оплошать на собеседовании.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤5🔥2👏1🤩1
Android 14 Beta 5
#android
Вчера вышла 5 beta версия свеженького Android. Beta означает, что API уже стабилизированы и можно смело проверять работу приложения.💪️️️️️️ Есть несколько вещей на которые стоит обратить внимание:
👉 если в приложении есть доступ к фото и видео, то проверьте, обрабатываете ли вы
👉 если вы вдруг использовали
👉 есть изменения в non-dismissable notifications: теперь пользователь может их смахнуть, исключения составляют только кнопки Clear all и заблокированный смартфон.
👉 есть изменения в разрешении
👉 приложения теперь могут убивать только собственные background-процессы.
👉 теперь из системы поддерживается нелинейное скалирование текста до 200%. Думаю, что ничего не должно измениться, если вы использовали sp, но на всякий случай стоит пересмотреть layouts.
Теперь ждём финальной сборочки Android 14, она совсем рядом.🙃
#android
Вчера вышла 5 beta версия свеженького Android. Beta означает, что API уже стабилизированы и можно смело проверять работу приложения.
👉 если в приложении есть доступ к фото и видео, то проверьте, обрабатываете ли вы
READ_MEDIA_VISUAL_USER_SELECTED
: теперь пользователь может давать частичное разрешение к своим фото и видео. Ну или используйте PhotoPicker, хорошая штука.👉 если вы вдруг использовали
Notification.Builder.setFullScreenIntent
, то теперь не сможете, так как Google уберёт это разрешение для всех приложений, кроме звонков и будильников. Это тип оповещения, который используется для очень важных сообщений, и на практике не встречал приложений, которые этим злоупотребляют.👉 есть изменения в non-dismissable notifications: теперь пользователь может их смахнуть, исключения составляют только кнопки Clear all и заблокированный смартфон.
👉 есть изменения в разрешении
SCHEDULE_EXACT_ALARM
, которое теперь не предоставляется по умолчанию. Будет полезно изучить best practices, если вы используете exact alarms.👉 приложения теперь могут убивать только собственные background-процессы.
👉 теперь из системы поддерживается нелинейное скалирование текста до 200%. Думаю, что ничего не должно измениться, если вы использовали sp, но на всякий случай стоит пересмотреть layouts.
Теперь ждём финальной сборочки Android 14, она совсем рядом.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2
Улучшение времени запуска приложения
#android
Очень важно время от времени "разгребать" технический долг в своём проекте и делать технические улучшения, которые приведут к более качественной работе приложения.
Если у вас кончились идеи для технических спринтов (вдруг такое произошло) или вы не задумывались о времени запуска приложения — то вот вам несколько ссылок о том, как сделать запуск вашего приложения быстрее.
Начать стоит с того, чтобы посмотреть на инструменты, которые позволят проанализировать текущую ситуацию. Одним из них является Macrobenchmark, который даёт весьма полезные данные о том, как работает приложение. Ещё можно использовать Perfetto для визуализации результатов и встроить бенчмарк в процесс CI.
Ну и для мотивации — две статьи с опытом применения целого ряда инструментов, чтобы улучшить время запуска.
Тут ребята из Dodo описывают процесс повышения скорости запуска одного из своих приложений на 20%, а тут похожий опыт компании Mercado Libre (довольно крупный стартап Латинской Америки).
#android
Очень важно время от времени "разгребать" технический долг в своём проекте и делать технические улучшения, которые приведут к более качественной работе приложения.
Если у вас кончились идеи для технических спринтов (вдруг такое произошло) или вы не задумывались о времени запуска приложения — то вот вам несколько ссылок о том, как сделать запуск вашего приложения быстрее.
Начать стоит с того, чтобы посмотреть на инструменты, которые позволят проанализировать текущую ситуацию. Одним из них является Macrobenchmark, который даёт весьма полезные данные о том, как работает приложение. Ещё можно использовать Perfetto для визуализации результатов и встроить бенчмарк в процесс CI.
Ну и для мотивации — две статьи с опытом применения целого ряда инструментов, чтобы улучшить время запуска.
Тут ребята из Dodo описывают процесс повышения скорости запуска одного из своих приложений на 20%, а тут похожий опыт компании Mercado Libre (довольно крупный стартап Латинской Америки).
🔥12😁3❤1