1. Все должно быть на своем месте (строки, цвета)
Экосистема Android стремительно растет по всему миру и распространяется на различные группы людей. Люди из разных слоев общества, люди с ограниченными возможностями, пользователи, которые просто хотят иметь новомодные фичи, такие как ночной режим (темная тема), начинают использовать приложения Android в своей повседневной жизни.
Разработка приложений для широкого потребителя/diverse community — непростая задача. Я говорю здесь не об архитектурах высокого уровня. Напротив, речь идет о простых вещах: строки, цвета, размеры и т. д., которые все же имеют сильное влияние на современную Android-разработку.
Обычно для комфортного пользования приложением люди выбирают свой родной язык. Ключевая практика здесь — хранить все строки в одном файле (обычно strings.xml), чтобы можно было быстро добавить разные строковые файлы на разных языках.
Это же применимо и к параметрам: цвет, размер, стиль, — и если вы решите обеспечить поддержку приложением темной темы или добавить настройку лейаутов для работы на планшете, так это будет сделать проще. Короче говоря: собирайте весь такой код в одном месте, чтобы его можно было повторно использовать и легко изменять и заменять, вместо того чтобы хардкодить значения по всему проекту.
2. Неиспользование фрагментов
На заре Android-разработки рекомендовалось использовать отдельные активити для каждого экрана. Вследствии этого через какое-то время разработчики столкнулись с разного рода проблемами. Также, тот случай, когда активити является точкой входа в приложение, оказался уязвимостью.
Если у вас был опыт работы Android-разработчиком, то вы знаете, что пару лет назад, когда фрагменты (Fragments API) еще не были настолько развиты, использование активити было оправданно.
Перенесемся в 2020 год. Команда Android рекомендует использовать фрагменты в проектировании каждого экрана и поддерживать одно или несколько активити на все приложение для хостинга фрагментов. Это хорошо известно нам как Single Activity Architecture.
Использование этой архитектуры значительно сокращает количество внешних взаимодействий с приложением. Новый Jetpack navigation component главным образом основан на Single Activity Architecture. API Fragments значительно упростит вашу жизнь. Возможно, через пару лет Android-разработка совсем уйдет от активити к фрагментам.
3. Неиспользование Data Binding или View Binding
Среда разработки Android с самого начала базировалась на трех типах файлов: XML, Kotlin и Java. Файлы XML содержат все, что связано с дизайном, а файлы Kotlin/Java включают все остальное.
Рано или поздно встает необходимость связать пользовательский интерфейс (UI) и бизнес-логику, и именно здесь data binding (привязка данных) и view binding (привязка представления) играют ключевую роль. Связь между пользовательским интерфейсом и бизнес-логикой изначально осуществлялась через печально известную функцию findviewbyid.
Для решения этой проблемы рекомендуется использовать view binding и data binding. Основная цель view binding’а — решить проблему связывания с типом и null safety в рантайме.
Data binding необходим скорее для всеобщего блага. Оно позволяет связывать компоненты пользовательского интерфейса в лейаутах с источниками данных, используя декларативный формат, а не программным путем.
4. Неиспользование Kotlin и корутин
Прошло несколько лет с тех пор, как Kotlin, с подачи Google, стал рекомендуемым языком для разработки Android приложений. Это было очень серьезное трансформационное решение: Kotlin разобрался со всеми болевыми точками в Java и смог облегчить работу разработчиков.
Использование Kotlin в разработке Android-приложений открыло новые возможности благодаря таким фичам, как расширения, функции области видимости (scoped functions), классы данных, ключевое слово object
, null safety
и т. д. Помимо Android-разработки, с помощью Kotlin вы также можете осуществлять мультиплатформенную и серверную разработку.
Асинхронное программирование играет ключевую роль в разработке мобильных приложений. На ранних этапах мы использовали AsyncTask
. Со временем появилась RxJava, что принесло много изменений. Но RxJava имеет очень крутую кривую обучения и совершенно другой подход к коллбекам.
После появились корутины (coroutines) — решение Kotlin для асинхронного программирования с простым подходом. В наши дни корутины стали стандартным решением для реализации асинхронных задач. Мощные фичи и простая реализация делают их более адаптируемыми.
Kotlin делает вашу разработку простой и лаконичной, тогда как корутины позволяют выполнять асинхронные задачи последовательно без необходимости изучать что-либо новое. Использование корутин в ваших разработках приводит только к более продуктивным и эффективным результатам.
5. Ошибки проектирования
Недостаточное использование ConstraintLayout
ConstraintLayout содержит множество удобных функций, таких как guidelines
, Barriers
, Group
, aspect ratio
, flow
, Layer
и многое другое. Благодаря всем этим функциям ConstraintLayout
может отрисовать практически каждый экран (от простых до сложных вариантов использования).
ConstraintLayout
отличается от Relative
и Linear
лейаутов. Поэтому не стоит использовать его так же. Мы можем создавать плоский лейаут без иерархии вложенности, что позволяет рисовать меньшее количество слоев.
Чрезмерное использование ConstraintLayout
Мощные функции сопряжены с риском злоупотребления ими. Использовать ConstraintLayout
в пользовательском интерфейсе, когда можно обойтись FrameLayout
или LinearLayout
, — нелепое решение.
Страх перед MotionLayout
ConstraintLayout
— правильный выбор при разработке сложных сценариев, но не для реализации анимации и переходов, где эффективным решением будет использовать MotionLayout.
MotionLayout
— это подкласс ConstraintLayout
, который включает в себя все его прекрасные фичи, и он полностью декларативен с возможностью реализации сложных переходов в XML. MotionLayout
обратно совместим с API 14 уровня, что подразумевает 99% охват сценариев использования.
Новый редактор MotionLayout
в Android Studio 4.0 облегчает работу с MotionLayout
. Он предоставляет отличную среду для реализации переходов, MotionScenes
и т.д.
MotionLayout
— это не сложные вычисления и алгоритмы, а простой декларативный подход к реализации анимации и переходов с помощью нового модного редактора в Android Studio.
6. Пробелы в системе безопасности
Хранение конфиденциальных данных
Хранение конфиденциальных данных в общих настройках (shared preference) Android, базе данных или локальной области хранения — это риск, так как их легко взломать. Многие разработчики не знают об этом и используют общие настройки для хранения конфиденциальных данных пользователя.
Эту проблему можно решить с помощью новой библиотеки datastore или библиотеки Encrypted preference или путем самостоятельной реализации шифрования.
Секьюрная связь
Многие Android-разработчики полагают, что использование HTTPS обеспечивает безопасное взаимодействие с серверами. Но это не так. Многие хакеры вмешиваются в обмен данными между серверами и клиентами. Это называется атакой посредника (middle man attack).
Для создания безопасной линии с сервером, нам необходимо реализовать закрепление сертификата.
7. Недостаточная осведомленность о возможностях Android Studio
Неважно, насколько мощным является оружие, если вы не умеете правильно им пользоваться. Нам, разработчикам, повезло, что у нас есть такой мощный инструмент, как Android Studio, и хорошо бы знать, как использовать его эффективно.
В Android Studio есть много скрытых фич, как, например: удобные ярлыки, живые шаблоны, шаблоны файлов, готовые структуры проекта, плагины для генерации кода, кастомизация и многое другое. Для более эффективной работы есть также такие фичи, как инспектор базы данных, лейаут инспектор, профилировщик.
Android Studio также предоставляет инструментальную поддержку нескольких библиотек, таких как редактор навигации для просмотра графа навигации приложения и редактора движения для реализации анимаций и переходов красивым образом.
8. Отказ от использования библиотек Jetpack
«Jetpack - это набор библиотек, который помогает разработчикам не отставать от лучших практик, сокращать шаблонный код и писать код, который работает согласованно на всех устройствах и версиях Android, чтобы разработчики могли сосредоточиться на коде, который им важен. ” — Android Jetpack
Библиотеки Jetpack охватывают крупные фичи, такие как paging3 для пагинации, Room для локальной базы данных, WorkManager для продолжительно работающих фоновых задач, DataStore для улучшенного хранения данных, Hilt для DI, navigation component для навигации в UI приложения, App Startup для сокращения времени запуска приложения и многое другое.
Все эти библиотеки созданы с учетом производительности и простоты использования для реализации сложных задач с меньшим количеством кода.
На этом все. Надеюсь, что эта статья оказалась для вас полезной. Спасибо за внимание!
Материал подготовлен в рамках специализации «Android Developer».
AlexeyGorovoy
Ошибка номер 9 - отказ от написания приложения на Flutter.