应该在config.xml文件中声明一个phonegap插件?

我是手机开发的新手,所以我有几个问题:

1)我正在使用加速计插件。 我阅读手册,我需要在config.xml文件中声明插件才能使用它。 但是,我注意到,即使我从config.xml中删除声明

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

加速度计仍然工作。

所以我想问你,如果在phonegap 3.0.0版本中,config.xml的使用已经过时了。 如果是这种情况,绑定发生在哪里?

2)我使用android平台来构build应用程序。 在项目结构中有三个不同内容的config.xml文件:

  • a)在assets / www / phonegap-app-hello-world-3.0.0 / www / config.xml中
  • b)在assets / www / phonegap-app-hello-world-3.0.0 / config.xml中
  • c)在res / xml / config.xml中

他们每个人的用途是什么? 我想在哪里声明我的插件? 我在res / xml / config / xml文件中做了

谢谢

我很确定你仍然可以使用插件的原因是因为你编辑了错误的config.xml或者没有运行cordova命令行工具来将你的改变传播到正确的config.xml文件,应用程序。

在Cordova 3.x项目的不同位置有多个config.xml文件。 我会尽量给你一个文件的不同位置的概述,以及你应该如何与之交互。 请记住,这是使用CLI( 命令行界面 )时发生的情况 – 我通过键入以下命令来生成此目录结构:

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

或者在Cordova 3.1之前,将最后一行replace为:

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

如果您只使用平台级别的shell脚本来构build应用程序(我们在Cordova 2.X中做的“旧”方式),您通常可以使用相同的工作stream程,但需要使用Plugman来pipe理插件 。 (我们正在logging这两种不同的“工作stream程”)。

首先,当您使用cordova create MyApp创build一个应用程序来cordova create MyApp ,它将创build一个空的项目结构,如下所示:

 /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/文件进行所有更改,这是“跨平台”源代码。 无论在这个文件夹中,当你使用命令行工具(无论是/assets/www for Android还是/www/ for iOS),通常都会被复制并传播到平台级www文件夹。 这样,您只需要为您的应用程序提供一个源文件夹 – 这是您在版本控制下应该拥有的文件夹。 你想要的任何应用程序范围的configuration更改应该放置在这个位置的config.xml文件; 稍后当您使用这些工具时,此config.xml文件将被复制(并且有时会被特定于平台的configuration信息所修改)到每个应用程序的相应位置,如/platforms/android/res/xml/config.xml android )或/platforms/ios/AppName/config.xml (适用于iOS)。

假设您想通过inputcordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git来添加加速插件,请cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git 。 如果您在此命令之后运行diff,则会看到以下文件已被更改或添加:

plugins / org.apache.cordova.network-information / – 这个新文件夹包含所有插件元信息和代码,包括网页和本地代码,用于每个支持的平台

plugins / android.json和plugins / ios.json – 这两个文件现在都已经被编辑,包含对networking信息插件的引用。 这是你将看到JSON的config-munge位。 当你添加更多的插件,这个文件将不断增长,以引用所有的插件。 这个文件告诉命令行工具需要replace哪些代码以及哪些文件。 例如,在添加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来说,这将是不同的,因为应用程序级别的configuration文件位于iOS上的不同位置!),并且还要求它写入android.permission.ACCESS_NETWORK_STATE权限移植到AndroidManifest.xml中(因为没有必要的权限,所以你不会在iOS上find这样的东西)(顺便说一下,在这个插件的plugin.xml文件中定义了写入每个json文件的内容文件。)

platforms / android / AndroidManifest.xml – CLI工具负责将在插件的xml文件中定义的权限添加到AndoridManifest中。 是的,这发生在你做cordova plugin add 。 这些权限直接从plugins / android.json文件中的任何内容复制而来。 当您使用插件时,这些权限也会被删除。 但是,编辑这些文件是聪明的,因为您可以将自定义的东西添加到AndroidManifest.xml中,并且它们将保留。

platform / android / assets / www / cordova_plugins.js – 这个文件被埋在了构成你的最终应用的html资源中 – 这些资源(在/ platforms /中几乎任何东西)不应该被你编辑,因为它们将被replace通过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.connectionnavigator.network.connection将映射到plugins/org.apache.cordova.network-information/www/network.js包含的代码。

platforms / android / res / xml / config.xml – 这是Android平台级别的config.xml文件。 这个文件是由CLI工具创build的。 在顶层config.xml(/MyApp/www/config.xml)中写入的许多信息将被复制到这里,但不是全部(还有一些额外的东西,我不确定在哪里额外的东西来自于。)这是Android的运行你的应用程序时,它需要检查您的configuration数据读取的文件。 例如,Cordova Android代码将使用它来查看哪些插件已安装以及哪些本机类映射到哪些名称空间。 我认为你可以编辑这个的唯一方法是使用上面提到的/ merges /文件夹。

platforms / ios / {AppName} .xcodeprojcj / project.pbxproj – AndroidManifest.xml的iOS等价物

platforms / ios / {AppName} /config.xml – 这是iOS平台级别的config.xml文件。 看看它是如何在不同的地方比在Android上? (例如,不在/res/xml/config.xml中?)这个文件自动被CLI更新,你不应该碰它。

平台/ ios / www / cordova_plugins.js – 同一个文件存在于Android(但在不同的位置),并具有相同的目的:帮助cordova在运行时加载您的插件时,有人使用的应用程序

我认为这几乎是描述了cordova项目中使用的所有文件和文件夹。

希望现在你可以看到你应该只是在编辑/www/config.xml文件。 这个文件将被用来构build/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

我想唯一剩下要弄清楚的是如何编辑特定于平台的configuration文件; 例如,你如何编辑AndroidManifest.xml文件? 那么事实certificate,你可以直接编辑/platforms/android/AndroidManifest.xml文件 – 这个CLI足够聪明,当它自动添加或删除插件权限时,不会擦除你的自定义项。 所以说,由于某种原因,您需要支持比Cordova支持的Android版本更低的版本,您可以更改该对象,并且通过cordova plugin add|rm {id}调用将会持续。

我希望澄清事情,随时提出任何问题!

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

自从cordova5.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

来源:

Config.xml主要由phonegap构build使用。

如果你使用phonegap 3,你应该使用CLIpipe理你的插件:

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

你应该编辑的唯一的config.xml是/www/config.xml,当你使用下面的命令build立你的项目时,其他的会自动从这个文件中生成:

 $ phonegap build ios 

您可能想要检查一下accelermator插件: Phonegap Acceleramator插件 。

你也可以在那里search你需要的任何插件