Должен ли быть объявлен плагин phonegap в файле config.xml?

Я новичок в разработке телефонных разговоров, поэтому у меня есть пара вопросов:

1) Я использую плагин акселерометра. Я прочитал в руководстве, что мне нужно объявить плагин в файле config.xml, чтобы использовать его. Однако я заметил, что даже если я удалю объявление из config.xml

<feature name="Accelerometer">
    <param name="android-package" value="org.apache.cordova.AccelListener" />
</feature>

акселерометр все еще работает.

Поэтому я хотел бы спросить вас, устарело ли использование config.xml в версии phonegap 3.0.0. Если это так, то где происходит привязка?

2) Я использую платформу Android для создания приложения. В структуре проекта есть три файла config.xml с разным содержанием:

  • а) В файле assets / www / phonegap-app-hello-world-3.0.0 / www / config.xml
  • б) В файле assets / www / phonegap-app-hello-world-3.0.0 / config.xml
  • в) В файле res / xml / config.xml

Какая польза от каждого из них? Где я предполагаю объявить свой плагин? Я сделал это в файле res / xml / config / xml

Спасибо


person panipsilos    schedule 01.10.2013    source источник


Ответы (5)


Я почти уверен, что вы все еще можете использовать этот плагин, потому что вы либо отредактировали неправильный config.xml, либо не запустили инструменты командной строки Cordova для распространения ваших изменений в правильный config.xml файл, который фактически используется приложением.

В проекте Cordova 3.x есть несколько config.xml файлов в разных местах. Я постараюсь дать вам обзор различных мест расположения файлов и того, как вы должны с ними взаимодействовать. Имейте в виду, что именно это происходит при использовании интерфейса командной строки (Интерфейс командной строки) - я создал эту структуру каталогов, набрав:

cordova create {MyApp}
cordova platform add android ios
cordova plugin add org.apache.cordova.network-information

Или до версии Cordova 3.1 замените последнюю строку на:

cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git

Если для создания приложения вы используете только сценарии оболочки на уровне платформы («старый» способ, который мы использовали в Cordova 2.X), вы обычно можете использовать тот же рабочий процесс, но для этого потребуется Используйте Plugman для управления подключаемыми модулями. (Мы находимся в процессе документирования этих двух разных «рабочих процессов».)

Во-первых, когда вы создаете приложение с cordova create MyApp, оно создаст пустую структуру проекта, подобную этой:

/myApp/
        /www/           # This is where your "cross-platform' files go.
                        # The build tools copy these files over to the correct
                        # asset folder for each platform, like /assets/www/ for
                        # android or just /www/ for iOs. This is where you should
                        # be doing most/all of your work and is what should
                        # probably be version controlled.
        /platforms/
            /android/   # These will only appear after `cordova platform add`
            /ios/       # You should generally not touch these file as they are
                        # recreated quite often, although changes will persist.
        /plugins/
            /android/   # These will only appear after `cordova plugin add`. They
                        # pretty much just contain the native and web plugin code
                        # for all platforms that a plugin supports.
            /ios/
        /merges/        # This is where you can place platform-specific code that
                        # you write that will get merged in with your cross
                        # platform source, see the "customize each platform"
                        # section of: http://cordova.apache.org/docs/en/3.0.0/guide_cli_index.md.html

Вы должны внести все свои изменения в файлы в /www/, который является «кроссплатформенным» исходным кодом. Все, что находится в этой папке, обычно копируется и распространяется в папку www уровня платформы, когда вы используете инструменты командной строки (будь то /assets/www для Android или просто /www/ для iOS). Таким образом, вам понадобится только одна исходная папка для вашего приложения - это папка, которая должна находиться под контролем версий. Любые изменения конфигурации всего приложения, которые вы хотите, должны быть внесены в файл config.xml, размещенный в этом месте; позже, когда вы воспользуетесь инструментами, этот config.xml файл будет скопирован (и иногда изменен с учетом информации о конфигурации для конкретной платформы) в соответствующее место для каждого приложения, например /platforms/android/res/xml/config.xml (для Android) или /platforms/ios/AppName/config.xml (для iOS).

Допустим, вы хотите добавить плагин ускорения, набрав cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git. Если вы запустите сравнение после этой команды, вы увидите, что следующие файлы были изменены или добавлены:

plugins / org.apache.cordova.network-information / - эта новая папка содержит всю метаинформацию и код плагина, включая веб-код и собственный код, для каждой поддерживаемой платформы.

plugins / android.json и plugins / ios.json. Оба этих файла были отредактированы и теперь содержат ссылку на подключаемый модуль сетевой информации. Здесь вы увидите бит config-munge JSON. По мере добавления дополнительных плагинов этот файл будет постоянно увеличиваться, чтобы ссылаться на все из них. Этот файл сообщает инструментам командной строки, какой код нужно заменить и в каких файлах. Например, после добавления подключаемого модуля cordova-plugin-network-information вы увидите это в /plugins/android.json:

{
        "prepare_queue": {
            "installed": [],
            "uninstalled": []
        },
        "config_munge": {
            "res/xml/config.xml": {
                "/*": {
                    "<feature name=\"NetworkStatus\"><param name=\"android-package\" value=\"org.apache.cordova.networkinformation.NetworkManager\" /></feature>": 1
                }
            },
            "AndroidManifest.xml": {
                "/*": {
                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />": 1
                }
            }
        },
        "installed_plugins": {
            "org.apache.cordova.network-information": {
                "PACKAGE_NAME": "io.cordova.hellocordova"
            }
        },
        "dependent_plugins": {}
    }

Это указывает сценариям записать имя функции в res/xml/config.xml (опять же, для iOS это будет другое, поскольку файл конфигурации уровня приложения находится в другом месте на iOS!), А также указывает ему написать android.permission .ACCESS_NETWORK_STATE в AndroidManifest.xml (вы не найдете ничего подобного в iOS, поскольку разрешения не требуются). (Кстати, то, что записывается в каждый из этих json-файлов, определяется в подключаемом модуле плагина. xml файл.)

platform / android / AndroidManifest.xml - инструменты интерфейса командной строки позаботились о добавлении любого разрешения, определенного в xml-файле плагина, в AndoridManifest. Да, такое бывает, когда делаешь cordova plugin add. Эти разрешения напрямую копируются из файла plugins / android.json. Эти разрешения также удаляются, когда вы запускаете плагин. Однако редактирование этих файлов осуществляется разумно, так как вы можете добавлять пользовательские элементы в AndroidManifest.xml, и они сохранятся.

platform / android / assets / www / cordova_plugins.js - этот файл похоронен внутри html-ресурсов, которые будут составлять ваше окончательное приложение - эти ресурсы (практически все, что находится в / platform /) не должны редактироваться. вами, потому что они будут довольно часто заменяться инструментами CLI. Этот файл используется Cordova во время выполнения для загрузки кода плагина, который вы добавили; он также заботится о сопоставлении пространств имен JavaScript с фактическими файлами (это объявление "clobbers"). Например, я вижу:

{
    "file": "plugins/org.apache.cordova.network-information/www/network.js",
    "id": "org.apache.cordova.network-information.network",
    "clobbers": [
        "navigator.connection",
        "navigator.network.connection"
    ]
}

это означает, что в коде вашего приложения navigator.connection и navigator.network.connection будут соответствовать коду, содержащемуся в plugins/org.apache.cordova.network-information/www/network.js.

platform / android / res / xml / config.xml - это файл config.xml уровня платформы для Android. Этот файл создается инструментами CLI. Большая часть информации, которую вы пишете в файле config.xml верхнего уровня (/MyApp/www/config.xml), будет скопирована сюда, но не вся (и есть еще кое-что, я не совсем уверен, где дополнительные материалы поступают из.) Это файл, который читается Android, когда он запускает ваше приложение, и ему необходимо проверить ваши данные конфигурации. Например, код Cordova Android будет использовать это, чтобы увидеть, какие плагины установлены и какие собственные классы сопоставлены с какими пространствами имен. Я думаю, что единственный способ отредактировать это - использовать папку / merges /, о которой я упоминал выше.

platform / ios / {AppName} .xcodeprojcj / project.pbxproj - эквивалент AndroidManifest.xml для iOS.

platform / ios / {AppName} /config.xml - это файл config.xml уровня платформы для iOS. Посмотрите, как это работает в другом месте, чем на Android? (например, не в /res/xml/config.xml?) Этот файл автоматически обновляется интерфейсом командной строки, и вы не должны его трогать.

platform / ios / www / cordova_plugins.js - тот же файл существует на Android (но в другом месте) и имеет ту же цель: помочь Кордове загрузить ваши плагины во время выполнения, когда кто-то использует приложение

Я думаю, что это в значительной степени описывает все файлы и папки, которые используются в проекте Cordova.

Надеюсь, теперь вы видите, что на самом деле вам нужно редактировать только файл /www/config.xml. Этот файл будет использоваться для создания /platforms/android/res/xml/config.xml и /platforms/ios/{AppName}/config.xml, которые используются Cordova при запуске упакованного приложения. Части этого файла будут использоваться для редактирования файлов AndroidManifest.xml и project.pbxprojc (для Android и iOS соответственно).

Это объясняет, почему вы все еще могли использовать акселерометр в своем приложении даже после удаления строк <feature name="Accelerometer"> - они просто копировались в config.xml уровня платформы из основного config.xml всего приложения.

Думаю, осталось только выяснить, как можно редактировать файлы конфигурации для конкретной платформы; например, как отредактировать файл AndroidManifest.xml? Что ж, оказывается, вы можете просто редактировать /platforms/android/AndroidManifest.xml файл напрямую - интерфейс командной строки достаточно умен, чтобы не стирать ваши настройки, когда он автоматически добавляет или удаляет разрешения для плагинов. Скажем, по какой-то причине вам нужно было поддерживать более низкую версию Android, чем та, которую поддерживает Кордова, вы можете просто изменить объект, и он будет сохраняться, несмотря на ваши cordova plugin add|rm {id} вызовы.

Я надеюсь, что это проясняет ситуацию, не стесняйтесь задавать дополнительные вопросы!

person MBillau    schedule 01.10.2013
comment
Этот ответ ЭПИЧНЫЙ. Спасибо - это нам безумно помогло - person obie; 30.10.2013
comment
@obie классно, я рад, что это помогло! Я пытаюсь включить большую часть этой информации в настоящую документацию, поэтому, если вы думаете, что я что-то упустил или должен уточнить, сообщите мне! - person MBillau; 30.10.2013
comment
1. Файл /www/config.xml теперь перемещен в корневой каталог /config.xml в последней версии Cordova 3.4.0-0.1.3. - person kumarharsh; 04.04.2014
comment
2. Есть ли способ указать изменения, которые я хочу внести в файл AndroidManifest.xml, непосредственно в файл /config.xml, и изменения будут автоматически добавлены в AndroidManifest.xml при выполнении cordova platform add android? - person kumarharsh; 04.04.2014
comment
Я чуть не заплакал, когда увидел этот ответ :) ТАК красиво объяснил и все, что меня смущало. Большое спасибо! - person Aleks; 16.05.2014
comment
Я использую cordova prepare, и он ДЕЙСТВИТЕЛЬНО заменяет все, что у меня есть в моем androidManifest.xml, так как же это обойтись? - person Mirko; 23.09.2014
comment
при использовании cordova plugin add ... они не добавляются в ваш глобальный config.xml. Если вы используете сборку Phonegap, она ожидает <gap:plugin> тегов в вашем глобальном config.xml, и, насколько я понимаю, вам придется добавлять их вручную. Прочтите docs.build.phonegap.com/en_US/configuring_plugins.md.html - person commonpike; 06.10.2014
comment
чувак. вы даете лучшие ответы. просто хотел это сказать! - person wle8300; 21.08.2015
comment
Спасибо @ williamle8300. Я, наверное, должен обновить этот пост, так как прошло уже несколько лет. Я давно не использовал Кордову, может, стоит отметить его как ответ сообщества, чтобы люди могли его обновить? - person MBillau; 21.08.2015
comment
Чувак. Кордове необходимо обновить свои документы! Если бы только у них были такие документы, которые держали бы в руках, это решило бы проблему более восходящим способом. Не стучать по работодателю или что-то в этом роде. Это повысит удобство использования Phonegap для потенциальных пользователей. - person wle8300; 21.08.2015

Начиная с cordova 3.5, мы можем сохранять плагины в config.xml файле.

<feature name="Network Information">
    <param name="id" value="org.apache.cordova.network-information" />
    <param name="version" value="0.2.10" />
</feature>

Следующая команда получит плагины, определенные в config.xml.

cordova restore plugins --experimental

Следующая команда запишет ваши текущие установленные плагины в config.xml (3.5):

cordova save plugins --experimental

В 5.x и новее:

cordova plugin save

Источник: http://cordova.apache.org/news/2014/07/10/tools-release.html

person Florent Valdelievre    schedule 03.08.2014

Начиная с Cordova 5.0, да.

<?xml version='1.0' encoding='utf-8'?>
    ...
    <plugin name="cordova-plugin-console" spec="^1.0.0" />
    ...
</ xml>

Плагины массового сохранения в существующем проекте:

$ cordova plugin save

При новой установке (или после чистой) вы можете добавить все плагины с помощью:

$ cordova prepare

Добавление / обновление / удаление также можно выполнить через cli:

$ cordova plugin add <plugin[@<version>] | directory | git_url> --save
$ cordova plugin update <plugin[@<version>] | directory | git_url> --save
$ cordova plugin remove <plugin> --save

Массового обновления пока нет. Вы можете удалить каталог plugins, а затем запустить $cordova prepare.

Источники:

person Cédric M.    schedule 18.08.2015
comment
Существует инструмент для обновления плагинов: github.com/Rareloop/cordova-plugin-update - person Cédric M.; 18.08.2015

Config.xml в основном используется при сборке телефонных разговоров.

Если вы используете phonegap 3, вам следует управлять своими плагинами с помощью интерфейса командной строки:

$ phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git

Единственный config.xml, который вы должны отредактировать, - это /www/config.xml, остальные автоматически генерируются из этого файла, когда вы создаете свой проект, используя:

$ phonegap build ios
person Sam T    schedule 01.10.2013
comment
Привет, Сэм, обязательно скачаю плагин перед его использованием. Но у меня вопрос: почему плагин все еще работает, даже если я не включаю отображение в файл config.xml? ‹Имя функции = акселерометр› ‹имя параметра = значение пакета android = org.apache.cordova.AccelListener /› ‹/feature› - person panipsilos; 01.10.2013
comment
Я думаю, это потому, что только сервис phonegapbuild должен читать ваш config.xml, чтобы узнать, какие плагины у вас есть. Если вы просто строите локально, вы можете игнорировать это. - person Sam T; 01.10.2013

Вы можете проверить это на наличие подключаемого модуля ускорителя: подключаемый модуль Phonegap Acceleramator.

Также вы можете найти там любой плагин, который вам нужен

person Hazem Hagrass    schedule 01.10.2013
comment
Привет, Хазем, возможно, название вопроса вводит в заблуждение. Я могу использовать плагины для телефонных разговоров. На самом деле мой вопрос заключается в том, нужно ли объявлять плагин в файле config.xml. Я заметил, что даже когда я ничего не объявляю в файле config.xml, плагин все равно работает. - person panipsilos; 01.10.2013
comment
Да, у меня есть ваш вопрос, но проблема в том, что телефонный разговор также читает плагины из файла cordova_plugins. - person Hazem Hagrass; 01.10.2013
comment
Это может быть связано с тем, что плагины были автоматически скопированы в папку Android, но не в папку iOS. Вы можете проверить эту ссылку: stackoverflow.com/questions/18301518/ - person Hazem Hagrass; 01.10.2013
comment
Кстати, файл config.xml в основном используется при сборке phonegap. - person Hazem Hagrass; 02.10.2013
comment
Спасибо! Есть ли способ сделать 'cordova plugin add ALL_NEEDED_PLUGINS'? Проверка плагинов / * в scm, похоже, не работает должным образом, поэтому кажется, что при работе в команде каждый должен повторять «cordova plugin add ...» для каждого плагина. - person s.Daniel; 21.02.2014
comment
Привет @ s.Daniel, да, есть способ - создать плагин зависимостей, в котором перечислены все необходимые, и установить его, см .: github.com/apache/cordova-mobile-spec/blob/master/ - person MBillau; 26.11.2014