ResConfigs для языков
#android #optimization
Расскажу вам лишний раз о бесплатном способе, чтобы уменьшить размер вашего apk-файла. Многие о нём знают, но я часто встречал проекты, где этой настройки не было.
Дело в том, что некоторые библиотеки содержат в себе переводы на большое количество языков: то есть одна строка может быть в 50-60 интерпретациях, каждая из которых добавляет вес вашему приложению.
Чтобы посмотреть, а как у вас дела, откройте
Чтобы убрать все эти языки — используйте свойство
Вариант со звёздочкой: можете сделать подобную настройку только для релизных билдов при помощи:
Только не забудьте при добавлении языка прописать их и тут😅
#android #optimization
Расскажу вам лишний раз о бесплатном способе, чтобы уменьшить размер вашего apk-файла. Многие о нём знают, но я часто встречал проекты, где этой настройки не было.
Дело в том, что некоторые библиотеки содержат в себе переводы на большое количество языков: то есть одна строка может быть в 50-60 интерпретациях, каждая из которых добавляет вес вашему приложению.
Чтобы посмотреть, а как у вас дела, откройте
Build -> Analyze APK, откройте release сборку приложения и выберите resources.arsc. В самом низу списка будет файл strings, где наглядно в виде таблички прописаны все строковые ресурсы для каждого языка. Чтобы убрать все эти языки — используйте свойство
resConfigs в defaultConfig, где через запятую перечислите коды языков, используемые вашим приложением. Соберите релизную сборку и вы удивитесь, как много места может сжирать набор строк. Вариант со звёздочкой: можете сделать подобную настройку только для релизных билдов при помощи:
applicationVariants.all { variant -> if (variant.buildType.name == "release") {variant.mergedFlavor.resourceConfigurations.addAll( "en", "de", "es" ) }Только не забудьте при добавлении языка прописать их и тут
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥6
SDK Upgrade Assistant
#android
Оказывается, пару месяцев назад появилась утилита, которая помогает быстро обновить targetSdkVersion в проекте.
Правда, нет свежего 34 SDK (но вручную уже можно обновиться), уверен, что со временем и он там появится.
Для использования надо выбрать Tools > Android SDK Upgrade Assistant, и Google советует обновлять по 1 уровню за раз.
Больше деталей можно почитать тут.
#android
Оказывается, пару месяцев назад появилась утилита, которая помогает быстро обновить targetSdkVersion в проекте.
Правда, нет свежего 34 SDK (но вручную уже можно обновиться), уверен, что со временем и он там появится.
Для использования надо выбрать Tools > Android SDK Upgrade Assistant, и Google советует обновлять по 1 уровню за раз.
Больше деталей можно почитать тут.
🔥5👌2👍1
Memory leaks в проде
#android #debug
С утечками памяти при разработке нам помогают бороться некоторые из известных инструментов, таких как Android Studio Memory Profiler, LeakCanary, Perfetto.
Но довольно сложно поймать эти проблемы, когда приложение уже в проде. Но варианты есть, и тут инженер из Lyft делится, как они раскатывают новые фичи и оценивают их с точки зрения памяти.
Не факт, что ваша команда такая же большая, как в Lyft, однако вы сможете узнать, как вообще можно определить утечки памяти, на какие показатели при этом опираются, да и в целом, пару полезных штук точно можно взять на заметку.
#android #debug
С утечками памяти при разработке нам помогают бороться некоторые из известных инструментов, таких как Android Studio Memory Profiler, LeakCanary, Perfetto.
Но довольно сложно поймать эти проблемы, когда приложение уже в проде. Но варианты есть, и тут инженер из Lyft делится, как они раскатывают новые фичи и оценивают их с точки зрения памяти.
Не факт, что ваша команда такая же большая, как в Lyft, однако вы сможете узнать, как вообще можно определить утечки памяти, на какие показатели при этом опираются, да и в целом, пару полезных штук точно можно взять на заметку.
👍4❤1😈1😎1
WorkManger StopReason
#android
В одном из последних обновлений WorkManager была добавлена фича под названием StopReason.
Штука крайне полезная, если есть необходимость в дебаге фоновых задач, да и вообще анализе того, что происходит, если задача завершилась с ошибкой.
В чуть более поздней версии добавилась целая куча «причин»: тут и учёт Doze Mode, и App Buckets, и отмена пользователем… В общем, детальнее можно о каждой из причин почитать тут.
Есть один нюанс: фича работает на Android с SDK 31+😇 . Но это уже довольно большой набор устройств, так что продуктивного вам дебага WorkerManager.
#android
В одном из последних обновлений WorkManager была добавлена фича под названием StopReason.
Штука крайне полезная, если есть необходимость в дебаге фоновых задач, да и вообще анализе того, что происходит, если задача завершилась с ошибкой.
В чуть более поздней версии добавилась целая куча «причин»: тут и учёт Doze Mode, и App Buckets, и отмена пользователем… В общем, детальнее можно о каждой из причин почитать тут.
Есть один нюанс: фича работает на Android с SDK 31+
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤝4
Бродкасты в Runtime и Android 14
#android
Если вы вдруг решили поставить targetSDK до Android 14 (sdk 34), то обязательно перечитайте список изменений, на которые нужно обратить внимание.
Одним из неявных, но при этом вызывающих краш, изменений являются runtime-registered бродкасты.
Если раньше вы регистрировали их при помощи:
то теперь необходимо регистрировать их так:
Можно передать
Рекомендую поискать в своём проекте строку😇 .
#android
Если вы вдруг решили поставить targetSDK до Android 14 (sdk 34), то обязательно перечитайте список изменений, на которые нужно обратить внимание.
Одним из неявных, но при этом вызывающих краш, изменений являются runtime-registered бродкасты.
Если раньше вы регистрировали их при помощи:
registerReceiver(receiver, IntentFilter())то теперь необходимо регистрировать их так:
ContextCompat.registerReceiver(context, receiver, IntentFilter(), ContextCompat.RECEIVER_NOT_EXPORTED)Можно передать
RECEIVER_EXPORTED при необходимости.Рекомендую поискать в своём проекте строку
registerReceiver, потому что проект корректно собирается, никаких ошибок не появляется, но на свежем Android получите краш Please open Telegram to view this post
VIEW IN TELEGRAM
❤13😨9🤝6👍3🔥1
Android 14 🎉
#android
Итак, новая версия Android уже в production и скоро появится на Pixel, а чуть позже в этом году и на других производителях смартфонов. Жду на своём Galaxy.🤞
Анонс и список изменений можете почитать тут, а ещё если у вас Android Studio Hedgehog и выше, то можете использовать SDK update assistance, который должен сделать всю рутину за вас.
#android
Итак, новая версия Android уже в production и скоро появится на Pixel, а чуть позже в этом году и на других производителях смартфонов. Жду на своём Galaxy.
Анонс и список изменений можете почитать тут, а ещё если у вас Android Studio Hedgehog и выше, то можете использовать SDK update assistance, который должен сделать всю рутину за вас.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰10🔥4🎉3
Измеряя Sequences
#android #kotlin
Я тут немного выпал из написания блога, но на то у меня была уважительная причинанативная интеграция 😄 , но вот я постепенно возвращаюсь и сразу с отличной инженерной статьёй про использование
На практике — далеко не все разработчики понимают, когда стоит использовать
Автор статьи решил провести подробное исследование, где провёл ряд экспериментов про то, когда какой тип коллекции подходит больше, как вообще
Краткая выжимка: гарантированный проигрыш при использовании
Ссылка на статью и аналогичный доклад.
#android #kotlin
Я тут немного выпал из написания блога, но на то у меня была уважительная причина
Sequence.На практике — далеко не все разработчики понимают, когда стоит использовать
List, а когда Sequence. Многие придерживаются правила, что Sequence стоит использовать, если есть 3+ преобразования этой самой коллекции, но не стоит слепо верить этому правилу.Автор статьи решил провести подробное исследование, где провёл ряд экспериментов про то, когда какой тип коллекции подходит больше, как вообще
Sequence работают под капотом, а ещё как работает целый ряд всем нам известных методов.Краткая выжимка: гарантированный проигрыш при использовании
Sequence вы получите, если будете использовать их с sort, flatten, plus, а небольшой проигрыш — с distinct и chunked. Ссылка на статью и аналогичный доклад.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍6🔥3
Dynamic App Icon
#android
Новый год уже на носу, и настанет пора новогодних иконок в приложениях😄 .
Вот вам краткая статья, которая расскажет, как поменять иконку в приложении на любую нужную вам и обратно без релиза. Можете ещё парочку добавить в приложение и будет новая фичаконечно же по подписке .
Вся фича завязана на
Дока по алиасам тут, а вот и сама статья про добавление дополнительных иконок.
#android
Новый год уже на носу, и настанет пора новогодних иконок в приложениях
Вот вам краткая статья, которая расскажет, как поменять иконку в приложении на любую нужную вам и обратно без релиза. Можете ещё парочку добавить в приложение и будет новая фича
Вся фича завязана на
activity-alias, которые вы настраиваете в AndroidManifest и включаете и отключаете нужный вам. Дока по алиасам тут, а вот и сама статья про добавление дополнительных иконок.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🎄5❤2
Хак через десериализацию
#android
Давно я не появлялся на канале: со мной всё хорошо, но дела под конец года забрали всё свободное время, а серая погода — забрала всё желание писать. Но… надо не забывать вас, поэтому возвращаюсь!
На днях попалось любопытное видео, где описывается уязвимость приложения, связанная с использованием Serializable в крупном приложении AliExpress. В видео по шагам рассказывается о том, как провернуть подобный хак, как найти подобные в своих приложениях, ну и конечно же демонстрируется сама уязвимость.
#android
Давно я не появлялся на канале: со мной всё хорошо, но дела под конец года забрали всё свободное время, а серая погода — забрала всё желание писать. Но… надо не забывать вас, поэтому возвращаюсь!
На днях попалось любопытное видео, где описывается уязвимость приложения, связанная с использованием Serializable в крупном приложении AliExpress. В видео по шагам рассказывается о том, как провернуть подобный хак, как найти подобные в своих приложениях, ну и конечно же демонстрируется сама уязвимость.
👍13🔥7🥰4
RTL адаптация в Android
#android
Хорошая статья, где описывается опыт поддержки RTL-языков в Android, в том числе и на Compose.
Для тех, кто не в теме. RTL (right-to-left) — это чтение справа-налево, которое встречается в языках ближнего востока, например, арабский. LTR (left-to-right) — привычное нам чтение слева-направо.
В Android довольно неплохо поддерживаются RTL-языки, начиная с API 17, но тем не менее — есть масса кейсов, на которые стоит посмотреть при тестировании.
Был опыт адаптации приложения под RTL-языки? Вдруг вы настолько круты, что адаптировали свой pet-проект, кто знает, расскажите в комментариях.🇦🇪
#android
Хорошая статья, где описывается опыт поддержки RTL-языков в Android, в том числе и на Compose.
Для тех, кто не в теме. RTL (right-to-left) — это чтение справа-налево, которое встречается в языках ближнего востока, например, арабский. LTR (left-to-right) — привычное нам чтение слева-направо.
В Android довольно неплохо поддерживаются RTL-языки, начиная с API 17, но тем не менее — есть масса кейсов, на которые стоит посмотреть при тестировании.
Был опыт адаптации приложения под RTL-языки? Вдруг вы настолько круты, что адаптировали свой pet-проект, кто знает, расскажите в комментариях.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍6🔥2
Дизайн система Android через Figma API
#design #android #ci
С ростом проекта количество ресурсов, которое появляется в приложении очень сильно растёт, и управлять ими становится всё сложнее. Со временем многие команды приходят к тому, чтобы настроить и использовать свою дизайн-систему.
В проектах, где я работал — мы всегда приходили к какой-то дизайн системе. Иногда не совсем удачно, но чаще это очень сильно экономило время и ресурсы всех команд.
Правда, никогда не получалось сделать обновление ресурсов через CI.
Если вы хотите добавить ещё больше автоматизации в ваш проект — можно взять за основу эту статью, где ребята рассказывают свой путь, чтобы подружить Figma и обновление некоторых элементов дизайн-системы.
Тут и небольшой обзор текущих решений, и то, как всё это дело работает в xml и Compose.🥸
#design #android #ci
С ростом проекта количество ресурсов, которое появляется в приложении очень сильно растёт, и управлять ими становится всё сложнее. Со временем многие команды приходят к тому, чтобы настроить и использовать свою дизайн-систему.
В проектах, где я работал — мы всегда приходили к какой-то дизайн системе. Иногда не совсем удачно, но чаще это очень сильно экономило время и ресурсы всех команд.
Правда, никогда не получалось сделать обновление ресурсов через CI.
Если вы хотите добавить ещё больше автоматизации в ваш проект — можно взять за основу эту статью, где ребята рассказывают свой путь, чтобы подружить Figma и обновление некоторых элементов дизайн-системы.
Тут и небольшой обзор текущих решений, и то, как всё это дело работает в xml и Compose.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍5🥴2
State in your Kotlin apps
#kotlin #android
Архитектуры с Unidirectional Data Flow сейчас очень популярны в большинстве современных приложений: это отличный подход, который позволяет избежать ошибок при обновлении экрана, да и разрабатывать с этим подходом удобнее, особенно большие приложения.
К сожалению, подход не избавляет от багов на 100%, да и многие разработчики используют его не совсем корректно.
Чтобы избежать некоторых из багов, вот отличная статья, где указываются на некоторые проблемы и способы их решения. Одинаково будет полезно как новичкам, так и опытным разработчикам, ведь от ошибок не застрахованы даже профи.
Кстати, автор статьи подписан на канал, так что свои вопросы по статье можете задать в комментариях.🤓
#kotlin #android
Архитектуры с Unidirectional Data Flow сейчас очень популярны в большинстве современных приложений: это отличный подход, который позволяет избежать ошибок при обновлении экрана, да и разрабатывать с этим подходом удобнее, особенно большие приложения.
К сожалению, подход не избавляет от багов на 100%, да и многие разработчики используют его не совсем корректно.
Чтобы избежать некоторых из багов, вот отличная статья, где указываются на некоторые проблемы и способы их решения. Одинаково будет полезно как новичкам, так и опытным разработчикам, ведь от ошибок не застрахованы даже профи.
Кстати, автор статьи подписан на канал, так что свои вопросы по статье можете задать в комментариях.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍7💩7🥴2❤1
Practical Optimizations
#android #optimization
Для всех, кто любит низкоуровневые оптимизации и прочий хардкод — прекрасный доклад от Romain Guy, где он описывает целый набор оптимизаций, которые они сделали в Compose.
В целом, будет полезно всем разработчикам: можно научиться чуть лучше читать bytecode как минимум. А как максимум — сделаете крутую оптимизацию в своём проекте.
А вот тут почти то же самое, но в цикле статей, если вам так удобнее.
#android #optimization
Для всех, кто любит низкоуровневые оптимизации и прочий хардкод — прекрасный доклад от Romain Guy, где он описывает целый набор оптимизаций, которые они сделали в Compose.
В целом, будет полезно всем разработчикам: можно научиться чуть лучше читать bytecode как минимум. А как максимум — сделаете крутую оптимизацию в своём проекте.
А вот тут почти то же самое, но в цикле статей, если вам так удобнее.
👍13❤🔥5
Screenshots detecting
#android
Раньше для детектирования скриншотов в Android приходилось использовать довольно сложные решения, требующие разрешений на чтение файлов или изображений.
Но оказывается, есть гораздо более простой путь, который появился совсем недавно. Для этого достаточно добавить в
и сделать вызов методов:
Главный недостаток этого метода в том, что работает он только с Android 14. Ну что ж, подождём, пока все обновятся.🫡
Эта функция может быть полезна, если в вашем приложении есть более удобный способ поделиться содержимым экрана, чем просто делать скриншот.
#android
Раньше для детектирования скриншотов в Android приходилось использовать довольно сложные решения, требующие разрешений на чтение файлов или изображений.
Но оказывается, есть гораздо более простой путь, который появился совсем недавно. Для этого достаточно добавить в
AndroidManifest.xml:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
и сделать вызов методов:
val screenCaptureCallback = Activity.ScreenCaptureCallback {
// Add logic to take action in your app.
}
registerScreenCaptureCallback(mainExecutor, screenCaptureCallback)
////
unregisterScreenCaptureCallback(screenCaptureCallback)
Главный недостаток этого метода в том, что работает он только с Android 14. Ну что ж, подождём, пока все обновятся.
Эта функция может быть полезна, если в вашем приложении есть более удобный способ поделиться содержимым экрана, чем просто делать скриншот.
Please open Telegram to view this post
VIEW IN TELEGRAM
Android Developers
Detect when users take device screenshots | Android Developers
👍15❤3🔥3😁1👌1
Что нового в Android 16?
#android #google
Что же, в этом году нас ждёт свежий Android, и к его нововведениям стоит подготовиться. Давайте разберём основные изменения, опираясь на официальную документацию Google.
🔴 Progress-centric Notifications — фактически аналог Live Activities на iOS, где теперь у нас добавляется Notification.ProgressStyle для отображения прогресса текущего процесса. Полезно для приложений с загрузками, доставками и навигацией. Выглядит здорово, одобряем.
🔴 Predictive back updates — новые API для предсказуемого поведения жестов "назад". Теперь onBackInvokedCallback позволяет точнее обрабатывать нажатия. Пока неясно, насколько это улучшит UX — навигация жестами и так работает достаточно стабильно.
🔴 Richer Haptics — более классная обработка haptic-эффектов. В VibrationEffect.Compositions, добавили более точную настройку вибрационных эффектов. Одобряю, очень мало приложений хорошо используют haptic-эффект.
🔴 System-triggered profiling — обновлённый ProfilingManager, появившийся в Android 15, теперь собирает ещё больше данных о производительности приложений. Не тестировал, если пробовали — расскажите, как вам?
🔴 Better job introspection — полезное обновление, призванное улучшить дебаг запущенных Job. Теперь можно просматривать их историю и анализировать причины задержек или неудачного выполнения. Круто.
🔴 Photo picker improvements — Google активно продвигает использование Photo Picker, а в новой версии API добавляет Embedded Photo Picker который делает выбор изображений ещё более естественным и встроенным в приложение. Отличное обновление.
🔴 Vertical text — небольшая, но любопытная доработка: теперь Paint поддерживает вертикальный текст. Не знаю, можно ли было раньше сделать это без библиотек, но Google решил это подстветить как фичу. Подсвечу и я.
Тут только некоторые из фичей, хотя и основные, а все можно увидеть тут.
#android #google
Что же, в этом году нас ждёт свежий Android, и к его нововведениям стоит подготовиться. Давайте разберём основные изменения, опираясь на официальную документацию Google.
Тут только некоторые из фичей, хотя и основные, а все можно увидеть тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
Android Developers
Features and APIs | Android Developers
Learn about the new features and APIs for developers in Android 16.
❤13🔥9🥰5
SQLite Parallelism
#android
Отличная статья с неочевидными советами по работе с SQLite в Android, особенно в контексте параллельных запросов (а это встречается довольно часто).
Основная идея в том, что использование Dispatchers.IO по умолчанию для работы с базой может привести к переполнению пула потоков. В результате другие задачи, запущенные на нём, могут быть приостановлены.
Это может стать неприятным сюрпризом, если параллельных запросов слишком много.
Автор объясняет, как добиться корректного поведения, ограничивая число потоков, которые SQLite может использовать. Кстати, все эти рекомендации подходят и для Room.
Ещё узнал про Bundled SQLite — его можно использовать без переживаний о том, как база работает на старых версиях Android, при этом поддерживая последние возможности либы.
Признавайтесь кто-нибудь из вас использует Bundled SQLite? Есть ли от него реальный профит?
#android
Отличная статья с неочевидными советами по работе с SQLite в Android, особенно в контексте параллельных запросов (а это встречается довольно часто).
Основная идея в том, что использование Dispatchers.IO по умолчанию для работы с базой может привести к переполнению пула потоков. В результате другие задачи, запущенные на нём, могут быть приостановлены.
Это может стать неприятным сюрпризом, если параллельных запросов слишком много.
Автор объясняет, как добиться корректного поведения, ограничивая число потоков, которые SQLite может использовать. Кстати, все эти рекомендации подходят и для Room.
Ещё узнал про Bundled SQLite — его можно использовать без переживаний о том, как база работает на старых версиях Android, при этом поддерживая последние возможности либы.
Признавайтесь кто-нибудь из вас использует Bundled SQLite? Есть ли от него реальный профит?
👍7❤3🫡1
Android Activity Lifecycle от 8ksec
#android
Про жизненный цикл Activity не знает только ленивый, но мне попалась небольшая статья, где ребята из 8ksec рассматривают его с точки зрения уязвимостей и безопасности.
Если что, у 8ksec вообще много толковых статей и обучающих материалов по безопасности Android-приложений. И радует, что на привычные вещи можно взглянуть по-новому — с позиции безопасности и анализа уязвимостей.
#android
Про жизненный цикл Activity не знает только ленивый, но мне попалась небольшая статья, где ребята из 8ksec рассматривают его с точки зрения уязвимостей и безопасности.
Если что, у 8ksec вообще много толковых статей и обучающих материалов по безопасности Android-приложений. И радует, что на привычные вещи можно взглянуть по-новому — с позиции безопасности и анализа уязвимостей.
8kSec - 8kSec is a cybersecurity research & training company. We provide high-quality training & consulting services.
A Blueprint of Android Activity Lifecycle - 8kSec
Introduction The Android Activity lifecycle is a sequence of state changes and callbacks that every Android Activity goes through from creation to destruction.Understanding the Android Activity lifecycle is important not only for developers aiming to build…
👍10❤5🔥3
Обфускация — кастомные словари
#android
Про обфускацию кода знает каждый Android-разработчик, ведь без неё не обходится ни одна релизная версия продукта. Помимо уменьшения размера кода, у неё есть ещё и важный аспект безопасности.
Однако стандартная конфигурация, хоть и неплохая, не обеспечивает абсолютной защиты от реверс-инжиниринга, как, впрочем, и любая другая защита. Но её можно улучшить настроив кастомные словари, которые значительно улучшат текущие настройки R8.
Существует несколько подходов к их настройке: это могут быть Java Reserved Words, кастомные рандомные символы, или просто один и тот же символ, но с разной длиной слов.
Пару статей, чтобы лучше изучить этот вопрос.📚
#android
Про обфускацию кода знает каждый Android-разработчик, ведь без неё не обходится ни одна релизная версия продукта. Помимо уменьшения размера кода, у неё есть ещё и важный аспект безопасности.
Однако стандартная конфигурация, хоть и неплохая, не обеспечивает абсолютной защиты от реверс-инжиниринга, как, впрочем, и любая другая защита. Но её можно улучшить настроив кастомные словари, которые значительно улучшат текущие настройки R8.
Существует несколько подходов к их настройке: это могут быть Java Reserved Words, кастомные рандомные символы, или просто один и тот же символ, но с разной длиной слов.
Пару статей, чтобы лучше изучить этот вопрос.
Please open Telegram to view this post
VIEW IN TELEGRAM
Medium
Improving ProGuard Name Obfuscation
In this article I will show you how to strengthen ProGuard’s name obfuscation, making it harder for an attacker the reverse engineer your…
👍10🔥4❤2
Permissions
#android
Вероятно, кому-то может показаться очевидным этот совет, но тем не менее, я встречаю много приложений с этим ужасным UX-паттерном.
Одно из самых глупых решений в UX, которое можно принять — это запрашивать разрешения (permissions) слишком рано, причём сразу целым блоком и без объяснения, зачем они нужны.
Большинство пользователей, безусловно, не читают, что именно они разрешают. Я же отношу себя к тем, кто смотрит на каждое разрешение и недоумевает: зачем приложению мобильного оператора доступ к фото и видео? А ещё больше удивляюсь, когда после его отклонения приложение работает корректно.
Разрешения нужно запрашивать именно в тот момент, когда они действительно необходимы. Доступ к микрофону? Отлично, расскажите, зачем он нужен и что произойдёт, если его не дать. Вдруг микрофон — суперважная фича, чтобы отправить сообщение в мессенджере?
Разница между ранним запросом и запросом в нужное время огромна, помните об этом и делайте запросы на разрешение в подходящих моментах.
#android
Вероятно, кому-то может показаться очевидным этот совет, но тем не менее, я встречаю много приложений с этим ужасным UX-паттерном.
Одно из самых глупых решений в UX, которое можно принять — это запрашивать разрешения (permissions) слишком рано, причём сразу целым блоком и без объяснения, зачем они нужны.
Большинство пользователей, безусловно, не читают, что именно они разрешают. Я же отношу себя к тем, кто смотрит на каждое разрешение и недоумевает: зачем приложению мобильного оператора доступ к фото и видео? А ещё больше удивляюсь, когда после его отклонения приложение работает корректно.
Разрешения нужно запрашивать именно в тот момент, когда они действительно необходимы. Доступ к микрофону? Отлично, расскажите, зачем он нужен и что произойдёт, если его не дать. Вдруг микрофон — суперважная фича, чтобы отправить сообщение в мессенджере?
Разница между ранним запросом и запросом в нужное время огромна, помните об этом и делайте запросы на разрешение в подходящих моментах.
👍33❤5🔥5
Lineage OS
#android
На днях обновили версию Android на моём рабочем проекте, и мой старенький Samsung S8+ стал неактуален для тестирования.
Решил посмотреть, что можно с ним сделать и нашёл решение — установить Lineage OS. Оказалось, что это сделать довольно просто, и есть масса сторонних решений на 4PDA. И не только LineageOS.
Выбрал не самую последнюю, но стабильную на базе Android 13.
Работает всё шикарно: быстрее, плавнее и дружелюбнее для батареи, чем стандартная оболочка. Очень доволен.🫶
К слову, это ещё и неплохой способ попробовать альтернативную прошивку и получить рут-права для тестирования.
Устанавливается всё очень легко, но, похоже, мне повезло. Так гладко установить стороннюю прошивку удаётся не на любой смартфон (судя по отзывам, ведь я в этом деле совсем новичок).
Так что вот вам на заметку кейс, что можно сделать с уже «отжившими» смартфонами.👆
#android
На днях обновили версию Android на моём рабочем проекте, и мой старенький Samsung S8+ стал неактуален для тестирования.
Решил посмотреть, что можно с ним сделать и нашёл решение — установить Lineage OS. Оказалось, что это сделать довольно просто, и есть масса сторонних решений на 4PDA. И не только LineageOS.
Выбрал не самую последнюю, но стабильную на базе Android 13.
Работает всё шикарно: быстрее, плавнее и дружелюбнее для батареи, чем стандартная оболочка. Очень доволен.
К слову, это ещё и неплохой способ попробовать альтернативную прошивку и получить рут-права для тестирования.
Устанавливается всё очень легко, но, похоже, мне повезло. Так гладко установить стороннюю прошивку удаётся не на любой смартфон (судя по отзывам, ведь я в этом деле совсем новичок).
Так что вот вам на заметку кейс, что можно сделать с уже «отжившими» смартфонами.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11💯4🔥3👍2🤓1