Слово «кроссплатформенность» все чаще используется в интернете, но что оно на самом деле означает? И ответ на этот вопрос должен быть в самом начале — с классического подхода разработки приложений, то есть разработки отдельного приложения для каждой платформы.
Кроссплатформенная разработка мобильных приложений
Кросс-платформенная разработка необходима для сокращения времени разработки приложений и снижения затрат. Большинство компаний сегодня имеют мобильные приложения. Их строительство — дорогостоящий и сложный процесс. В данном документе представлена подробная информация об особенностях подхода, преимуществах и недостатках, рамках и сфере применения.
Что такое кроссплатформенная разработка?
- Кроссплатформенный язык программирования переводится на нативный на этапе запуска приложения. Это происходит благодаря транспилеру (программа, которая преобразует код).
- К исходному коду добавляются плагины, которые транслируют вызовы из неродного кода к родным функциям системы.
Приложения часто создаются с использованием языков разметки и таблиц стилей (HTML, CSS и JavaScript), пишутся параллельно и подходят для большинства устройств, поскольку работают с движком браузера.
Плюсы
Преимущества кросс-платформенной разработки включают:
- Сравнительно невысокая цена и быстрый результат. Это связано с тем, что не нужно писать много кода.
- Один код можно использовать на всех платформах.
- Требует меньше ресурсов (не нужен большой штат).
- Работа на большую аудиторию.Ресурс дает возможность привлечь больше трафика, так как он доступно для всех типов мобильных устройств.
- Возможность использовать одинаковый интерфейс и дизайн на всех устройствах.
Что такое нативная и кроссплатформенная разработка?
Нативная разработка — это создание мобильного приложения для конкретной операционной системы. Например, это может быть iOS. В этом случае приложение поддерживается только одним OC. Следовательно, для поддержки Android и iOS необходимо разрабатывать два отдельных приложения одновременно. Многоплатформенная разработка — это реализация приложения, которое работает на разных операционных системах. Это стало возможным благодаря использованию общего кода в кроссплатформенном фреймворке.
- Гибкий функционал. Разработка приложения под определенную ОС позволяет реализовать возможности, поддерживаемые именно этой системой. К тому же, такие функции будут работать более корректно. Кроме того, есть возможность разработать функционал с учетом уникальный функций устройства.
- Более быстрая скорость работы. При создании приложения используется понятный и привычный для платформы код, поэтому оно способно работать более быстро и качественно. При этом в кроссплатформенной разработке приложение может работать не так оперативно.
- Более понятный интерфейс. Для дизайна приложения в нативной разработке используются гайдлайны. Это рекомендации по адаптации дизайна приложения для конкретной платформы. Соответственно, дизайн нативного приложения будет более привычным и удобным для пользователя.
Недостатками разработки нативных приложений являются
- Высокая цена. Если вам необходимы две версии нативного приложения под разные операционные системы, платить нужно будет за два отдельных приложения. А если учесть, что стоимость разработки обычно стартует от 1 млн рублей, то сумма расходов будет немалой.
Плюсы и минусы кроссплатформенной разработки
Разработка мобильных приложений на кросс-платформах также имеет свои преимущества и недостатки. Давайте остановимся на них более подробно. Преимуществами кроссплатформенной разработки являются
- Возможность получить приложение, которое работает сразу на нескольких ОС. Вам не нужно отдельно разрабатывать приложение под каждую систему. Приложение, разработанное по кроссплатформенной технологии будет доступно для установки как в App Store, так и в Google Play.
- Выгода. Кроссплатформенное приложение будет стоить дешевле двух отдельных версий нативного. Что касается разницы стоимости одного нативного и одного кроссплатформенного приложения, то сравнивать здесь будет не совсем корректно. Ведь стоимость разработки зависит еще и от требований к функционалу.
Недостатками кроссплатформенной разработки приложений являются.
- Менее гибкий функционал. Из-за разницы в операционных системах реализация некоторых функций будет затруднительной, а приложение может работать не так функционально. Кроме того, страдает оперативность.
- Более жесткие требования. В магазинах приложений, в частности, в AppStore требования к кроссплатформенному приложению будут более высокими, а модерация — более долгой, и могут возникнуть проблемы.
- Более медленная скорость работы. Из-за разницы в интерфейсе операционных систем, кроссплатформенное приложение обычно работает более медленно, чем нативное.
- Проблемы при обновлениях операционной системы — кроссплатформенные приложения будут отставать в функционале.
Примечания: Развертывание нативного приложения происходит быстрее, чем развертывание многоплатформенного приложения. Это связано с тем, что кроссплатформенная разработка требует различных подходов в рамках одного и того же кода и тестирования, что увеличивает время разработки. С другой стороны, разработка двух нативных приложений быстрее, но и дороже в разработке и поддержке. Увеличение скорости и стоимости связано с тем, что версии Android и iOS разрабатываются одновременно разными разработчиками со знанием соответствующих операционных систем.
Как создать кроссплатформенное или нативное приложение и какой способ разработки выбрать?
И кроссплатформенная, и нативная разработка имеют свои нюансы. Вы должны выбирать между ними в зависимости от ваших целей, обстоятельств и задач.
Поэтому, если ваш бюджет и время разработки ограничены, и вы не хотите разрабатывать два отдельных приложения, вы можете перейти на кросс-платформенную разработку приложений. Особенно если вам не нужны специальные функции приложения.
Оно того стоит
Как уже упоминалось во введении, мобильные приложения в целом можно разделить на две категории: классические (далее — нативные приложения) и кроссплатформенные приложения, и я считаю, что прежде чем мы погрузимся в мир разработки кроссплатформенных мобильных приложений, нам необходимо подробнее поговорить о нативных приложениях.
Плюсы и минусы нативной разработки
В мире мобильных устройств доминируют две платформы: iOS и Android. Для разработки приложений для этих систем Apple и Google выпустили соответствующие SDK. Приложения для Android разрабатываются на Java или Kotlin в Android Studio, а приложения для iOS — на Swift в Xcode.
На первый взгляд, человеку, не знакомому с темой, может показаться странным использование нативного подхода, когда существует кроссплатформенное решение. Зачем писать два приложения, если можно написать одно? А почему, собственно, потому что вы можете значительно облегчить свою жизнь с помощью всего одного приложения? Но, как всегда, реальность гораздо сложнее. Нативная разработка имеет ряд неоспоримых преимуществ, которые я хотел бы обсудить более подробно.
Первый и самый важный момент — это релевантность. Отечественные разработчики — это те, кто может первыми воспользоваться всеми возможностями новых операционных систем, будь то небольшое изменение в иконках или новый встроенный API для улучшения и развития своих приложений. С другой стороны, кроссплатформенные разработчики должны ждать, пока эти функции будут добавлены в используемый ими фреймворк или пока кто-то из сообщества выпустит библиотеку, которая часто основана на родном коде.
Из-за того, что кроссплатформенные фреймворки работают внутри, они в некоторой степени замедляют работу приложений, поэтому родные приложения занимают лидирующие позиции по скорости работы приложений. Кроме того, в отличие от нативных приложений, кроссплатформенные фреймворки для разработки мобильных приложений не имеют полного доступа к системному API, что вынуждает разработчиков либо писать нативный код, либо искать библиотеку для решения своей задачи.
В целом, разработка нативных приложений имеет только один, хотя и очень серьезный, недостаток — стоимость. Необходимо нанять две команды разработчиков и обеспечить связь между ними. Этот недостаток может стать довольно критичным для небольших компаний без больших бюджетов и может быть важной причиной для выбора кросс-платформенного подхода.
Пришло время поговорить о кроссплатформенных приложениях. Из-за большого разнообразия доступных фреймворков трудно выделить общие черты, кроме самой кроссплатформенности, но все они имеют схожие преимущества и недостатки.
Подробнее о кроссплатформенных приложениях: особенности, преимущества, недостатки
Основное преимущество подхода, основанного на развертывании
Однако устранение этого недостатка одновременно вызывает множество других проблем. Скорость работы кроссплатформенных приложений обычно ниже, чем «родных», что заметно, например, в приложениях с интенсивной анимацией. Как упоминалось ранее, кроссплатформенные приложения имеют ограниченный доступ к API операционной системы, что может привести к необходимости написания нативного кода. Хотя стоит отметить, что нативный код может быть интегрирован в кроссплатформенный код довольно легко, при частом использовании такого решения подход теряет свое важное преимущество. Решением этой проблемы также могут стать библиотеки, написанные другими разработчиками, которые не разделяют кодовую базу на кроссплатформенные и нативные компоненты, но и не защищают вас от ошибок и недоработок в самой библиотеке.
Однако, если ваше приложение не использует много возможностей платформы, например, камеру смартфона, выбор в пользу кросс-платформенной разработки может сэкономить вам много средств на разработку, а также увеличить скорость благодаря удобным инструментам для разработчиков, о которых мы поговорим далее.
Существует множество фреймворков для кроссплатформенной разработки мобильных приложений, но наиболее широко используемыми являются React Native и Flutter, на которых мы и остановимся.
На чем разрабатывают кроссплатформенные приложения: инструменты и платформы
Начиная с React Native, кроссплатформенного фреймворка от Facebook, основанного на чрезвычайно популярной библиотеке JS, React Native делает переход от мобильной веб-разработки к мобильной разработке максимально простым. Технология Fast Refresh позволяет изменениям кода практически мгновенно отображаться на устройстве, что значительно ускоряет разработку приложений. Поскольку фреймворк основан на React Js, он разрабатывается с использованием JavaScript, что позволяет front-end разработчикам быстро перейти к разработке мобильных приложений для различных платформ.
И хотя у React Native есть некоторые проблемы с производительностью, это по-прежнему самый популярный кроссплатформенный фреймворк с огромным сообществом, поддерживающим гигантское количество библиотек, что, в свою очередь, делает разработку еще быстрее и облегчает поиск новых разработчиков. Но конкурент Google, React Native, становится все более популярным.
Flutter — это относительно новый фреймворк, выпущенный в 2017 году. Несмотря на свой молодой возраст, он уже завоевал большую популярность в сообществе разработчиков. Flutter постоянно развивается. Изначально он был представлен как фреймворк для кроссплатформенной мобильной разработки, но уже превзошел это определение. Теперь можно разрабатывать мобильные, веб- и настольные приложения на основе инструментария Flutter. Hot Reload, аналогичный Fast Refresh в React Native, позволяет мгновенно увидеть изменение на экране устройства, а большое количество библиотек почти полностью закрывает ограниченный доступ к системному API (однако будьте осторожны при выборе библиотек, так как некоторые не поддерживают определенные платформы), и позволяет прекратить писать нативный код на
Разработка во Flutter ведется на языке Dart, который также разработан компанией Google, что в свою очередь дает возможность добавлять в язык новые функции специально для разработчиков Flutter. Например, недавно из бета-версии была выведена функция null safety, которая при добавлении в проект требует от разработчиков специально помечать переменные, значение которых может быть равно null, и добавлять проверки для таких случаев, что приводит к созданию более стабильных приложений. Dart также прост в освоении для отечественных разработчиков, поэтому при желании они могут быстро перейти к кросс-платформенной разработке.
Этот тип развития сочетает в себе два предыдущих подхода. Уровень бизнес-логики создается как «переносимый» компонент, а интерфейс и интеграция платформы создаются с помощью стандартных инструментов. Существует несколько языков для написания общей логики: C/C++ (зрелое и надежное решение), KotlinNative (очень активно развивается) и JavaScript (менее распространен).
Гибридная разработка
Чтобы ответить на этот вопрос, необходимо знать, какого рода проекты вы хотите создавать. Небольшие проекты могут быть исключительно кроссплатформенными и будут полностью оправданы. На данном этапе я бы посоветовал обратить внимание на Flutter.
- нативными остаются наиболее подходящие для этого компоненты;
- общая логика создаётся один раз.
- если общий компонент будет создавать мобильная команда, то необходимо получать экспертизу в ещё одном языке;
- есть накладные расходы на интеграцию кросс-платформенных компонентов.
С какого типа разработки лучше начать?
Но сегодня я бы начал именно с нативной разработки. Во-первых, большинство проектов сегодня строятся нативно. Это означает, что у вас больше возможностей сменить проект/компанию. Во-вторых, со временем вы можете перейти к гибридной мультиплатформенной разработке. Таким образом, вы сможете развиваться с технической точки зрения.
Руководитель отдела мобильных разработок в IT-компании MediaSoft.
На мой взгляд, лучше начать с родных программ, а затем, если вам захочется, освоить один или несколько кроссплатформенных инструментов. Разработка игр может быть исключением, поскольку они в основном пишутся на Unity, который является кроссплатформенным движком.
Если говорить о преимуществах нативной разработки, то для разработчика это означает меньше препятствий и больше инструментов для работы. У него также будет больше источников информации для решения сложных проблем, возникающих при создании приложения — не секрет, что в Интернете зачастую больше советов и рекомендаций по нативной разработке, чем по кроссплатформенной.
Для конечного пользователя нативная разработка означает, что приложение имеет знакомые, предсказуемые интерфейсы и поведение — при условии, что приложение было написано в соответствии со всеми рекомендациями.
Кроссплатформенное приложение не всегда может полностью соответствовать драйверам обеих платформ, что может создать дополнительные трудности для разработчика и пользователя. Самый простой пример — ситуация с кнопкой «назад»: на Android она находится в разделе
Разработчик в команде разработчиков тарифных карт Sovesti.
Выбор кроссплатформенного или нативного подхода зависит от двух факторов: типа мобильной разработки, которой вы лично хотите заниматься, или требований работодателей, с которыми вы хотите работать. Например, если вы посмотрите на Upwork (платформа для поиска удаленных специалистов для проектов и задач), то увидите, что предложения в пользу Xamarin и React Native явно преобладают. Преимущества здесь очевидны: это дешево, быстро и позволяет реализовывать проекты на всех платформах одновременно. Однако если мы посмотрим на крупные ИТ-компании с внутренним поиском, то основной упор делается на нативную разработку, несмотря на то, что этот тип разработки требует больше времени и стоит дороже.
В нашей компании мы предпочитаем нативную разработку, поскольку она позволяет дизайнерам и разработчикам создавать более плавные, интуитивно понятные UX/UI. Кроме того, нативная разработка предлагает более гибкий контроль над системными функциями.
Все зависит от поставленной задачи. Если вам нужно создать прототип приложения для нескольких платформ или написать мобильную версию сайта, вы можете поискать кроссплатформенные фреймворки. Это, вероятно, позволит вам разработать приложение быстрее, чем нативная разработка, особенно если вы работаете с фреймворком, похожим на привычный вам инструмент, например React Native.
С другой стороны, гибкость многоплатформенных приложений должна быть чем-то уравновешена. Где-то появляется «неродной» элемент интерфейса, где-то ухудшается взаимодействие с системой, где-то замедляется скорость и т.д. Хотя нативная разработка требует больше ресурсов, многие компании предпочитают именно ее, поскольку она обеспечивает более стабильный и нативный продукт.
Поэтому, если вы только начинаете заниматься мобильной разработкой, хорошей идеей будет сначала начать с нативной разработки. Вы сможете найти больше информации о ней в интернете, глубже понять особенности платформы и не столкнетесь с некоторыми нюансами разработки на нескольких платформах. И если в дальнейшем вы решите заняться кроссплатформенной разработкой, эти знания вам точно пригодятся.
Итак, какой подход к разработке стоит выбрать?
Напоминаем, что вы можете направлять свои вопросы экспертам, а мы будем собирать ответы, если они покажутся вам интересными. В списке тем вы найдете вопросы, которые вы уже задавали. Если вы хотите вступить в ряды экспертов и представить свой собственный ответ или ответ вашей компании, пожалуйста, напишите по адресу experts@tproger.ru. После этого мы сообщим вам, как действовать дальше.
Иногда меня спрашивают: «Зачем тогда разрабатывать на RN или Flutter, если все равно придется нанимать разработчиков?
Когда мы разрабатывали приложение для веб-радио, в версии для Android использовался плеер, который не поддерживал метаданные в потоке и не отображал названия исполнителей и песен. Нам пришлось открыть исходный код, добавить обработку метаданных и создать полноценный Java-модуль, чтобы связать его с приложением RN.
Еще один аспект — внешний вид приложения. В Интернете часто отмечается, что при кроссплатформенной разработке внешний вид и поведение определенных элементов могут отличаться от платформы к платформе. Однако такое случается нечасто, и даже если проблема возникает, ее несложно исправить, если есть разработчики, знакомые с родными языками.
Mix — смешать, но не взбалтывать
Помимо недостатков, разработка интерфейсов в многоплатформенных фреймворках имеет большие преимущества — есть дополнительные бонусы. Например, благодаря активной поддержке Microsoft уже существует React Native Desktop, который позволяет написать приложение для Windows, опять же основываясь только на JS. Кстати, до определенной версии рабочий стол Skype был реализован именно в React Native.
Flutter активно развивает веб-направление, позволяющее создавать браузерные приложения. Мы уже проверили на практике, что этот подход работает — как на настольных компьютерах, так и на мобильных телефонах. Но, конечно, обращение к низкоуровневым компонентам не поддерживается — это относится к гироскопу, компасу и другому оборудованию.
Например, британский сервис Moneypex разработал свои приложения. Они используют Flutter для разработки всех своих приложений, включая веб-приложения.
Внешний облик и разные платформы
В целом, большинство разработок в моей команде кроссплатформенные, но все больше и больше набирается нативных разработчиков. Дело в том, что уже существует множество библиотек, и кроссплатформенная разработка занимает меньше времени, чем программирование приложения дважды на двух разных языках. Например, была подана заявка на отель «Лучано».
В конце концов, большинство приложений — это клиентские модули, которые отображают часть веб-страниц и предлагают довольно простые функции; в этом случае просто нет причин использовать нативную разработку.
Между тем, гораздо быстрее и проще закодировать небольшие дополнения или исправить что-то в самих фреймворках на родном языке, чем делать всю работу на родном языке с нуля. Действительно, эффективная мобильная разработка сегодня требует использования фреймворков для увеличения скорости и снижения стоимости проекта, а также знания всех родных языков для реализации низкоуровневой поддержки и работы с ними.