Plugin.xml API

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

plugin

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

属性 描述
xmlns
字符串
必需
插件命名空间,http://apache.org/cordova/ns/plugins/1.0。如果文档包含来自其他命名空间的 XML,例如在 Android 的情况下要添加到 AndroidManifest.xml 文件中的标签,则这些命名空间也应包含在元素中。
id
字符串
必需
插件的 npm 风格标识符。
version
字符串
必需
插件的版本号。支持 Semver 语法。

示例

<?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 和 engine

<engines> 元素的子元素指定此插件支持的基于 Apache Cordova 的框架的版本。CLI 会针对任何目标项目不满足引擎约束的插件中止并返回非零代码。如果没有标签指定,CLI 会尝试盲目地安装到指定的 cordova 项目目录中。

注意:在 Cordova 6.1.0+ 中,推荐在插件的 package.json 中指定平台、插件和 CLI 依赖项。有关更多信息,请参阅 指定 Cordova 依赖项

属性 描述
name
字符串
必需
引擎的名称。以下是支持的默认引擎:cordovacordova-plugmancordova-androidcordova-browsercordova-ioswindows-osandroid-sdk(返回安装的最高 Android api 级别)、apple-xcode(返回 xcode 版本)、apple-ios(返回安装的最高 iOS 版本)、apple-osx(返回 macOS 版本)。您也可以指定除默认框架之外的自定义框架。
version
字符串
必需
框架必须具有的版本才能安装。支持 Semver 语法。
scriptSrc
字符串
仅适用于自定义框架
必需
告诉 plugman 自定义框架版本的脚本文件。理想情况下,此文件应位于插件目录的顶层目录中。
platform
字符串
仅适用于自定义框架
必需
框架支持的平台。您可以使用通配符 * 来表示支持所有平台,使用管道字符指定多个平台,例如 android|ios,或者只指定一个平台,例如 android

示例

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

引擎元素也可以使用 '>'、'>=' 等指定模糊匹配,以避免重复,并在底层平台更新时减少维护工作。

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

<engine> 标签还默认支持 Cordova 存在的所有主要平台。指定 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 元素用于指定插件的名称。此元素(目前)不支持本地化。

示例

<name>Foo</name>

description

description 元素用于指定插件的描述。此元素(目前)不支持本地化。

示例

<description>Foo plugin description</description>

author

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

示例

<author>Foo plugin author</author>

keywords

keywords 元素的内容包含以逗号分隔的关键字,用于描述插件。

示例

<keywords>foo,bar</keywords>

license

此元素用于指定插件的许可证。

示例

<license>Apache 2.0 License</license>

asset

此元素用于列出要复制到 Cordova 应用程序 www 目录中的文件或目录。任何嵌套在 <platform> 元素中的 <asset> 元素都指定了特定于平台的 Web 资源。

属性 描述
src
字符串
必需
文件或目录在插件包中的位置,相对于 plugin.xml 文档。如果在指定 src 位置找不到文件,CLI 会停止并撤销安装过程,发出有关冲突的通知,并退出并返回非零代码。
target
字符串
必需
文件或目录应在 Cordova 应用程序中的位置,相对于 www 目录。如果在目标位置已存在文件,CLI 会停止并撤销安装过程,发出有关冲突的通知,并退出并返回非零代码。

示例

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

资源也可以定位到子目录。这将在 www 目录中创建 js/experimental 目录(除非已存在),并将 new-foo.js 文件复制到该目录并将其重命名为 foo.js

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

js-module

大多数插件包含一个或多个 JavaScript 文件。每个 <js-module> 标签对应一个 JavaScript 文件,并防止插件用户为每个文件添加 <script> 标签。不要用 cordova.define 包装文件,因为它会自动添加。该模块被包装在一个闭包中,其中 module、exports 和 require 在范围内,这对于 AMD 模块来说是正常的。在 <platform> 中嵌套 <js-module> 元素声明特定于平台的 JavaScript 模块绑定。

属性 描述
src
字符串
引用插件目录中的文件,相对于 plugin.xml 文件。如果 src 未解析为现有文件,CLI 会停止并撤销安装,发出有关问题的通知,并退出并返回非零代码。
name
字符串
提供模块名称的最后部分。它通常可以是您喜欢的任何内容,只有当您想使用 cordova.require 导入 JavaScript 代码中插件的其他部分时才重要。<js-module> 的模块名称是您的插件的 id 后跟 name 的值。

示例

使用以下示例安装插件时,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>

对于此示例,插件 id 为 chrome-socket,模块名称将为 chrome-socket.Socket

clobbers

允许在 <js-module> 元素中使用。用于指定 window 对象下 module.exports 被插入的命名空间。您可以根据需要添加任意数量的 <clobbers>。任何在 window 上不可用的对象都会被创建。

属性 描述
target
字符串
module.exports 被插入到的命名空间。

示例

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

这里 module.exports 被插入到 window 对象中,作为 window.chrome.socket

merges

允许在 <js-module> 元素中使用。用于指定 window 对象下 module.exports 与任何现有值合并的命名空间。如果任何键已存在,则模块的版本会覆盖原始版本。您可以根据需要添加任意数量的 <merges>。任何在 window 上不可用的对象都会被创建。

属性 描述
target
字符串
module.exports 被合并到的命名空间。

示例

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

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

runs

允许在 <js-module> 元素中使用。这意味着您的代码应该使用 cordova.require 指定,但不会安装在 window 对象上。这在初始化模块、附加事件处理程序或其他情况下很有用。您最多只能有一个 <runs/> 标签。请注意,在 <clobbers/><merges/> 中包含 <runs/> 是多余的,因为它们也会 cordova.require 您的模块。

示例

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

dependency

<dependency> 标签允许您指定当前插件依赖的其他插件。这些插件通过其唯一的 npm id 或 github url 引用。

属性 描述
id
字符串
提供插件的 ID。
url
字符串
插件的 URL。这应该引用一个 git 存储库,CLI 会尝试克隆该存储库。
commit
字符串
这是 git checkout 理解的任何 git 引用:分支或标签名称(例如,master0.3.1)或提交哈希(例如,975ddb228af811dd8bb37ed1dfd092a3d05295f9)。
subdir
字符串
指定目标插件依赖项作为 git 存储库的子目录存在。这很有用,因为它允许存储库包含多个相关插件,每个插件都单独指定。
如果您将 <dependency> 标签的 url 设置为 "." 并提供 subdir,则依赖插件将从与指定 <dependency> 标签的父插件相同的本地或远程 git 存储库中安装。
请注意,subdir 始终指定相对于 git 存储库的根目录的路径,而不是父插件。即使您使用本地路径直接安装了插件,也是如此。CLI 会找到 git 存储库的根目录,然后从那里找到另一个插件。
version
字符串
依赖插件的版本。支持 Semver 语法。

示例

<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
字符串
必需
允许的值:ios、android、browser、electron
标识平台为受支持的平台,将元素的子元素与该平台关联。

示例

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

source-file

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

属性 描述
src
字符串
必需
相对于 plugin.xml 的文件位置。如果找不到 src 文件,CLI 会停止并撤销安装,发出有关问题的通知,并退出并返回非零代码。
target-dir
字符串
一个目录,用于将文件复制到其中,相对于 Cordova 项目的根目录。在实践中,这对于基于 Java 的平台最为重要,其中 com.alunny.foo 包中的文件必须位于 com/alunny/foo 目录中。对于源目录不重要的平台,应省略此属性。
框架
布尔值
默认值:false
如果设置为 true,还会将指定文件作为框架添加到项目中。
编译器标志
字符串
如果设置,则为特定源文件分配指定的编译器标志。

示例

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

头文件

这类似于 <source-file> 元素,但专门用于 iOS 和 Android 等区分源文件、头文件和资源的平台。

属性 描述
src
字符串
必需
相对于 plugin.xml 的文件位置。如果找不到 src 文件,CLI 会停止并撤销安装,发出有关问题的通知,并退出并返回非零代码。
target-dir
字符串
一个目录,用于将文件复制到其中,相对于 Cordova 项目的根目录。
类型
字符串
如果此值为 BridgingHeader,则该文件将在 Bridging-Header.h 中导入,并且可以从 swift 程序中调用。

示例

对于 iOS

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

资源文件

这类似于 <source-file> 元素,但专门用于 iOS 和 Android 等区分源文件、头文件和资源的平台。

属性 描述
src
字符串
必需
相对于 plugin.xml 的文件位置。如果找不到 src 文件,CLI 会停止并撤销安装,发出有关问题的通知,并退出并返回非零代码。
target
字符串
文件将在您的目录中复制到的路径。

Android 示例

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

配置文件

标识要修改的基于 XML 的配置文件,在该文档中应进行修改的位置以及应修改的内容。使用此元素测试修改的两种文件类型是 xmlplist 文件。config-file 元素只允许您将新子节点追加到 XML 文档树。子节点是插入目标文档中的 XML 文本。

属性 描述
target
字符串
要修改的文件以及相对于 Cordova 项目根目录的路径。如果指定的文件不存在,则工具会忽略配置更改并继续安装。
目标可以包含通配符 (*) 元素。在这种情况下,CLI 会递归搜索项目目录结构并使用第一个匹配项。
在 iOS 上,配置文件相对于项目目录根目录的位置是未知的,因此指定 config.xml 的目标将解析为 cordova-ios-project/MyAppName/config.xml
父级
字符串
一个 XPath 选择器,引用要添加到配置文件中的元素的父级。如果您使用绝对选择器,则可以使用通配符 (*) 来指定根元素,例如 /*/plugins。如果选择器无法解析为指定文档的子节点,则工具将停止并反转安装过程,发出警告并以非零代码退出。
对于 plist 文件,parent 确定在哪个父级键下插入指定的 XML。
之后
字符串
一个优先级列表,列出接受的同级元素,在这些元素之后添加 XML 片段。对于指定需要严格排序 XML 元素的文件中的更改很有用。

示例

对于 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>

对于 plist

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

编辑配置

类似于 config-fileedit-config 标识要修改的基于 XML 的配置文件,在该文档中应进行修改的位置以及应修改的内容。edit-config 不是将新子节点追加到 XML 文档树,而是对 XML 元素的属性进行修改。有两种模式将决定将进行哪种类型的属性修改,mergeoverwriteedit-config 只有一个子节点,该子节点将包含要添加的属性。

属性 描述
文件
字符串
要修改的文件以及相对于 Cordova 项目根目录的路径。如果指定的文件不存在,则工具会忽略配置更改并继续安装。
目标可以包含通配符 (*) 元素。在这种情况下,CLI 会递归搜索项目目录结构并使用第一个匹配项。
在 iOS 上,配置文件相对于项目目录根目录的位置是未知的,因此指定 config.xml 的目标将解析为 cordova-ios-project/MyAppName/config.xml
target
字符串
一个 XPath 选择器,引用要对其进行属性修改的目标元素。如果您使用绝对选择器,则可以使用通配符 (*) 来指定根元素,例如 /*/plugins。如果选择器无法解析为指定文档的子节点,则工具将停止并反转安装过程,发出警告并以非零代码退出。
模式
字符串
决定将进行哪种类型的属性修改的模式。
merge - 将指定的属性添加到目标元素。如果指定的属性已存在于目标元素中,则将替换属性值。
overwrite - 将目标元素中的所有属性替换为指定的属性。

示例

<!-- plugin-1 -->
<edit-config file="AndroidManifest.xml" target="/manifest/uses-sdk" mode="merge">
    <uses-sdk android:minSdkVersion="16" android:maxSdkVersion="23" />
</edit-config>
<edit-config file="AndroidManifest.xml" target="/manifest/application/activity[@android:name='MainActivity']" mode="overwrite">
    <activity android:name="MainActivity" android:label="NewLabel" android:configChanges="orientation|keyboardHidden" />
</edit-config>

添加插件 1 之前的 AndroidManifest.xml

<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
    ...
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
            ...
        </activity>
    ...
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
</manifest>

添加插件 1 之后的 AndroidManifest.xml

<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
    ...
        <activity android:configChanges="orientation|keyboardHidden" android:label="NewLabel" android:name="MainActivity">
            ...
        </activity>
    ...
    <uses-sdk android:maxSdkVersion="23" android:minSdkVersion="16" android:targetSdkVersion="23" />
</manifest>

管理编辑配置冲突

多个插件不能修改相同的属性,因为这可能会导致应用程序出现问题。将抛出错误,插件安装将失败。必须在添加插件之前解决冲突的 edit-config 标签。对冲突标签进行修改以解决冲突,然后删除并重新添加更新的插件。

对于那些确定插件应该在存在冲突的情况下安装的人来说,有一个选项。--force 标志可以与 cordova plugin add 一起使用。强制添加插件将恢复其他插件的冲突更改,以便可以毫无问题地添加它。--force 应谨慎使用,因为恢复其他插件的更改可能会导致应用程序无法按预期工作。

如果插件处于奇怪的状态,请删除所有插件并重新添加它们。

示例

假设上面的插件 1 已经安装。尝试安装下面的插件 2 将导致错误,因为插件 1 已经修改了 AndroidManifest.xml 中的 uses-sdk 元素。

<!-- plugin-2 -->
<edit-config file="AndroidManifest.xml" target="/manifest/uses-sdk" mode="merge">
    <uses-sdk android:minSdkVersion="15" />
</edit-config>

有几种方法可以添加插件 2

一种可能的冲突解决方案是删除插件 2 中的 edit-config 标签,并将其合并到插件 1 的 edit-config 标签中(假设插件 1 对此更改没有问题)。删除这两个插件并重新添加它们,并进行这些更改。插件 2 应该这次可以干净地添加。

从插件 2 中删除 edit-config 并将其合并到插件 1 中

<!-- plugin-1 -->
<edit-config file="AndroidManifest.xml" target="/manifest/uses-sdk" mode="merge">
    <uses-sdk android:minSdkVersion="15" android:maxSdkVersion="23" />
</edit-config>
<edit-config file="AndroidManifest.xml" target="/manifest/application/activity[@android:name='MainActivity']" mode="overwrite">
    <activity android:name="MainActivity" android:label="NewLabel" android:configChanges="orientation|keyboardHidden" />
</edit-config>

删除并重新添加两个插件后的 AndroidManifest.xml

<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
    ...
        <activity android:configChanges="orientation|keyboardHidden" android:label="NewLabel" android:name="MainActivity">
            ...
        </activity>
    ...
    <uses-sdk android:maxSdkVersion="23" android:minSdkVersion="15" android:targetSdkVersion="23" />
</manifest>

添加插件 2 的第二种方法是使用 --force 添加插件。插件 1 中的冲突 edit-config 更改将被恢复,并将应用插件 2 的更改。生成的 AndroidManifest.xml 将具有来自插件 2 的 uses-sdk 更改和来自插件 1 的 activity 更改。请注意,只有来自插件 1 的 uses-sdk 更改消失了,因为它只是唯一的冲突更改。

强制添加插件 2 后的 AndroidManifest.xml

<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
    ...
        <activity android:configChanges="orientation|keyboardHidden" android:label="NewLabel" android:name="MainActivity">
            ...
        </activity>
    ...
    <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="23" />
</manifest>

注意:来自 --force 的恢复更改将永远消失。在删除强制添加的插件后,它们不会再次出现。如果需要恢复更改,则应删除所有关联的插件并重新添加它们。

插件列表

指定一个键值对,以追加到 iOS Cordova 项目中的正确 AppInfo.plist 文件。这已经过时,因为它只适用于 cordova-ios 2.2.0 及更低版本。对于更新版本的 Cordova,请使用 <config-file> 标签。

示例

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

库文件

<lib-file> 元素可用于在项目的 libs 目录 中安装 .jar 文件。

属性 描述
src
字符串
必需
.jar 文件相对于 plugin.xml 的位置。如果找不到 src 文件,CLI 将停止并反转安装,发出有关问题的警告,并以非零代码退出。

示例

<lib-file src="src/android/libs/foobar.jar"/>

框架

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

属性 描述
src
字符串
必需
系统框架的名称或作为插件文件的一部分包含的框架的相对路径。
自定义
布尔值
指示框架是否作为插件文件的一部分包含。

布尔值
默认值:false
指示框架是否应该弱链接。
类型
字符串
指示要添加的框架类型。
父级
字符串
默认值:.
设置包含要添加引用的子项目的目录的相对路径。默认值 . 表示应用程序项目。
规范
字符串
type="podspec" 配合使用,这是您要安装的 CocoaPod 的规范字符串(仅限静态库)。CocoaPod 支持仅存在于 cordova-ios 4.3.0cordova-cli 6.4.0 中。对于您的插件,请确保添加适当的 <engine> 标签和 package.json 依赖项 以确保向后兼容的支持。
嵌入
布尔值
默认值:false
custom="true" 配合使用,如果要将自定义框架嵌入到应用程序包中,以便可以在运行时动态加载它(动态框架),则将其设置为 true。这会将您的自定义框架放在 Xcode 项目设置的“嵌入式二进制文件”部分中。仅支持 [email protected][email protected] 的组合。
链接
布尔值
默认值:!embed
如果要链接框架,请将其设置为 true。这会将框架放在 Xcode 项目设置的“将二进制文件与库链接”部分中。

示例

对于 iOS

<framework src="libsqlite3.dylib" />
<framework src="social.framework" weak="true" />
<framework src="relative/path/to/my.framework" custom="true" />
<framework src="GoogleCloudMessaging" type="podspec" spec="~> 1.2.0" />

在 Android 上(从 [email protected] 开始),框架标签用于包含 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" />

框架还可以用于将自定义 .gradle 文件子包含到主项目的 build.gradle 文件中

<framework src="relative/path/rules.gradle" custom="true" type="gradleReference" />

podspec

标识提供插件依赖的依赖项的 CocoaPods Podfile

此元素包含 <config><pods> 标签。

配置

<config> 元素标识从中检索 CocoaPods 规范的源 URL。

此元素包含一个或多个 <source> 标签。

来源

属性 描述
url
字符串
必需
pods 规范的源 URL。

豆荚

<pods> 元素标识 CocoaPods 库。

此元素包含每个 CocoaPods 库的 <pod> 标签。

属性 描述
使用框架
布尔值
默认值:false
如果为 true,则在 Podfile 中声明 use_frameworks! 属性。
抑制所有警告
布尔值
默认值:false
如果为 true,则在 Podfile 中声明 inhibit_all_warnings! 属性。

豆荚

属性(类型) 描述
name
字符串
必需
Pod 名称
规范
字符串
Pod 规范
swift 版本
字符串
指定 CocoaPods 库的 swift 版本
git
字符串
Pod git 选项。
分支
字符串
Pod branch 选项。
标签
字符串
Pod tag 选项。
commit
字符串
Pod commit 选项。
配置
字符串
Pod configurations 选项。对于多个值,用逗号分隔它们。
http
字符串
Pod http 选项。
路径
字符串
Pod path 选项。位于本地文件系统上的 Pod。
选项
字符串
以原始格式声明的 Pod 选项。如果声明,则其他 Pod 选项将被覆盖。
示例:options=":git => 'https://github.com/Alamofire/Alamofire.git', :tag => '3.1.1'"

示例

    <podspec>
      <config>
        <source url="https://github.com/brightcove/BrightcoveSpecs.git" />
        <source url="https://github.com/CocoaPods/Specs.git"/>
      </config>
      <pods use-frameworks="true">
        <pod name="AFNetworking" spec="~> 3.2" />
        <pod name="SDWebImage" spec="~> 4.0" />
        <pod name="Eureka" swift-version="3.3" />
        <pod name="AcknowList" />
        <pod name="Brightcove-Player-Core" spec="~> 6.3.4" />
        <pod name="Foobar1" git="[email protected]:hoge/foobar1.git" configurations="Debug"/>
        <pod name="Foobar2" git="[email protected]:hoge/foobar2.git" branch="next" configurations="Debug,Release"/>
        <pod name="FoobarSwift" swift-version="4.1" />
      </pods>
    </podspec>

此示例导致 Podfile

# DO NOT MODIFY -- auto-generated by Apache Cordova
source 'https://github.com/brightcove/BrightcoveSpecs.git'
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!
target 'HelloCordova' do
	project 'HelloCordova.xcodeproj'
	pod 'AFNetworking', '~> 3.2'
	pod 'SDWebImage', '~> 4.0'
	pod 'Eureka'
	pod 'AcknowList'
	pod 'Brightcove-Player-Core', '~> 6.3.4'
	pod 'Foobar1', :git => '[email protected]:hoge/foobar1.git', :configurations => ['Debug']
	pod 'Foobar2', :branch => 'next', :git => '[email protected]:hoge/foobar2.git', :configurations => ['Debug','Release']
	pod 'FoobarSwift'
end

信息

提供给用户的附加信息。当您需要无法轻松自动化或超出 CLI 范围的额外步骤时,这很有用。当 CLI 安装插件时,此标签的内容将被打印出来。

示例

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

钩子

表示您的自定义脚本,当发生特定操作时(例如,在添加插件或调用平台准备逻辑之后),Cordova 将调用该脚本。当您需要扩展默认的 Cordova 功能时,这很有用。有关更多信息,请参阅 Hooks 指南

示例

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

使用权限

在某些情况下,插件可能需要根据目标应用程序进行配置更改。例如,要在 Android 上注册 C2DM,包 ID 为 my-app-id 的应用程序将需要一个权限,例如

<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 和 Google 地图的 API 密钥可以作为命令行参数指定

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

某些变量名称应该保留,例如$PACKAGE_NAME。这是包的逆域名样式唯一标识符,对应于 iOS 上的CFBundleIdentifierAndroidManifest.xml文件中顶级manifest元素的package属性。

preference

如上一节所示,有时插件可能需要用户为其变量指定值。为了使这些变量成为必需的,<platform>标签需要包含一个<preference>标签。CLI 检查这些必需的偏好设置是否已传入。如果没有,它应该警告用户如何传入变量并以非零代码退出。偏好设置可以在plugin.xml中的其他地方使用语法$PREFERENCE_NAME进行引用。

属性 描述
name
字符串
必需
变量的名称。只能包含大写字母、数字和下划线。
default
字符串
变量的默认值。如果存在,它的值将被使用,并且如果用户没有输入任何值,则不会发出错误。

示例

<preference name="MY_CUSTOM_STRING" default="default-value" />

<!--
    The preference may be referenced elsewhere in plugin.xml like so:
-->
<config-file target="./res/values/strings.xml" parent="/resources">
    <string name="custom">$MY_CUSTOM_STRING</string>
</config-file>