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閱讀 228,546評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,570評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,505評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,786評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,219評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,438評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,971評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,796評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,995評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,230評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,697評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容