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

时间:2013-10-01 09:21:18

标签: cordova phonegap-plugins cordova-3

我是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平台构建应用程序。在项目结构中,有三个具有不同内容的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文件中完成了它

谢谢

5 个答案:

答案 0 :(得分:124)

我非常确定您仍然可以使用该插件的原因是您编辑了错误的config.xml或者没有运行cordova命令行工具将您的更改传播到正确的{{1应用程序实际使用的文件。

Cordova 3.x项目中的不同位置有多个config.xml个文件。我将尝试向您概述文件的不同位置以及您应如何与它们进行交互。请记住,这是使用CLI时发生的情况(Command Line-interface) - 我通过输入以下内容生成了此目录结构:

config.xml

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

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

如果您只使用平台级shell脚本来构建应用程序(我们在Cordova 2.X中执行的方式),您通常可以使用相同的工作流程,但需要{ {3}}。 (我们正在记录这两个不同的工作流程&#34;。)

首先,当您使用cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git 创建应用时,它会创建一个如下的空项目结构:

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 中的文件进行所有更改,这是&#34;跨平台&#34;源代码。当您使用命令行工具时(无论是Android的/www/还是iOS的www),此文件夹中的任何内容通常都会被复制并传播到平台级/assets/www文件夹。这样,您只需要一个应用程序的单个源文件夹 - 这是您在版本控制下应具有的文件夹。您想要的任何应用程序范围的配置更改都应该放在此位置的/www/文件中;稍后当您使用这些工具时,此config.xml文件将被复制(有时会使用特定于平台的配置信息进行修改)到每个应用的适当位置,例如config.xml(适用于android)或{{1 (适用于iOS)。

假设您要通过键入/platforms/android/res/xml/config.xml来添加加速插件。 如果您在此命令后运行diff,您将看到以下文件已被更改或添加:

<强>插件/ org.apache.cordova.network信息/      - 此新文件夹包含每个支持的平台的所有插件元信息和代码,包括Web和本机代码

plugins / android.json和plugins / ios.json      - 现在已经编辑了这两个文件,以包含对网络信息插件的引用。在这里您将看到JSON的config-munge位。当您添加更多插件时,此文件将不断增长以引用所有插件。该文件告诉命令行工具需要替换哪些代码以及哪些文件。例如,在添加cordova-plugin-network-information插件后,您将在/platforms/ios/AppName/config.xml中看到:

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

这告诉脚本将功能名称写入/plugins/android.json(对于iOS,这将是不同的,因为应用程序级配置文件位于iOS上的不同位置!),并且还告诉它将 android.permission.ACCESS_NETWORK_STATE 权限写入AndroidManifest.xml(你不会在iOS上找到这样的东西,因为不需要任何权限。)(顺便说一下,写入这些内容的是什么json文件在插件的plugin.xml文件中定义。)

<强>平台/机器人/ AndroidManifest.xml中      - CLI工具负责将插件的xml文件中定义的任何权限添加到AndoridManifest。是的,当您执行{ "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": {} } 时会发生这种情况。这些权限直接从plugins / android.json文件中的任何内容复制。当您“删除”这些权限时,也会删除这些权限。一个插件。但是,编辑这些文件是智能的,因为您可以向AndroidManifest.xml添加自定义内容,它们将保持不变。

<强>平台/机器人/资产/网络/ cordova_plugins.js      - 这个文件隐藏在组成你的最终应用程序的html资源中 - 这些资源(几乎在/ platforms /中的任何东西)都不应该被你编辑,因为它们会被常用的CLI工具取代。 Cordova在运行时使用此文件来加载您添加的插件代码;它还负责将JavaScript命名空间映射到实际文件(这是&#34; clobbers&#34;声明。)例如,我看到:

res/xml/config.xml

这意味着,在您的应用代码中,cordova plugin add{ "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中包含的代码。

<强>平台/机器人/ RES / XML / config.xml中      - 这是Android的平台级config.xml文件。此文件由CLI工具创建。您在顶级config.xml(/MyApp/www/config.xml)中编写的大量信息将在此处复制,但不是全部(并且还有一些其他内容,我并不完全)确定附加内容的来源。)这是Android在运行您的应用程序时读取的文件,需要检查您的配置数据。例如,Cordova Android代码将使用它来查看安装了哪些插件以及哪些本机类映射到哪些命名空间。我认为你可以编辑它的唯一方法是使用我上面提到的/ merges /文件夹。

<强>平台/ IOS / {AppName的} .xcodeprojcj / project.pbxproj      - iOS等效于AndroidManifest.xml

<强>平台/ IOS / {AppName的} /config.xml      - 这是iOS的平台级config.xml文件。看看它与Android不同的地方? (例如,不在/res/xml/config.xml?)此文件会自动由CLI更新,您不应该触摸它。

<强>平台/ IOS /网络/ cordova_plugins.js      - Android上存在相同的文件(但位于不同的位置)并且具有相同的目的:帮助Cordova在运行时加载插件时有人使用该应用程序

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

希望您现在可以看到您实际上只应该编辑navigator.network.connection文件。此文件将用于构造plugins/org.apache.cordova.network-information/www/network.js/www/config.xml,当打包的应用程序运行时,Cordova将使用该文件。此文件的一部分将用于编辑AndroidManifest.xml和project.pbxprojc文件(分别用于Android和iOS)。

这就解释了为什么即使在删除/platforms/android/res/xml/config.xml行之后你仍然可以在你的应用程序中使用加速度计 - 它们只是从主app wide config.xml重新复制到平台级config.xml

我想唯一要弄清楚的是如何编辑特定于平台的配置文件;例如,如何编辑AndroidManifest.xml文件?好吧,事实证明你可以直接编辑/platforms/ios/{AppName}/config.xml文件 - CLI足够智能,在自动添加或删除插件权限时不会删除自定义项。因此,出于某种原因,您需要支持比Cordova支持的更低版本的Android,您只需更改对象,它就会在<feature name="Accelerometer">来电时保持不变。

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

答案 1 :(得分:22)

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

答案 2 :(得分:8)

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

来源:

答案 3 :(得分:5)

Config.xml主要由phonegap build使用。

如果您使用的是phonegap 3,则应使用CLI管理插件:

$ 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

答案 4 :(得分:-2)

你可能想检查一下加速器插件: Phonegap Acceleramator plugin

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