Многие ошибочно полагают, что PhoneGap это некая единая система. Однако, существует три различные платформы — Cordova (CLI), Phonegap (CLI) и PhoneGap Build. Каждая имеет свои особенности и мелкие вариации.


История


PhoneGap был создан примерно в 2009 году внутри канадского стартапа Nitobi, как среда с открытым исходным кодом, которая позволяла получить доступ к нативным функциям устройства из встроенного webview. Целью проекта было обеспечить возможность построения мобильных приложений исключительно на веб-технологиях (HTML5/CSS и JavaScript), но с возможностью вызова нативного кода.

В 2011 году Adobe приобрели Nitobi и все права на PhoneGap. Исходный код ядра был передан Apache Foundation.
Этот исходный код остался открытым, но ему понадобилось новое имя. После пары неудачных попыток, в конце концов было выбрано «Cordova» – по названию улицы, на которой был расположен офис Nitobi.

Возможности


По своей сути, Cordova предлагает простой, но мощный API для вызова машинного кода из JavaScript'а. Это означает, что вы можете передавать любые данные из WebView на само устройство.
Многие не совсем правильно понимают этот момент. Cordova дает доступ к низкоуровневому API, с помощью простых плагинов (например, для доступа к камере и компасу). Поэтому, когда кто-то говорит, что Cordova не может делать то, что могут нативные приложения, он ошибается. Единственным ограничением являются плагины, доступные в настоящее время, и ваше желание и способности в написании недостающих плагинов.

Для работы с Cordova нужно устанавливать SDK мобильных платформ. Эту проблему решает PhoneGap Build — облачный сервис, который компилирует ваш HTML5 в готовые приложения без головной боли поддержки нативных SDK.

Разница


Cordova — это фреймворк с открытым кодом, которым управляет Apache. PhoneGap — это Cordova + инфраструктура от Adobe. Можно рассматривать Cordova как движок, который питает PhoneGap, подобно тому, как WebKit — это движок, который питает Safari, или Blink — Chrome.

1. Cordova это OpenSource, а PhoneGap принадлежит Adobe.
2. Кроме разных имен пакетов, у PhoneGap и Cordova, разная документация.
3. При выходе новых версий ОС (например iOS 64-bit), Cordova обновляется быстрее, чем PhoneGap.
4. У Cordova нет облачного сборщика проектов.

Что выбрать?


Если вы не хотите заморачиваться с командной строкой, или вам нужна интеграция с облаком, выбирайте Phonegap Build. В остальных случаях, выбирайте Cordova CLI.
Главное, что бы вы ни выбрали, не смешивайте технологии в одном проекте. Это внесет большой беспорядок.

Комментарии (18)


  1. maxru
    11.12.2015 13:32
    +2

    А теперь вопрос — как в cordova-app сделать нормальную работу в фоновом режиме? :)
    «Нормальную» — означает не постоянно долбить телефон хаком и высаживать батарею, а вполне себе нативно.


    1. zapolnoch
      11.12.2015 13:53
      +1

      Cordova это WebView (мини-браузер) и набор самых что ни на есть нативных (Java, Objective-C) плагинов, которые передают данные между устройством и WebView. Я не понимаю, что может помешать вам написать нативный фоновый режим на Java и обернуть его в Кордова-плагин.


      1. thelongrunsmoke
        11.12.2015 14:08
        +3

        Чтобы от такого плагина был толк, он должен быть кроссплатформенным, а тогда теряется весь смысл использовать эти «зоопарки багов». Мало того, обертка плагина не универсальна. Если он работает при локальном билде PhoneGap, то на PhoneGap Build, скорее всего, не заработает. Плюс WebView, по понятным причинам, самый медленный элемент любой платформы.


        1. zapolnoch
          11.12.2015 17:24
          -8

          Многие выбирают PhoneGap не из-за кросплатформенности, а потому что им проще и привычнее строить View с помощью веб-технологий (HTML/CSS). Я знаю Java и могу писать на нем, но построение даже простейшего UI под Android это боль и слезы.
          Не случайно разработка на Android стоит на 30% дороже, чем на iOS. Это потому что iOS-разработчики строят UI в WYSIWYG, а Android-разработчики залипают в своем XML на многие часы.


          1. kivsiak
            11.12.2015 19:55

            Вы заблуждаетесь в каждом из тезисов, за исключением цены разработчика.


      1. maxru
        11.12.2015 15:03
        +1

        В таком случае мне проще написать два нативных скелета с геотрекингом и фоновым режимом и воткнуть в него WebView.
        PhoneGap/Cordova в таком случае вообще не нужны.


        1. IvanTheCrazy
          13.12.2015 10:09
          +1

          Для геотрекинга есть отличный плагин. iOS и Android точно поддерживается и превосходно работает.


  1. ZoomLS
    11.12.2015 15:50

    А возможно сделать html5-приложение для Android без сторонних библиотек(вроде Cordova), а используя стандартное SDK?


    1. IL_Agent
      11.12.2015 16:42

      Смотря что понимать под «html5-приложением». Можно взять WebView и отображать в нём всё, что душе угодно.


      1. ZoomLS
        11.12.2015 18:16

        Скорее всего это оно, да.


    1. zapolnoch
      11.12.2015 17:34
      +1

      Да, можно. Закидываете HTML5-файлы в Активы, и отображаете их в WebView:

      webView.loadUrl("file:///android_asset/www/index.html");


      1. ZoomLS
        11.12.2015 18:46

        Вот что-то вроде того. Спасибо!


  1. funnybanana
    12.12.2015 20:27

    Пробовал писать небольшое приложение на PhoneGap — по сути одна html страничка которая подгружает всякие графики… но в фоне программа работать нормально не захотела…
    НО!
    писать всё это было так быстро и легко что всё же стоит отдать должное разработчикам.


    1. DmitrySolomennikov
      13.12.2015 10:12

      Cordova — замечательный инструмент, у которого, впрочем, есть свои ограничения.

      Во-первых, очень плохо с отладкой. Если вы допустили ошибку в JS-коде, приложение молча перестает работать. Понять что происходит можно только со строгой дисциплиной — одно изменение в коде, затем проверка. Еще помогает перед запуском пропустить код через JSLint, он ловит синтаксические ошибки.

      Я знаю, что можно запустить код в браузере. Однако, и это во-вторых, не все плагины работают в режиме браузера. Так, например, не работает SQLite, поэтому тестирование можно осуществлять только на реальном устройстве или в эмуляторе, что не очень удобно. Кроме того, в некоторых случаях незначительно различается поведение кода на эмуляторе и на устройстве, также местами различается результат верстки HTML.

      Поэтому выбирать Cordova для относительно сложных приложений, требующих чего-то большего, чем просто HTML+JS, нужно с осторожностью.


      1. lega
        13.12.2015 13:40
        +3

        Во-первых, очень плохо с отладкой.
        Я тоже так думал пока не попробовал удаленную отладку (для Android 4.4+)
        Просто запускаете приложение на телефоне, а в браузере на компьютере можно видеть все логи, делать точки останова, дебажить, менять переменные, править DOM код на ходу.


      1. Shannon
        15.12.2015 03:48

        Еще для относительно сложных приложений можно использовать Visual Studio, там в последних версиях есть «Приложения Apache Cordova» и всякие возможности для отладки


  1. wartur
    15.12.2015 14:30

    Спасибо за статью. Быстро разобрался что к чему. Я думаю было бы классно написать статью.

    «Быстрое введение в разработку мобильных приложений для web-разработчиков», где сразу же было бы написано что к чему, сравнение одного с другим и как начать, хотя как начать не обязательно там все ясно — переходим на нужный сайт и курим доки


    1. Shannon
      15.12.2015 23:45

      Если именно быстрое введение, то — habrahabr.ru/post/257889 и уже через 10 минут опробовать результат. Разве что Visual Studio удобнее по части вариаций сборки и возможностей, но для попробовать как можно быстрее Intel XDK подойдет лучше

      В статье небольшая часть информации уже устарела, Framework7 исправил и добавил много чего, в том числе появилась полноценная поддержка material design с правильной реализацией переключения интерфейсов.
      И если для андроида есть возможность использовать CrossWalk для ускорения, то для ios тоже появился плагин github.com/Telerik-Verified-Plugins/WKWebView который заменяет встроенный стандартный webview на улучшенный WKWebView, с лучшей производительностью и прочими плюсами, доступный с ios 8