Я почти уверен, что вы все еще можете использовать этот плагин, потому что вы либо отредактировали неправильный 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