📱8 распространенных ошибок в разработке под Android
Качество приложения влияет на количество возникших у пользователя проблем. Разбираемся с наиболее распространенными среди разработчиков программ для Android ошибками.
Перевод публикуется с сокращениями, автор оригинальной статьи Siva Ganesh Kantamani.
1. У всего есть свое место, но не все это понимают
Экосистема Android быстро развивается и включает всевозможные сообщества по всему миру: разные социальные слои, пользователи с ограниченными возможностями, желающие иметь модные фичи люди и многие другие.
Разработка приложений для такого разнообразия – непростая задача. Речь не об архитектуре высокого уровня, а о простых вещах, значительно влияющих на современную Android-разработку: strings, colors, dimens и т. д.
Важно сохранить все строковые ресурсы в одном файле (обычно strings.xml) для быстрого редактирования. Это применимо к цветам, ресурсам dimens и стилям, поэтому, когда придет время добавить dark mode, с этим будет легко справиться.
Вывод: поддерживайте код в одном месте для повторного использования и не пишите хардкод.
2. Отказ от использования фрагментов
В начале пути разработки под Android рекомендовалось использовать отдельные activities для каждого экрана. С течением времени стали всплывать различные проблемы из-за этого. Кроме того, являющиеся точками входа в приложение активити имели массу уязвимостей.
С другой стороны, использование activities имело смысл несколько лет назад, когда API Fragments еще не был допилен.
Сегодня команда Android рекомендует использовать фрагменты для проектирования каждого экрана и поддерживать одно или несколько активити во всем приложении для их размещения. Такое построение имеет название Single Activity Architecture.
Новый подход значительно сокращает количество обращений извне приложения. Одной из основанных на архитектуре единой активности новинок является навигационный компонент Jetpack.
Вывод: используйте API Fragments – это сделает вашу жизнь намного проще.
3. Нежелание использовать DataBindings или ViewBindings
Среда разработки Android была основана на трех типах файлов: XML, Kotlin и Java. XML-файлы содержат все, что связано с дизайном, а файлы Kotlin/Java включают в себя остальные части приложения.
Дизайн и прочие части должны быть связаны, и именно здесь data binding и view binding играют ключевую роль вместе с функцией findviewbyid. Основная цель view binding – решить проблему безопасности биндинга в рантайме.
Цель data binding – привязка компонентов UI в макетах к источникам данных, с использованием декларативного формата, а не программного.
Вывод: рассмотренные инструменты повысят уровень безопасности приложения и добавят простоты в обработке UI.
4. Нежелание использовать Kotlin и Coroutines
В тот момент, когда ребята из Google объявили Kotlin рекомендуемым языком для разработки приложений для Android, это стало влияющим на болевые точки в Java и снижающим нагрузку на разработчиков шагом.
Использование Kotlin открыло доступ к таким функциям, как extensions, scoped functions, data classes, object keyword, null safety и т. д. От разработки для Android, вы можете перейти к мультиплатформенной и серверной разработке.
Асинхронное программирование играет ключевую роль в создании приложений. На ранних стадиях для этого применялся AsyncTask, а со временем произошел переход на RxJava.
Затем появились корутины – простой подход к асинхронному программированию. В наши дни они стали стандартным решением для реализации многих задач. Kotlin делает разработку простой и лаконичной, а корутины позволяют выполнять асинхронные задачи последовательно, без необходимости изучать что-либо новое.
Вывод: для работы с асинхронностью используйте корутины, а не AsyncTask. Нам нужна производительность и надежность.
5. Ошибки проектирования
Недооцененность ConstraintLayout
ConstraintLayout поставляется с удобными функциями: guidelines, barriers, group, aspect ratio, flow, layer и т. д. Благодаря этим функциям на нем можно построить практически любой экран.
ConstraintLayout отличается от Relative и Linear layout. Вы можете создать плоские макеты без иерархии вложенности, что приведет к меньшему количеству слоев для рисования во view.
Чрезмерное использование ConstraintLayout
Мощные функции данного инструмента совсем необязательно применять на каждом шагу. Использование ConstraintLayout в создании UI, который зачастую можно спроектировать с помощью FrameLayout или LinearLayout, является избыточным.
Боязнь MotionLayout
ConstraintLayout – это правильный выбор для разработки сложных вариантов интерфейса, но не для реализации анимации и переходов – для этого используйте MotionLayout.
MotionLayout – это подкласс ConstraintLayout, включающий все его функции. Он полностью декларативен с возможностью реализации сложных переходов в XML и обратно и совместим с API уровня 14, что делает его универсальным для 99% случаев использования. Новый редактор MotionLayout в Android Studio 4.0 позволяет легко с ним работать.
Вывод: для каждой конкретной ситуации выбирайте правильный инструмент, что позволит избежать лишней обработки и рефакторинга.
6. Отсутствие знаний о безопасности
Хранение конфиденциальных данных
Хранение конфиденциальных данных в shared preference, БД или локальном хранилище – рискованная затея, т. к. их все можно легко взломать. Многие разработчики не знают об этом и используют shared preference для хранения паролей, настроек и прочей информации пользователей.
Это можно решить с помощью новой библиотеки хранилища, используя Encrypted preference или путем реализации шифрования самостоятельно.
Безопасная коммуникация
Многие разработчики считают, что использование HTTPS может обезопасить связь с серверами, но это не всегда так. Зачастую хакеры вмешиваются в канал связи, чтобы скомпрометировать всех участников. Это называется атакой man in the middle. Для установки защищенной линии связи с сервером, придется установить и настроить сертификат.
Вывод: не пренебрегайте безопасностью и применяйте советы только из официального хелпа.
7. Незнание возможностей Android Studio
Не имеет значения, насколько мощным будет оружие, если вы не научитесь правильно его применять. Как разработчикам вам повезло иметь возможность использовать Android Studio, но вам придется его изучить.
В Android Studio есть много скрытых функций: handy shortcuts, live templates, file templates, predefined project structures, code generator plug-ins, customization и многие другие. У нас также есть database inspector, layout inspector, profiler и другие фичи для продуктивности в рантайме.
Android Studio также предоставляет инструментальную поддержку для нескольких библиотек, вроде navigation editor для просмотра навигационного графика приложения, и motion editor для реализации эффективной анимации и переходов.
Вывод: студия снабжена столькими полезными плюшками, что не изучить их и не использовать было бы глупо.
8. Игнорирование библиотеки Jetpack
Jetpack – это набор библиотек, которые помогают разработчикам следовать лучшим практикам, сокращать шаблонный код и писать приложения, стабильно работающие на любых устройствах и версиях Android.
Библиотека охватывает следующие функции:
- paging3 для разбиения на страницы;
- Room для локальной базы данных;
- WorkManager для длительных фоновых задач;
- DataStore для улучшенного хранения данных;
- Hilt для DI;
- App Startup для сокращения времени запуска приложения и т. д.
Все эти компоненты созданы с учетом производительности и простоты использования для реализации сложных задач с минимальным количеством кода.
Вывод: библиотека – это дополнительные возможности для вашего кода, зачастую очень полезные.
Заключение
Естественно, это далеко не все известные просчеты. Не печальтесь, что у вас бывают ошибки, не бойтесь их допускать и не опускайте руки, если их слишком много, поскольку любое обучение проходит через «боль и огорчение».
Изучайте учебные материалы, смотрите видео с конференций и онлайн-курсов, старайтесь посещать митапы и прочие мероприятия, общайтесь с единомышленниками и черпайте опыт – только так можно набить руку и получить заветный опыт. Удачи в обучении!