cordova Plugin.xml 详解

Plugin.xml

plugin.xml文件定义了你的插件所需的结构和设置。它有几个元素来提供有关你的插件的详细信息。

plugin

这个plugin元素是插件清单的顶级元素。

属性(类型) 描述
xmlns(string) Required该插件的命名空间,http://apache.org/cordova/ns/plugins/1.0。如果该文件包含来自其他名称空间,如要加入到Android中的情况下,AndroidManifest.xml文件标记的XML,这些命名空间也应包括在该元素。
id(string) Required A npm-style 标识符插件。
version(string) Required该插件的版本号. Semver syntax is supported.

例子:

    <?xml version="1.0" encoding="UTF-8"?>
    <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
     xmlns:android="http://schemas.android.com/apk/res/android"
    id="my-plugin-id"
    version="1.0.2">        

engines and engine

在<engines>元素的子元素指定此插件支持基于科尔多瓦的Apache框架版本。该CLI中止与任何插件,其目标项目不符合engines的约束非零代码。如果没有指定标签,则CLI尝试安装到指定的cordova项目目录。

属性(类型) 描述
name(string) Required 引擎的名称。以下是所支持的默认引擎:cordova,cordova-plugman,cordova-android,cordova-ios,cordova,blackberry10,cordova-wp8,cordova-windows,cordova-osx,windows-os,android-sdk (returns the highest Android api level installed),windows-sdk (returns the native windows SDK version),apple-xcode (returns the xcode version),apple-ios (returns the highest iOS version installed),apple-osx (returns the OSX version),blackberry-ndk (returns the native blackberry SDK version)您也可以除了默认的指定自定义框架。
version(string) Required 你的框架必须拥有安装的版本。 Semver语法支持
scriptSrc(string) 仅适用于自定义的框架 Required该脚本文件,告诉plugman自定义架构的版本。理想情况下,这个文件应该是你的插件目录的顶级目录中。
platform(string) 仅适用于自定义的框架 需要该平台的框架支持。您可以使用通配符*说支持所有的平台,像'android的一个管道字符指定多个

Examples:

<engines>
     <engine name="cordova-android" version="=1.8.0" />
</engines>

engines元件也可以使用'>','>='等,以避免重复指定模糊匹配,并且当底层的平台被更新,以减少维护。

<engines>
    <engine name="cordova-android" version=">=1.8.0" />
</engines>

在<engines>标签也对所有的cordova存在的主要平台默认的支持。指定科尔多瓦引擎标签意味着,在任何平台上cordova的所有版本都必须满足的引擎版本属性。你也可以列出特定平台及其版本,以覆盖包罗万象的cordova引擎:

<engines>
 <engine name="cordova" version=">=1.7.0" />
 <engine name="cordova-android" version=">=1.8.0" />
 <engine name="cordova-ios" version=">=1.7.1" />
</engines>

自定义框架例如:

<engines>
    <engine name="my_custom_framework" version="1.0.0" platform="android" scriptSrc="path_to_my_custom_framework_version"/>
    <engine name="another_framework" version=">0.2.0" platform="ios|android" scriptSrc="path_to_another_framework_version"/>
    <engine name="even_more_framework" version=">=2.2.0" platform="*" scriptSrc="path_to_even_more_framework_version"/>
 </engines>

name

name元素用于指定插件的名称。
Example:

 <name>Foo</name>

description

描述元素用于指定插件的描述。此元素不处理本地化。

Example:

<description>Foo plugin description</description>

author

author元素包含了插件作者的姓名。

Example:

<author>Foo plugin author</author>

keywords

keywords元素的内容包含逗号分隔的关键字来描述该插件。

<keywords>foo,bar</keywords>

license

此元素用于指定插件的许可证。PS:这里我也没有明白

Example:

<license>Apache 2.0 License</license>

asset

这个元素用来列出文件或目录被复制到cordova的应用程序的www目录。嵌套内的任何<asset>元素<platform>元素指定特定于平台的网络资源。

属性(类型) 描述
src(string) Required 凡文件或目录位于插件包,相对于plugin.xml的文件。如果文件没有在指定位置的src存在,CLI停止并反转安装过程,发出关于冲突的通知,并与非零代码退出。
target(string) Required 在该文件或目录应位于cordova应用程序,相对于www目录。如果文件已经在目标位置存在,CLI的停止并反转安装过程中,发出关于冲突通知,并用一非零代码退出。

Examples:

<!-- a single file, to be copied in the root directory -->
<asset src="www/foo.js" target="foo.js" />
<!-- a directory, also to be copied in the root directory -->
<asset src="www/foo" target="foo" />

asset可以设置为有针对性地子目录为好。这将创建www目录内的js/experimental,除非已经存在,并复制新foo.js文件,重命名为foo.js.

<asset src="www/new-foo.js" target="js/experimental/foo.js" />

js-module

大部分插件包括一个或多个JavaScript文件。每个JS-module标签对应一个JavaScript文件,并防止插件的用户不必添加script标记为每个文件。不要用保鲜cordova.define的文件,因为它会自动添加。该模块被包裹在一个闭包,用模块,出口和范围要求,因为是正常的AMD模块。嵌套JS-module在platform声明特定平台的JavaScript绑定的模块元素。

属性(类型) 描述
src(string) 参考相对plugin.xml文件插件目录中的文件。如果SRC不能解决现有文件中,CLI停止并反转安装,发出问题的通知,并与非零代码退出。
name(string) 提供模块名称的最后一部分。它一般可以是你喜欢的,如果你想使用cordova.require导入你的插件的其他部分在JavaScript代码只在乎。对于JS-module模块名称是你的插件的ID后跟名称的值。

Example:

当安装与下面的例子中的一个插件,socket.js被复制到www/plugins/my-plugin-id/socket.js,并添加为一个条目到www/cordova_plugins.js。在加载时,在cordova.js代码使用XHR来读取每个文件并注入 script 标记为HTML。

<js-module src="socket.js" name="Socket">
</js-module>

也正因为这个例子中,chrome-socket的插件ID,模块名称将是chrome-socket.Socket.

clobbers

JS-module元素内标记。用于指定module.exports被插入在window对象的命名空间。你可以有很多的clobbers只要你喜欢。创建window上的任何对象不可用。

属性(类型) 描述
target(string) 其中,module.exports被插入的命名空间。

Example:

<js-module src="socket.js" name="Socket">
    <clobbers target="chrome.socket" />
</js-module>

这里module.exports被插入到window对象window.chrome.socket。

merges

JS-module元素内标记。用来指定在哪里module.exports获取与任何现有的价值合并window对象的命名空间。如果已经存在,模块的版本取代原来的。你可以有很多的merges只要你喜欢。创建window上的任何对象不可用。

属性(类型) 描述
target(string) 这module.exports命名空间被合并。

Example:

<js-module src="socket.js" name="Socket">
     <merges target="chrome.socket" />
</js-module>

这里module.exports得到与window.chrome.socket的任何现有值合并。

runs

runs 是JS-module元素内标记。这意味着你的代码应与cordova.require指定,但窗口对象上没有安装。初始化模块时,附加的事件处理程序或其他方式,这非常有用。您最多只能有一个runs标记。请注意,包括runs与<clobbers/>或<merges/>是多余的,因为它们也cordova.require您的模块。

Example:

<js-module src="socket.js" name="Socket">
     <runs/>
</js-module>

dependency

在dependency标签允许你指定在其当前插件依赖其他插件。该插件被其独特的NPM的ID或URL GitHub的引用。

属性(类型) 描述
Attributes(type) Descriptionid(string) 提供插件的ID。
url(string) 一种插件URL。这应该引用一个Git仓库,其中CLI尝试克隆。
commit(string) 这是git的结帐理解的任何git的参考:一个分支或标记的名称,(e.g., master, 0.3.1), or a commit hash (e.g., 975ddb228af811dd8bb37ed1dfd092a3d05295f9)
subdir(string) 指定目标插件存在依赖的Git仓库的子目录。这是有帮助的,因为它允许包含几个相关的插件库,每个单独指定。-----如果设置了dependency>标签的网址“”。并提供一个子目录,依赖插件是从同一个本地或远程的Git仓库为指定的dependency标记父插件安装。-------请注意,子目录始终指定相对于git仓库,不是父插件的根目录的路径。这是真实的,即使你安装了一个直接本地路径后援CLI插件找到Git仓库的根目录,然后从那里找到的其他插件。
version(string) 该插件的版本依赖。 Semver句法支持。

Examples:

 <dependency id="cordova-plugin-someplugin" url="https://github.com/myuser/someplugin" commit="428931ada3891801" subdir="some/path/here" />
 <dependency id="cordova-plugin-someplugin" version="1.0.1">

platform

标识具有相关联的本机代码或需要修改其配置文件的平台。工具使用这个规范可以识别支持的平台和代码安装到cordova项目。无platform标记插件被假定为JavaScript的唯一的,因此在任何和所有平台安装。

属性(类型) 描述
name(string) 允许值:ios, android, blackberry10, amazon-fireos, wp8, windows标识为支撑,其子元素与平台相关联的平台。

Example:

<platform name="android">
    <!-- android-specific elements -->
</platform>

source-file

标识应安装到一个项目中的可执行文件的源代码。

属性(类型) 描述
src(string) 需要相对于plugin.xml到文件的位置。如果无法找到在src文件,则CLI停止并反转安装,发出关于该问题的通知,并用一个非零代码退出。
target-dir(string) 目录到其中的文件应该被复制,相对于cordova项目的根。在实践中,这是基于Java的平台,其中,在所述com.alunny.foo包的文件必须位于Ccom/alunny/foo目录最重要的。对于平台所在的源目录并不重要,这个属性应该被忽略。
framework(boolean) 默认值:false iOS版 如果设置为true,还增加了指定的文件作为该项目的框架。
compiler-flags(string) iOS 如果设置,将指定的编译器选项为特定的源文件

Examples:

<!-- android -->
<source-file src="src/android/Foo.java" target-dir="src/com/alunny/foo" />
<!-- ios -->
<source-file src="src/ios/CDVFoo.m" />
<source-file src="src/ios/someLib.a" framework="true" />
<source-file src="src/ios/someLib.a" compiler-flags="-fno-objc-arc" />

header-file

这就像source-file元素,但专门为平台,例如iOS和Android的源文件,头文件和资源加以区分。这不是由Windows支持。

属性(类型) 描述
src(string) 需要 相对于plugin.xml到文件的位置。。如果无法找到在src文件,则CLI停止并反转安装,发出关于该问题的通知,并用一个非零代码退出。
target(string) 路径在该文件将在你的目录进行复制。

Example:

For iOS:

<header-file src="CDVFoo.h" />

resource-file

这就像source-file元素,但专门为平台,例如iOS和Android的源文件,头文件和资源加以区分。

属性(类型) 描述
src(string) 需要 相对于plugin.xml到文件的位置。。如果无法找到在src文件,则CLI停止并反转安装,发出关于该问题的通知,并用一个非零代码退出。
target(string) 路径在该文件将在你的目录进行复制。

Examples:

For Android:

    <resource-file src="FooPluginStrings.xml" target="res/values/FooPluginStrings.xml" />

config-file

标识一个基于XML的配置文件进行修改,其中在该文件中所述修改应该发生,什么应该进行修改。已经过测试,修改与此元素的两个文件类型是XML和的plist文件。在配置文件中的元素只允许新的儿童追加到XML文档树。孩子们在目标文档中插入XML文本。

属性(类型) 描述
target(string) 该文件被修改,并且相对于cordova项目的根的路径。如果指定的文件不存在,该工具会忽略配置变化,并继续安装。目标可以包括通配符(*)的元素。在这种情况下,CLI递归项目的目录结构进行搜索,并使用第一个匹配。在iOS上,配置的位置,相对于项目根目录是不知道,因此指定config.xml中的目标文件解析到cordova-ios-project/MyAppName/config.xml中。
parent(string) 一个XPath选择引用的元素的父要添加到配置文件。如果您使用的绝对选择,你可以使用通配符(*)指定的根元素,例如/ * /插件。如果选择器不能解决到指定文档的孩子,工具停止并反转安装过程中,会发出警告,并用非零代码退出。对于文件的plist,父在什么父键指定的XML应插入决定。
after(string) 接受兄弟姐妹的优先列表之后,添加XML片段。可用于指定在需要这样的XML元素的严格的顺序文件中的更改。

Examples:

For XML:

  <config-file target="AndroidManifest.xml" parent="/manifest/application">
    <activity android:name="com.foo.Foo" android:label="@string/app_name">
      <intent-filter>
      </intent-filter>
    </activity>
 </config-file>

For plist:

<config-file target="*-Info.plist" parent="CFBundleURLTypes">
  <array>
      <dict>
          <key>PackageName</key>
          <string>$PACKAGE_NAME</string>
      </dict>
  </array>
</config-file>

plugins-plist

指定键和值将追加到在在iOScordova项目的正确AppInfo.plist文件。这是过时,因为它仅适用于科尔多瓦-IOS2.2.0及以下。使用config-file标记科尔多瓦的较新版本。
Example:

<plugins-plist key="Foo" string="CDVFoo" />

lib-file

链接源,资源和头文件。

属性(类型) 描述
src(string) 需要 相对于文件的位置到plugin.xml。如果无法找到的src,CLI的停止并反转安装,发出关于该问题的警告,并用一非零代码退出。
arch(string) 对于其中的.so文件已建成的建筑,无论是设备或模拟器。对于Windows,则表示该<SDKReference>构建为指定的结构时只应被包括在内。支持的值是86,64或ARM。

Examples:

<lib-file src="src/BlackBerry10/native/device/libfoo.so" arch="device" />
<lib-file src="src/BlackBerry10/native/simulator/libfoo.so" arch="simulator" />

framework

标识的框架(通常是系统/平台的一部分)该插件依赖。

属性(类型) 描述
src(string) 需要 系统框架或者被包括作为你的插件文件的一部分给一个相对路径名。
custom(boolean) 表示框架是否是作为你的插件文件的一部分。
weak(boolean) 默认值:false 指示是否该框架应弱链接。
type(string) 表示框架添加的类型。
parent(string) 默认值:设置到包含子项目在其中添加参考的目录的相对路径。默认。意味着应用程序项目。

Examples:

For iOS:

 <framework src="libsqlite3.dylib" />
 <framework src="social.framework" weak="true" />
 <framework src="relative/path/to/my.framework" custom="true" />

在Android(如cordova-android@4.0.0的),使用框架的标签,包括Maven依赖,或者包括捆绑的库项目。

<!-- Depend on latest version of GCM from play services -->
<framework src="com.google.android.gms:play-services-gcm:+" />
<!-- Depend on v21 of appcompat-v7 support library -->
<framework src="com.android.support:appcompat-v7:21+" />
<!-- Depend on library project included in plugin -->
<framework src="relative/path/FeedbackLib" custom="true" />

info

向用户提供更多的信息。当你需要不容易自动或超出了CLI的范围,额外的步骤,这是非常有用的。此标记的内容被打印出来的时候,CLI安装插件。

Example:

<info>
You need to install __Google Play Services__ from the `Android  Extras` section using the Android SDK manager (run `android`).

  You need to add the following line to the `local.properties`:

android.library.reference.1=PATH_TO_ANDROID_SDK/sdk/extras/google/google_play_services/libproject/google-play-services_lib
</info>

hook

表示将由cordova当某些行为发生时被调用自定义脚本(例如,插件添加或平台准备逻辑后调用)。当你需要扩展默认cordvoa的功能,这非常有用。

Example:

  <hook type="after_plugin_install" src="scripts/afterPluginInstall.js" />

uses-permission

在某些情况下,插件可能需要使依赖于目标应用程序配置的改变。例如,要在Android,应用程序的包ID是我-APP-ID将需要的权限,如注册C2DM:

<uses-permission android:name="my-app-id.permission.C2D_MESSAGE"/>

在从plugin.xml文件中插入的内容是不是提前知道这样的情况下,变量可以通过一个美元符号后面是一系列大写字母,数字或下划线的表示。对于上面的例子中,plugin.xml文件将包括此标记:

<uses-permission android:name="$PACKAGE_NAME.permission.C2D_MESSAGE"/>

如果没有找到该CLI替换指定的值,或空字符串变量的引用。可变基准的值可以被检测(在此情况下,从AndroidManifest.xml文件),或者由工具的用户指定;确切的过程是依赖于特定的工具。

Plugman可以要求用户指定插件的必需的变量。例如,对于C2M和谷歌地图API密钥可以被指定为一个命令行参数:

plugman --platform android --project /path/to/project --plugin name|git-url|path --variable API_KEY=!@CFATGWE%^WGSFDGSDFW$%^#$%YTHGsdfhsfhyer56734

preference

正如上一节中看到的,有时插件可能需要用户为他们的变量赋值。为了使这些变量强制性的,在<平台>标签必须包含一个<优先>标记。在CLI检查,这些要求的偏好中通过。如果不是,则应当警告用户如何在可变和出口通过带有非零码。

属性(类型) 描述
name(string) 需要 变量的名称..
default(string) 变量的默认值。如果存在的话,它的值将被使用,并没有错误将万一用户发出不输入任何值。

Example:

 <preference name="API_KEY" default="default-value" />
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容