Немного про Navigation Component
#jetpack #navigation #comments
Думаю, что многие из вас знакомы с библиотекой Jetpack Navigation Component, которая сейчас является рекомендованным решением для навигации от Google.
Я пробовал эту библиотеку как только она появилась, но в самом начале было довольно много багов, которые не позволили использовать её в проде. Сейчас решил снова вернуться к ней, и поговорить о плюсах и минусах этой библиотеки.
Начнём с хорошего:
🔹 рекомендованное решение от Google — библиотека входит в комплект Jetpack-библиотек, а это теоретически значит, что она будет поддерживаться, баги будут исправляться, а также будет интеграция с текущими компонентами.
🔹 удобный и красивый граф навигации — наверное, это одна из фич библиотеки, которая вызывает «вау-эффект»: все экраны и отношения между ними видны в одном месте в виде красивых превью;
🔹 хорошая документация — в целом, с компонентом разберётся любой разработчик за достаточно короткий промежуток времени, ведь документация хорошая. Правда, хотелось бы больше примеров кода и приложений;
А теперь поговорим о минусах, которые не позволили мне использовать её у себя в проекте.
⭕ отсутсвие кастомизации — у вас мало возможностей для настройки этой библиотеки. Например, я не нашёл как без костылей запретить пересоздавать фрагменты в
⭕ навигация возможна только из Fragment — вы должны делать переходы между экранами только через
Я склоняюсь к тому, чтобы слой
⭕ сложность настройки backstack — у вас есть возможность настроить multiple back stack, однако если мы говорим про stack
Поэтому, пока я остаюсь на Cicerone, которая не имеет подобных минусов и полностью кастомизируется под мои требования.
Поделитесь своим мнением про Navigation Component, буду рад поменять своё мнение. 😉
#jetpack #navigation #comments
Думаю, что многие из вас знакомы с библиотекой Jetpack Navigation Component, которая сейчас является рекомендованным решением для навигации от Google.
Я пробовал эту библиотеку как только она появилась, но в самом начале было довольно много багов, которые не позволили использовать её в проде. Сейчас решил снова вернуться к ней, и поговорить о плюсах и минусах этой библиотеки.
Начнём с хорошего:
🔹 рекомендованное решение от Google — библиотека входит в комплект Jetpack-библиотек, а это теоретически значит, что она будет поддерживаться, баги будут исправляться, а также будет интеграция с текущими компонентами.
🔹 удобный и красивый граф навигации — наверное, это одна из фич библиотеки, которая вызывает «вау-эффект»: все экраны и отношения между ними видны в одном месте в виде красивых превью;
🔹 хорошая документация — в целом, с компонентом разберётся любой разработчик за достаточно короткий промежуток времени, ведь документация хорошая. Правда, хотелось бы больше примеров кода и приложений;
А теперь поговорим о минусах, которые не позволили мне использовать её у себя в проекте.
⭕ отсутсвие кастомизации — у вас мало возможностей для настройки этой библиотеки. Например, я не нашёл как без костылей запретить пересоздавать фрагменты в
BottomNavigationView
, а ведь если у вас есть экран с картой, то его повторная инициализация занимает много времени;⭕ навигация возможна только из Fragment — вы должны делать переходы между экранами только через
Fragment
. С одной стороны, это удобно, ведь, например, можно сразу, при клике на кнопку, вызвать нужный элемент навигации. Но с другой стороны — мы возлагает на Fragment
больше ответственности, чем должно с точки зрения архитектуры. Я склоняюсь к тому, чтобы слой
View
был максимально «глупым» и в нём было минимальное количество логики. А вызвать навигацию с ViewModel
проблематично.⭕ сложность настройки backstack — у вас есть возможность настроить multiple back stack, однако если мы говорим про stack
Activity
, то фрагменты при нажатии кнопки «назад» также пересоздаются. Возможно, я не нашёл в документации, как поправить это поведение, но мне кажется, что это должно быть кастомизируемым для каждого экрана.Поэтому, пока я остаюсь на Cicerone, которая не имеет подобных минусов и полностью кастомизируется под мои требования.
Поделитесь своим мнением про Navigation Component, буду рад поменять своё мнение. 😉
Очищаем 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.
Больше деталей и о том как избежать подобных проблем в своём приложении можно почитать тут.