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" />