Привет, Хабр! Сегодня мне бы хотелось остановиться на вопросе выбора между нативной и кроссплатформенной разработкой мобильных приложений.
Как показала практика, это актуальная дилемма как для заказчиков, так и для начинающих разработчиков, желающих получить максимально полезный опыт для будущей карьеры.
Итак, под катом делюсь опытом работы нашего отдела и некоторыми выводами, которые мы для себя сделали.
Если перед вами стоит задача разработать какое-то мобильное приложение, выбор платформы зависит от двух факторов: «Какие языки программирования вы знаетеЭ» И «С какими проблемами вы сталкиваетесьЭ»
Если речь идет об одном разработчике, то он не сможет сделать приложение для iOS и Android ни на чем, кроме React Native, если он знаком только с Java Script. Но, используя кроссплатформенный RN-фреймворк, человек может сделать работающее приложение для двух (а то и более) операционных систем.
Программирование в родной среде требует знания соответствующих языков.
Для Android это Kotlin и/или Java, а для iOS — Swift и/или Objective-C. В принципе, для каждой платформы можно обойтись одним из двух, тем более что Google активно развивает Kotlin, а Apple вкладывает большие усилия в улучшение Swift. Интересная ситуация с Flutter, еще одним популярным кроссплатформенным фреймворком.
Для работы с ним необходимо знать типизированный язык программирования Dart. Он уже достаточно популярен среди программистов, особенно энтузиастов, поэтому желающих программировать на Flutter становится все больше (в том числе создатели мобильных версий eBay, Aliexpress и даже Медуза.
io .
Таким образом, если речь идет о небольшой команде или даже гордом фрилансере, арсенал разработки будет ограничен теми компетенциями в языках программирования, которые уже имеются.
Задачи, требующие нативной разработки
Второй аспект — это задачи, стоящие перед командой разработчиков.Преимуществом кроссплатформенной разработки является скорость (одно приложение на двух платформах) и стоимость проекта.
Но иногда заказчику важны другие требования: Производительность.
Если вам нужно добиться максимальной производительности от вашего приложения, то вам подойдет только нативная разработка.
Несмотря на то, что Flutter отлично справляется с анимацией, получить максимальную отдачу от вычислительной подсистемы устройства можно только в нативной среде, без использования промежуточных библиотек.
Размер приложения.
Если вам необходимо сделать приложение максимально компактным, например, если вы разрабатываете для специализированных устройств, или если само приложение действительно большое, нативная разработка поможет его существенно сократить.
Поддержка низкоуровневых функций.
Иногда разработчику необходим прямой доступ к компонентам смартфона.
Это может касаться гироскопа, компаса, модуля распознавания отпечатков пальцев или любого другого оборудования.
Обычно для этого требуется собственное программирование.
Это также относится к функциям шифрования, необходимым банковскому сектору.
Самые современные функции.
Наконец, все нововведения платформы отражаются на родных языках в день релиза.
На фреймворках они появляются чуть позже — если это очень важные обновления, и гораздо позже, если это что-то незначительное.
Возьмем, к примеру, виртуальную реальность VR — ее поддержка в RN и Flutter реализована только на базовом уровне, и добиться всех эффектов можно только в нативных средах.
Нюансы сложных проектов
Однако если приложение представляет собой нечто более сложное, чем отображение веб-контента на мобильном устройстве, нужно иметь в виду, что кроссплатформенные фреймворки также связаны с нативным.Часто приходится редактировать код некоторых компонентов или писать собственные модули на родных языках.
То есть на практике оказывается, что родные языки в большинстве случаев для кроссплатформенной разработки не требуются, но знать их все равно необходимо!
Mix – перемешать, но не взбалтывать
Иногда меня спрашивают: «Зачем разрабатывать на RN или Flutter, если все равно придется нанимать в команду нативных разработчиковЭ» Но это лишь поверхностное мнение, поскольку работа RN имеет свои преимущества при управлении проектами.Например, в React Native гораздо удобнее описывать интерфейс, и для многих проектов этого вполне достаточно.
Таким образом, зачастую логика и низкоуровневые аспекты кодируются в нативном коде, а интерфейс создается во Flutter или RN. Например, недавно нам понадобилось подключить Яндекс.
Метрику к проекту React Native. Но у RN не было актуальной метрики — поддерживалась только старая версия, которая не работала.
Необходимо было внести доработки в Java для Android и Objective-C для iOS, чтобы реализовать полную поддержку Яндекс.
Метрики.
Когда мы разрабатывали приложение для интернет-радио, в Android-версии использовался плеер, который не поддерживает метаданные в потоке и не показывает исполнителя и название песни.
Мне пришлось открыть исходный код, добавить обработку метаданных и собрать полноценный модуль на Java, чтобы подключить его к приложению RN.
Внешний вид и разные платформы
Еще одним аспектом является внешний вид приложения.В Интернете часто говорят, что при кроссплатформенной разработке внешний вид и поведение некоторых элементов может отличаться на разных платформах.
Однако такое случается не часто, и даже если проблема все же возникает, ее легко исправить, если в штате есть разработчики, владеющие родными языками.
Более того, помимо недостатков, разработка интерфейса на кроссплатформенных фреймворках имеет и большие преимущества — есть дополнительные бонусы.
Например, благодаря активной поддержке Microsoft сегодня существует React Native Desktop, который позволяет написать приложение для Windows, опять же опираясь только на JS. Кстати, десктопный Skype до определенной версии был реализован с помощью React Native.
Во Flutter активно развивается веб-направление, позволяющее создать приложение для браузера.
Мы уже убедились на практике, что такой подход будет работать как на десктопной системе, так и на мобильной.
Но, естественно, доступ к низкоуровневым компонентам поддерживаться не будет — это касается гироскопа, компаса и прочего железа.
Например, по такому принципу построены приложения британского сервиса.
Манипекс .
Они используют Flutter для разработки всех своих приложений, включая веб-приложения.
Заключение
Подводя итог, скажу, что в моей команде большая часть разработки ведется кроссплатформенная, однако в штате становится все больше нативных разработчиков, Дело в том, что сегодня создано уже довольно много библиотек, а кроссплатформенная разработка занимает меньше времени, чем кодирование приложения дважды на двух разных языках.Например, так было сделано приложение для отеля Лучано .
Кроме того, большинство приложений представляют собой клиентские модули, отображающие некоторую часть Интернета и предлагающие довольно простые функции.
в этом случае использовать нативную разработку просто нет смысла.
Между тем, кодировать небольшие дополнения или исправлять что-то в самих фреймворках на родных языках оказывается гораздо быстрее и проще, чем изначально делать всю работу на нативном.
Поэтому фактически сегодня эффективная мобильная разработка требует использования фреймворков для увеличения скорости и снижения стоимости проектов, а также знания всех родных языков для реализации поддержки низкоуровневых функций и файлов самих фреймворков при вы столкнулись с другим артефактом или ошибкой.
Кстати, очень интересно узнать ваше мнение – так что не забывайте участвовать в опросе и оставлять комментарии! В опросе могут участвовать только зарегистрированные пользователи.
Войти , Пожалуйста.
Что вы предпочитаете в области мобильной разработки? 12,5% RN 23 27,17% Flutter 50 60,87% родные языки 112 14,67% остальные 27 184 пользователя проголосовали.
46 пользователей воздержались.
Теги: #Разработка для Windows #Разработка для iOS #Разработка для Android #JavaScript #разработка для мобильных устройств #Kotlin #react Native #Swift #flutter #dart #Разработка для Windows Phone #Neti
-
История Microsoft Access
19 Oct, 24 -
Модернизация Компакт-Диска До Микроскопа
19 Oct, 24 -
Идеальный Опрос
19 Oct, 24 -
Я "Знаю" Ооп
19 Oct, 24