Очищаем build.gradle
#gradle
Отличная статья, которая расскажет об очистке конфигурации
В итоге всё сводится к удалению уже не нужной информации, которая просто так захламляет этот файл. У меня, кстати, обнаружились почти все пункты. 🤫
Ссылка на статью тут.
#gradle
Отличная статья, которая расскажет об очистке конфигурации
build.gradle, делая её максимально простой. В итоге всё сводится к удалению уже не нужной информации, которая просто так захламляет этот файл. У меня, кстати, обнаружились почти все пункты. 🤫
Ссылка на статью тут.
👍1
Как измерить время старта приложения?
#library #performance
Для большинства приложений время старта — очень важная характеристика, которая влияет на удовлетворённость пользователя этим приложением.
Конечно, это не будет решающей метрикой, благодаря которой пользователь выставит вам негативную оценку в Google Play, но всё же важно, чтобы приложение запускалось как можно быстрее. А измерение этой метрики — довольно нетривиальная задача, и важно сделать это правильно.
Вот вам отличная статья, которая рассматривает различные способы для измерения времени запуска приложения. Это и анализ на собственном устройстве, и аналитика, которая собирается при помощи Google Play и Firebase, и кастомные решения.
#library #performance
Для большинства приложений время старта — очень важная характеристика, которая влияет на удовлетворённость пользователя этим приложением.
Конечно, это не будет решающей метрикой, благодаря которой пользователь выставит вам негативную оценку в Google Play, но всё же важно, чтобы приложение запускалось как можно быстрее. А измерение этой метрики — довольно нетривиальная задача, и важно сделать это правильно.
Вот вам отличная статья, которая рассматривает различные способы для измерения времени запуска приложения. Это и анализ на собственном устройстве, и аналитика, которая собирается при помощи Google Play и Firebase, и кастомные решения.
System Design Interview
#interview
Отличная статья, которая будет интересна тем, кто подготавливается к собеседованиям в компании, где одним из шагов является — System Design Interview. По сути, вас просят описать, как разработать какой-то сервис (например приложение Twitter).
Решение не должно быть идеальным: никто не ожидает, что вы сможете сделать совершенную систему за полчаса. Важна коммуникация с интервьюером и те мысли, уточняющие вопросы, которые вы задаёте.
В статье отлично показан сам процесс собеседования как раз на примере приложения Twitter.
#interview
Отличная статья, которая будет интересна тем, кто подготавливается к собеседованиям в компании, где одним из шагов является — System Design Interview. По сути, вас просят описать, как разработать какой-то сервис (например приложение Twitter).
Решение не должно быть идеальным: никто не ожидает, что вы сможете сделать совершенную систему за полчаса. Важна коммуникация с интервьюером и те мысли, уточняющие вопросы, которые вы задаёте.
В статье отлично показан сам процесс собеседования как раз на примере приложения Twitter.
Создание доступного приложения
#tools #view
Отличная статья, которая рассказывает о том, как сделать ваше приложение комфортным для использования людьми с разными видами инвалидности.
На самом деле, меня радует, что в последнее время появляется много материалов, которые связаны с адаптацией приложений: ведь таких людей очень много, и не адаптируя своё приложение вы заранее вычёркиваете многих пользователей из своего списка.
В статье есть примеры кода, связанного с адаптацией View, шрифтов, описания компонентов и т.д.
А вот ещё хорошая книга, хотя и из мира iOS, но полезная всем, кто занимается адаптацией интерфейсов, где дано множество полезных и практических советов.
#tools #view
Отличная статья, которая рассказывает о том, как сделать ваше приложение комфортным для использования людьми с разными видами инвалидности.
На самом деле, меня радует, что в последнее время появляется много материалов, которые связаны с адаптацией приложений: ведь таких людей очень много, и не адаптируя своё приложение вы заранее вычёркиваете многих пользователей из своего списка.
В статье есть примеры кода, связанного с адаптацией View, шрифтов, описания компонентов и т.д.
А вот ещё хорошая книга, хотя и из мира iOS, но полезная всем, кто занимается адаптацией интерфейсов, где дано множество полезных и практических советов.
Android Dev Summit
#conference
Тут Google анонсировали возвращение конференции Android Dev Summit, которая пройдёт 27 и 28 октября.
Пока известно не так много: тема конференции — Excellent apps, across devices, где нам расскажут, как писать и адаптировать приложения под любые типы устройств, будь то планшеты или часы.
Мероприятие делится на 50-минутную презентацию и целых 30 технических видео от команды Android, связанных с разными кейсами для разработки.
Будем ждать, а на канале вы увидите выборку самых интересных и полезных докладов. 😎
#conference
Тут Google анонсировали возвращение конференции Android Dev Summit, которая пройдёт 27 и 28 октября.
Пока известно не так много: тема конференции — Excellent apps, across devices, где нам расскажут, как писать и адаптировать приложения под любые типы устройств, будь то планшеты или часы.
Мероприятие делится на 50-минутную презентацию и целых 30 технических видео от команды Android, связанных с разными кейсами для разработки.
Будем ждать, а на канале вы увидите выборку самых интересных и полезных докладов. 😎
Android Academy Global Advanced
#beginners #courses
Тут ребята из Android Academy запускают новый, продвинутый курс для тех, кто уже что-то понимает в Android-разработке, но хочет выйти на новый уровень. 🤟
Курс будет состоять из нескольких этапов:
• архитектура — её выбор, подходы и библиотеки;
• тесты — когда и для чего писать, какие виды есть и чем пользоваться для написания;
• автоматизация ручной работы — CI, и что он нам даёт;
• анализ падений — как ловить, анализировать и отлаживать.
Курс бесплатный и начнётся 4 октября, для регистрации напишите сюда с командой academy. А подробнее почитать о программе можно тут.
#beginners #courses
Тут ребята из Android Academy запускают новый, продвинутый курс для тех, кто уже что-то понимает в Android-разработке, но хочет выйти на новый уровень. 🤟
Курс будет состоять из нескольких этапов:
• архитектура — её выбор, подходы и библиотеки;
• тесты — когда и для чего писать, какие виды есть и чем пользоваться для написания;
• автоматизация ручной работы — CI, и что он нам даёт;
• анализ падений — как ловить, анализировать и отлаживать.
Курс бесплатный и начнётся 4 октября, для регистрации напишите сюда с командой academy. А подробнее почитать о программе можно тут.
Автоматический сброс разрешений
#library
Начиная с Android 11, был введён автоматический сброс разрешений у приложения, если пользователь не запускал его в течении нескольких месяцев.
По сути, это аналог того, если бы пользователь нажал Deny при показе сообщения о запросе разрешений.
У Google есть хороший раздел с практиками для показа диалога с разрешениями, и если ваше приложение ему следует, то ничего переделывать не нужно. Однако, есть ряд ограничений.
1️⃣ Во-первых, от подобного сброса освобождаются приложения, установленные производителем смартфонов. Этот пункт нас особо не касается, поэтому переходим ко второму.
2️⃣ А во-вторых — разработчики могут попросить пользователя запретить системе сбрасывать разрешения их приложений. Это важно для приложений, которые в большинстве случаев используются в фоне. Список примеров от Google тут. Например, это приложения для синхронизации данных в фоне или приложения для синхронизации с другими устройствами.
Кроме этого, есть методы для того, чтобы понять, было ли отозвано разрешение у вашего приложения. Подробнее можно почитать тут.
Обязательно проверьте ваше приложение, так как эта фича будет введена для устройств от Android 6, начиная с 2022 года. 🤓
#library
Начиная с Android 11, был введён автоматический сброс разрешений у приложения, если пользователь не запускал его в течении нескольких месяцев.
По сути, это аналог того, если бы пользователь нажал Deny при показе сообщения о запросе разрешений.
У Google есть хороший раздел с практиками для показа диалога с разрешениями, и если ваше приложение ему следует, то ничего переделывать не нужно. Однако, есть ряд ограничений.
1️⃣ Во-первых, от подобного сброса освобождаются приложения, установленные производителем смартфонов. Этот пункт нас особо не касается, поэтому переходим ко второму.
2️⃣ А во-вторых — разработчики могут попросить пользователя запретить системе сбрасывать разрешения их приложений. Это важно для приложений, которые в большинстве случаев используются в фоне. Список примеров от Google тут. Например, это приложения для синхронизации данных в фоне или приложения для синхронизации с другими устройствами.
Кроме этого, есть методы для того, чтобы понять, было ли отозвано разрешение у вашего приложения. Подробнее можно почитать тут.
Обязательно проверьте ваше приложение, так как эта фича будет введена для устройств от Android 6, начиная с 2022 года. 🤓
Про scope-функции
#kotlin
В стандартную библиотеку Kotlin включён ряд scope-функций, которые упрощают работу с объектами, особенно с nullable. Но многие из них похожи по функциональности, и разработчики часто используют их не совсем корректно.
В документации даётся довольно подробное объяснение, когда какую функцию стоит использовать, а ещё есть неплохая статья, где описывается чуть больше примеров таких функций.
#kotlin
В стандартную библиотеку Kotlin включён ряд scope-функций, которые упрощают работу с объектами, особенно с nullable. Но многие из них похожи по функциональности, и разработчики часто используют их не совсем корректно.
В документации даётся довольно подробное объяснение, когда какую функцию стоит использовать, а ещё есть неплохая статья, где описывается чуть больше примеров таких функций.
👍1
Кастомные темы в Jetpack Compose
#jetpack #compose
В Jetpack Compose, мы используем по умолчанию
Но если мы говорим про расширение темы, то
В статье автор рассказывает о том, как он улучшил текущую реализацию темы, добавив туда нужные атрибуты для более полной кастомизации.
Получилось достаточно лаконично, поэтому если у вас много кастомных штук в приложении подобное решение вполне может вам помочь. ✊🏻
#jetpack #compose
В Jetpack Compose, мы используем по умолчанию
MaterialTheme. Кроме того, у нас есть неплохо гайд о кастомизации её под свои нужды, а также bast practices по настройке цветов. Но если мы говорим про расширение темы, то
MaterialTheme может быть не самым удачным решением. В статье автор рассказывает о том, как он улучшил текущую реализацию темы, добавив туда нужные атрибуты для более полной кастомизации.
Получилось достаточно лаконично, поэтому если у вас много кастомных штук в приложении подобное решение вполне может вам помочь. ✊🏻
Жизнь в ОАЭ, Дубай
#экспаты #interview
Те, кто давно на канале, знают, что у нас есть рубрика, где гости, связанные с разработкой, рассказывают о своём опыте переезда и жизни в других странах. И хотя эта рубрика не самая популярная, но лично мне она очень нравится.🤓
Наш следующий гость — Антон Дудаков, который сейчас живёт в ОАЭ, Дубай, а работает в стартапе Ziina Android-разработчиком.
Как всегда, свои вопросы вы можете задать в форме, а дальше начнётся формирование уже готового интервью.
Кстати, пока ожидаете это интервью, вы можете почитать истории ребят из Израиля и Германии. 😎
#экспаты #interview
Те, кто давно на канале, знают, что у нас есть рубрика, где гости, связанные с разработкой, рассказывают о своём опыте переезда и жизни в других странах. И хотя эта рубрика не самая популярная, но лично мне она очень нравится.🤓
Наш следующий гость — Антон Дудаков, который сейчас живёт в ОАЭ, Дубай, а работает в стартапе Ziina Android-разработчиком.
Как всегда, свои вопросы вы можете задать в форме, а дальше начнётся формирование уже готового интервью.
Кстати, пока ожидаете это интервью, вы можете почитать истории ребят из Израиля и Германии. 😎
10 случаев, когда можно обойтись без мыши при работе с IntelliJ IDEA
#tips
Тут мне скинули классную статью от JetBrains, где даются советы по работе с IntelliJ IDEA без мыши. Думаю, что это особенно актуально и полезно, когда работаешь с одного ноутбука.
Для меня самым крутым советом был пункт 6, где рассказывается о том, как сделать новый класс в нужном тебе пакете без использования мыши. Кажется, что получается даже быстрее, чем пытаться создать его при помощи мыши.
В общем, крайне рекомендую, вероятно вы тоже возьмете парочку советов себе в копилку.😎
#tips
Тут мне скинули классную статью от JetBrains, где даются советы по работе с IntelliJ IDEA без мыши. Думаю, что это особенно актуально и полезно, когда работаешь с одного ноутбука.
Для меня самым крутым советом был пункт 6, где рассказывается о том, как сделать новый класс в нужном тебе пакете без использования мыши. Кажется, что получается даже быстрее, чем пытаться создать его при помощи мыши.
В общем, крайне рекомендую, вероятно вы тоже возьмете парочку советов себе в копилку.😎
Заблуждения Clean Architecture
#architecture
Clean Architecture — самый распространённый набор рекомендаций к архитектуре среди Android-разработчиков.
И вроде разделение на слои выглядит простым и логичным, однако если копнуть глубже, то выясняется много интересных деталей.
Например, как лучше настроить mapping объектов между слоями, как выполнять переходы между ними, что входит в понятие Entities, сколько методов должно быть в Interactor, а вообще UseCase и Interactor — одно и то же.
Отличная статья, которая даёт ответы на большинство основных вопросов. Вероятно, после прочтения статьи у вас также возникнет переосмысление текущих подходов к архитектуре.
Хотя, как правильно заметил создатель этого подхода — Uncle Bob, «все мы пираты по натуре и правила, о которых я говорю тут, на самом деле, скорее рекомендации» 🏴☠️
#architecture
Clean Architecture — самый распространённый набор рекомендаций к архитектуре среди Android-разработчиков.
И вроде разделение на слои выглядит простым и логичным, однако если копнуть глубже, то выясняется много интересных деталей.
Например, как лучше настроить mapping объектов между слоями, как выполнять переходы между ними, что входит в понятие Entities, сколько методов должно быть в Interactor, а вообще UseCase и Interactor — одно и то же.
Отличная статья, которая даёт ответы на большинство основных вопросов. Вероятно, после прочтения статьи у вас также возникнет переосмысление текущих подходов к архитектуре.
Хотя, как правильно заметил создатель этого подхода — Uncle Bob, «все мы пираты по натуре и правила, о которых я говорю тут, на самом деле, скорее рекомендации» 🏴☠️
Awesome KMM
#kmm #kotlin
Если вы думаете о том, как бы написать своё приложение на KMM и не пока что не сильно представляете, как те или иные вещи там делаются и какие зависимости подключать, то есть классный репозиторий, который содержит огромный пласт библиотек для KMM.
Тут и плагины, которые нужны для написания приложений, и библиотеки для сети, логгирования, сохранения данных, авторизации в соц.сетях… в общем, каждый найдёт то, что ему нужно. Ну и можно предложить свою библиотеку в список, если разработчики что-то забыли добавить 😉
#kmm #kotlin
Если вы думаете о том, как бы написать своё приложение на KMM и не пока что не сильно представляете, как те или иные вещи там делаются и какие зависимости подключать, то есть классный репозиторий, который содержит огромный пласт библиотек для KMM.
Тут и плагины, которые нужны для написания приложений, и библиотеки для сети, логгирования, сохранения данных, авторизации в соц.сетях… в общем, каждый найдёт то, что ему нужно. Ну и можно предложить свою библиотеку в список, если разработчики что-то забыли добавить 😉
Как управлять конфликтами версий в Gradle?
#gradle #tips
Отличный гайд, где описывается, как разрешить проблемы при добавлении одинаковой зависимости, но с разной версией.
Подобная проблема, на самом деле, довольно распространённая, так как ваши текущие библиотеки могут обновляться не так быстро, как ваш основной модуль, что может привести к сложностям в сборке всего проекта.
#gradle #tips
Отличный гайд, где описывается, как разрешить проблемы при добавлении одинаковой зависимости, но с разной версией.
Подобная проблема, на самом деле, довольно распространённая, так как ваши текущие библиотеки могут обновляться не так быстро, как ваш основной модуль, что может привести к сложностям в сборке всего проекта.
Kotlin Multiplatform Wizard
#kmm #kotlin
Кроме отличного набора библиотек для KMM, ребята из JetBrains сделали Wizard, где можно быстро создать проект под KMM, выбрав необходимые таргеты и некоторые библиотеки.
В итоге получаем пустой проект с настройками для выбранных платформ, в котором можно быстро начать писать код. Ну или можно просто скопировать настройки build.gradle, чтобы не настраивать его самостоятельно. В общем, добавляйте в закладки, пригодится. 😎
#kmm #kotlin
Кроме отличного набора библиотек для KMM, ребята из JetBrains сделали Wizard, где можно быстро создать проект под KMM, выбрав необходимые таргеты и некоторые библиотеки.
В итоге получаем пустой проект с настройками для выбранных платформ, в котором можно быстро начать писать код. Ну или можно просто скопировать настройки build.gradle, чтобы не настраивать его самостоятельно. В общем, добавляйте в закладки, пригодится. 😎
Релиз Android-приложения каждый день
#gradle #tools
Выпуск новой версии приложения — довольно трудоёмкий процесс для большинства разработчиков. Ведь нужно проверить последние фичи, перевести новые строки, проверить, не сломались ли текущие вещи… ну и верить, что Proguard не поломал что-то, если добавили новую библиотеку. 🙃
Ребята из команды Todoist поделились секретами автоматизации процесса создания билдов в своей команде.
Что было:
⭕большие ветки в git с кодом — каждый раз, когда разработчик пытался влить в develop свою фичу, его ожидали конфликты с уже влитыми фичами и попытки всё исправить, что отнимало время.
⭕блокер в виде переводов — приложение переводится на 15 языков, что также затягивало процесс: надо было сделать какой-то файл для переводчиков и дождаться ответа от них, а когда всё завершится, влить это в готовую ветку. Ну и проверить, что переводчик не поломал формат строк.
⭕долгая сборка проекта — при сборке проекта приходилось ждать до 2 часов, что критично, если надо сделать релиз быстро.
Что добавили:
✅ feature flags — добавили возможность включения и отключения частей приложения удалённо, что позволяет не ожидать полностью завершённой фичи в главной ветке, ведь пользователь этого не увидит. При этом заметно уменьшается число конфликтов при слиянии веток.
✅автоматизация переводов — довольно круто автоматизировали процесс загрузки и получения строк от команды тестировщиков. Ещё добавили верификацию строк, чтобы ничего не поломать новой строчкой.
✅ автоматический changelog — добавляют его на основе pull request от разработчиков.
В итоге получилось заметно снизить время загрузки конкретного билда, что улучшило много показателей приложения. 👏🏻
#gradle #tools
Выпуск новой версии приложения — довольно трудоёмкий процесс для большинства разработчиков. Ведь нужно проверить последние фичи, перевести новые строки, проверить, не сломались ли текущие вещи… ну и верить, что Proguard не поломал что-то, если добавили новую библиотеку. 🙃
Ребята из команды Todoist поделились секретами автоматизации процесса создания билдов в своей команде.
Что было:
⭕большие ветки в git с кодом — каждый раз, когда разработчик пытался влить в develop свою фичу, его ожидали конфликты с уже влитыми фичами и попытки всё исправить, что отнимало время.
⭕блокер в виде переводов — приложение переводится на 15 языков, что также затягивало процесс: надо было сделать какой-то файл для переводчиков и дождаться ответа от них, а когда всё завершится, влить это в готовую ветку. Ну и проверить, что переводчик не поломал формат строк.
⭕долгая сборка проекта — при сборке проекта приходилось ждать до 2 часов, что критично, если надо сделать релиз быстро.
Что добавили:
✅ feature flags — добавили возможность включения и отключения частей приложения удалённо, что позволяет не ожидать полностью завершённой фичи в главной ветке, ведь пользователь этого не увидит. При этом заметно уменьшается число конфликтов при слиянии веток.
✅автоматизация переводов — довольно круто автоматизировали процесс загрузки и получения строк от команды тестировщиков. Ещё добавили верификацию строк, чтобы ничего не поломать новой строчкой.
✅ автоматический changelog — добавляют его на основе pull request от разработчиков.
В итоге получилось заметно снизить время загрузки конкретного билда, что улучшило много показателей приложения. 👏🏻
Определяем подмену локации и клон приложения
#tools
Интересная история от компании Swiggy, которая занимает доставкой еды.
Большинство приложений доставки состоят из приложения для пользователей и приложения для водителей. В свою очередь одна из вашнейших частей пользовательского приложения — это экран с картой, где user видит текущий статус своего заказа.
Разработчики решили подсчитать, сколько курьеров использует подмену локации или клон приложения.
Цифры оказались довольно значительными: около 8% клонирует приложение, и столько же использует подмену локации. Для масштабного приложения — это большие цифры.
Вероятно, курьеры это делают для избежания штрафов за просроченный заказ или же пробуют выбрать для себя наиболее прибыльную доставку.🤪
Вот несколько проверок, которые добавились:
- проверка на root и режим разработчика;
- простая проверка на mock локации при помощи
- список приложений, которые запрашивают разрешение на
- проверка переименования package name;
- проверка storage path, куда установлено приложение;
- проверка запуска на виртуалке и эмуляторе;
Результаты радуют, ведь удалось убрать практически все попытки подмены локации и клонирования приложения. 👍🏻
#tools
Интересная история от компании Swiggy, которая занимает доставкой еды.
Большинство приложений доставки состоят из приложения для пользователей и приложения для водителей. В свою очередь одна из вашнейших частей пользовательского приложения — это экран с картой, где user видит текущий статус своего заказа.
Разработчики решили подсчитать, сколько курьеров использует подмену локации или клон приложения.
Цифры оказались довольно значительными: около 8% клонирует приложение, и столько же использует подмену локации. Для масштабного приложения — это большие цифры.
Вероятно, курьеры это делают для избежания штрафов за просроченный заказ или же пробуют выбрать для себя наиболее прибыльную доставку.🤪
Вот несколько проверок, которые добавились:
- проверка на root и режим разработчика;
- простая проверка на mock локации при помощи
isFromMockProvider;- список приложений, которые запрашивают разрешение на
ACCESS_MOCK_LOCATION ;- проверка переименования package name;
- проверка storage path, куда установлено приложение;
- проверка запуска на виртуалке и эмуляторе;
Результаты радуют, ведь удалось убрать практически все попытки подмены локации и клонирования приложения. 👍🏻
Kotlin 2021 Keynote
#kotlin
Тут у ребят из JetBrains идёт целая серия роликов, которая посвящена новинкам и будущему продуктов, связанных с Kotlin.
Вчера было первое мероприятие, где рассказывалось об основных новинках. Детальный разговор о каждой пойдёт дальше, но вот основные тезисы:
◆ в версии 1.6 выходит новый IR компилятор, который будет называться K2. Обещают буст производительности;
◆ KMM выходит в beta статус уже следующей весной, что также принесёт сразу несколько улучшений: и новую модель памяти, и обратную совместимость с Kotlin/Native и более стабильные инструменты. Ждём-ждём, держу кулачки за эту технологию🤜🤛;
◆ Compose Multiplatform выходит stable уже в этом году. Будет поддержка Android, web и desktop;
◆ появляются новые версии Ktor, Kotless и Data Science библиотек;
◆ Dokka, инструмент для создания документации в Kotlin-проектах, переходит в beta и получит редизайн;
◆ выходит Kover — новый gradle-плагин для проверки качества кода;
◆ ну и самое главное, у Kotlin появляется талисман😁. Скоро будет возможность выбрать ему имя.
Следим за анонсами дальше, ссылка на следующие видео тут.
#kotlin
Тут у ребят из JetBrains идёт целая серия роликов, которая посвящена новинкам и будущему продуктов, связанных с Kotlin.
Вчера было первое мероприятие, где рассказывалось об основных новинках. Детальный разговор о каждой пойдёт дальше, но вот основные тезисы:
◆ в версии 1.6 выходит новый IR компилятор, который будет называться K2. Обещают буст производительности;
◆ KMM выходит в beta статус уже следующей весной, что также принесёт сразу несколько улучшений: и новую модель памяти, и обратную совместимость с Kotlin/Native и более стабильные инструменты. Ждём-ждём, держу кулачки за эту технологию🤜🤛;
◆ Compose Multiplatform выходит stable уже в этом году. Будет поддержка Android, web и desktop;
◆ появляются новые версии Ktor, Kotless и Data Science библиотек;
◆ Dokka, инструмент для создания документации в Kotlin-проектах, переходит в beta и получит редизайн;
◆ выходит Kover — новый gradle-плагин для проверки качества кода;
◆ ну и самое главное, у Kotlin появляется талисман😁. Скоро будет возможность выбрать ему имя.
Следим за анонсами дальше, ссылка на следующие видео тут.
Как защитить premium-фичи от взлома
#android
Крутая статья, где описывается процесс исследования своего приложения на предмет доступа к премиальным фичам.
В двух словах, это происходит так: злоумышленник исследует приложение на предмет того, не сохранял ли разработчик флаг в
Подобные решения появляются из-за неопытности разработчиков, а также по причине желания использовать премиальные фичи на устройствах без Google Play Services.
Больше деталей и о том как избежать подобных проблем в своём приложении можно почитать тут.
#android
Крутая статья, где описывается процесс исследования своего приложения на предмет доступа к премиальным фичам.
В двух словах, это происходит так: злоумышленник исследует приложение на предмет того, не сохранял ли разработчик флаг в
SharedPreferences, или каком-то другом локальном хранилище, и переписывает этот флаг в true.Подобные решения появляются из-за неопытности разработчиков, а также по причине желания использовать премиальные фичи на устройствах без Google Play Services.
Больше деталей и о том как избежать подобных проблем в своём приложении можно почитать тут.
GroupingBy vs groupBy
#kotlin
В Kotlin есть целый набор операторов для работы с коллекциями. Одни из самых распространённых — groupBy, который возвращает Map<K, List<V>>, где V — элемент исходной коллекции, а K — ключ, по которому мы группируем нашу коллекцию.
Например, если мы хотим сгруппировать пользователей по идентификатору, который имеет тип String, то на выходе мы получим Map<String, List<User>>. Иначе говоря, мы превращаем нашу изначальную коллекцию в несколько меньших, сгруппированных по определённому признаку.
Это крутой метод, но не многие знают про
В нём гораздо меньше функции, однако, если вам очень важна производительность, подобный метод может помочь. Ну и просто будете знать, что существует такая альтернатива, вдруг пригодится на собеседовании. 😁
Подробнее о кейсах и о том, как его использовать можно почитать тут.
#kotlin
В Kotlin есть целый набор операторов для работы с коллекциями. Одни из самых распространённых — groupBy, который возвращает Map<K, List<V>>, где V — элемент исходной коллекции, а K — ключ, по которому мы группируем нашу коллекцию.
Например, если мы хотим сгруппировать пользователей по идентификатору, который имеет тип String, то на выходе мы получим Map<String, List<User>>. Иначе говоря, мы превращаем нашу изначальную коллекцию в несколько меньших, сгруппированных по определённому признаку.
Это крутой метод, но не многие знают про
groupingBy, который может быть полезен для задач, где особенно важна производительность, ведь он не создаёт промежуточный список для каждой маленькой коллекции. Вместо этого метод возвращает объект Grouping, который по сути является обёрткой над Iterator. В нём гораздо меньше функции, однако, если вам очень важна производительность, подобный метод может помочь. Ну и просто будете знать, что существует такая альтернатива, вдруг пригодится на собеседовании. 😁
Подробнее о кейсах и о том, как его использовать можно почитать тут.
MVI
#architecture #beginners
Архитектура MVI достаточно распространённый подход к созданию мобильных приложений. Но многие разработчики не используют её по причине усложннённости по сравнению с MVVM и MVP. Ну и стоит заметить, что многие используют MVI некорректно, получая не тот результат, который ожидали.
Есть крутейший цикл статей, который поможет проникнуться и наконец начать использовать MVI-подход в приложениях.
Автор рассказывает про Model, View and Intent, State Reducer, независимые UI-компоненты и ещё столько же статей про основные аспекты MVI.
Одним словом, крайне рекомендую. 👍
#architecture #beginners
Архитектура MVI достаточно распространённый подход к созданию мобильных приложений. Но многие разработчики не используют её по причине усложннённости по сравнению с MVVM и MVP. Ну и стоит заметить, что многие используют MVI некорректно, получая не тот результат, который ожидали.
Есть крутейший цикл статей, который поможет проникнуться и наконец начать использовать MVI-подход в приложениях.
Автор рассказывает про Model, View and Intent, State Reducer, независимые UI-компоненты и ещё столько же статей про основные аспекты MVI.
Одним словом, крайне рекомендую. 👍