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

pan*_*los 44 phonegap-plugins cordova cordova-3

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

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

<feature name="Accelerometer">
    <param name="android-package" value="org.apache.cordova.AccelListener" />
</feature>
Run Code Online (Sandbox Code Playgroud)

加速度计仍然有效.

所以我想问你,如果在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文件中完成了它

谢谢

MBi*_*lau 124

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

config.xmlCordova 3.x项目中的不同位置有多个文件.我将尝试向您概述文件的不同位置以及您应如何与它们进行交互.请记住,当您使用CLI(命令行界面)时会发生这种情况- 我通过键入以下内容生成了此目录结构:

cordova create {MyApp}
cordova platform add android ios
cordova plugin add org.apache.cordova.network-information
Run Code Online (Sandbox Code Playgroud)

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

cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git
Run Code Online (Sandbox Code Playgroud)

如果您只使用平台级shell脚本来构建应用程序(我们在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
Run Code Online (Sandbox Code Playgroud)

您应该对文件进行所有更改/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.如果您在此命令后运行diff,您将看到以下文件已被更改或添加:

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

plugins/android.json和plugins/ios.json - 现在已经编辑了这两个文件以包含对网络信息插件的引用.在这里您将看到JSON的config-munge位.当您添加更多插件时,此文件将不断增长以引用所有插件.该文件告诉命令行工具需要替换哪些代码以及哪些文件.例如,在添加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": {}
    }
Run Code Online (Sandbox Code Playgroud)

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

platforms/android/AndroidManifest.xml - CLI工具负责将插件的xml文件中定义的任何权限添加到AndoridManifest.是的,当你出现这种情况cordova plugin add.这些权限直接从plugins/android.json文件中的任何内容复制.当你'插件'时,这些权限也会被删除.但是,编辑这些文件是智能的,因为您可以将自定义内容添加到AndroidManifest.xml,它们将保持不变.

platforms/android/assets/www/cordova_plugins.js - 此文件隐藏在构成最终应用程序的html资源中 - 这些资源(/ platforms /中的任何内容)都不应该由您编辑,因为它们将被替换通过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"
    ]
}
Run Code Online (Sandbox Code Playgroud)

这意味着在您的应用代码中,navigator.connection并且navigator.network.connection都将映射到包含在其中的代码plugins/org.apache.cordova.network-information/www/network.js.

platforms/android/res/xml/config.xml - 这是Android的平台级config.xml文件.此文件由CLI工具创建.您在顶级config.xml(/MyApp/www/config.xml)中编写的大量信息将在此处复制,但不是全部(并且还有一些其他内容,我不确定在哪里额外的东西来自.)这是Android在运行你的应用程序时读取的文件,它需要检查你的配置数据.例如,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会自动更新此文件,您不应该触摸它.

platforms/ios/www/cordova_plugins.js - Android上存在相同的文件(但位于不同的位置)并且具有相同的目的:当有人使用应用程序时,帮助Cordova在运行时加载插件

我认为这几乎描述了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">行之后您仍然可以在应用程序中使用加速度计- 它们只是从主app wide config.xml重新复制到平台级config.xml中

我想唯一要弄清楚的是你如何编辑特定于平台的配置文件; 例如,如何编辑AndroidManifest.xml文件?好吧,事实证明你可以直接编辑/platforms/android/AndroidManifest.xml文件 - CLI足够智能,在自动添加或删除插件权限时不会删除自定义.所以说出于某些原因你需要支持比Cordova支持的更低版本的Android,你可以只改变对象,它会在你的cordova plugin add|rm {id}通话中持续存在.

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

  • 这个回复是EPIC.谢谢你 - 它对我们来说非常有帮助 (19认同)
  • 当使用`cordova plugin add ...`时,它不会将这些添加到您的全局config.xml中.如果您正在使用Phonegap构建,它会在您的全局config.xml中使用`<gap:plugin>`标记,并且您必须手动添加它们,据我所见.阅读http://docs.build.phonegap.com/en_US/configuring_plugins.md.html (4认同)
  • 1.`/ www/config.xml`文件现在已移至最新的**Cordova 3.4.0-0.1.3中的根目录`/ config.xml`** (3认同)
  • 当我看到这个答案时,我几乎哭了:)很好地解释了所有我感到困惑的事情.非常感谢! (3认同)

Flo*_*vre 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>
Run Code Online (Sandbox Code Playgroud)

以下命令将获取config.xml中定义的插件

cordova restore plugins --experimental
Run Code Online (Sandbox Code Playgroud)

以下命令将在config.xml(3.5)中编写当前安装的插件:

cordova save plugins --experimental
Run Code Online (Sandbox Code Playgroud)

在5.x及更高版本中:

cordova plugin save
Run Code Online (Sandbox Code Playgroud)

资料来源:http://cordova.apache.org/news/2014/07/10/tools-release.html


Céd*_* M. 8

Cordova 5.0以来,是的.

<?xml version='1.0' encoding='utf-8'?>
    ...
    <plugin name="cordova-plugin-console" spec="^1.0.0" />
    ...
</ xml>
Run Code Online (Sandbox Code Playgroud)

现有项目的大量保存插件:

$ cordova plugin save
Run Code Online (Sandbox Code Playgroud)

在全新安装(或干净)之后,您可以添加所有插件:

$ cordova prepare
Run Code Online (Sandbox Code Playgroud)

添加/更新/删除也可以通过cli完成:

$ cordova plugin add <plugin[@<version>] | directory | git_url> --save
$ cordova plugin update <plugin[@<version>] | directory | git_url> --save
$ cordova plugin remove <plugin> --save
Run Code Online (Sandbox Code Playgroud)

暂时没有大规模更新.你可以删除plugins目录然后运行一个$cordova prepare.

资料来源:


Sam*_*m T 5

Config.xml主要由phonegap构建使用.

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

$ phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git
Run Code Online (Sandbox Code Playgroud)

您应编辑的唯一config.xml是/www/config.xml,其他的是在您使用以下项目构建项目时从该项自动生成的:

$ phonegap build ios
Run Code Online (Sandbox Code Playgroud)