首页 文章

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

提问于
浏览
44

我是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 回答

  • -2

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

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

    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
    

    如果您只使用平台级shell脚本来构建应用程序(我们在Cordova 2.X中执行的方式),您通常可以使用相同的工作流程,但需要Use Plugman to Manage Plugins . (我们正在记录这两个不同的"workflows" . )

    首先,当您使用 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/ 中的文件进行所有更改,这是"cross platform"源代码 . 当您使用命令行工具(无论是Android的 /assets/www 还是iOS的 /www/ )时,此文件夹中的任何内容通常都会被复制并传播到平台级别 www 文件夹 . 这样,您只需要一个应用程序的单个源文件夹 - 这是您在版本控制下应具有的文件夹 . 您想要的所有应用程序范围的配置更改都应该放在此位置的 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 and 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": {}
        }
    

    这告诉脚本将功能名称写入 res/xml/config.xml (同样,对于iOS,这将是不同的,因为应用程序级别配置文件位于iOS上的不同位置!),并且还告诉它将 android.permission.ACCESS_NETWORK_STATE 权限写入AndroidManifest.xml (你赢了't find anything like this on iOS since no permissions are necessary.) (By the way, what gets written to each of these json files is defined in the plugin'的plugin.xml文件 . )

    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"
        ]
    }
    

    这意味着在您的应用代码中, navigator.connectionnavigator.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/.xcodeprojcj/project.pbxproj - iOS等效于AndroidManifest.xml

    platforms/ios//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} 调用时持续存在 .

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

  • 124

    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

  • 8

    Cordova 5.0, yes .

    <?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 .

    资料来源:

  • 22

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

    如果您使用的是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
    
  • 5

    您可能需要检查此加速器插件:Phonegap Acceleramator plugin .

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

相关问题