Plugin.xml API

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

plugin

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

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

示例

<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="https://apache.ac.cn/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+ 中,指定平台、插件和 CLI 依赖项的推荐位置是在插件的 package.json 中。有关更多信息,请参阅指定 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 模块是正常的。将 <js-module> 元素嵌套在 <platform> 中会声明特定于平台的 JavaScript 模块绑定。

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

示例

安装以下示例中的插件时,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.chrome.socket 插入到 window 对象中。

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 目录中。对于源目录不重要的平台,应省略此属性。
framework
布尔值
默认值:false
如果设置为 true,还会将指定的文件作为框架添加到项目中。
compiler-flags
字符串
如果设置,则为特定源文件分配指定的编译器标志。

示例

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

属性 描述
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>

添加 plugin-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>

添加 plugin-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 冲突

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

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

如果插件的状态变得异常,请删除所有插件并重新添加它们。

示例

假设上面提到的 plugin-1 已经安装。尝试安装下面的 plugin-2 将会导致错误,因为 plugin-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>

有几种方法可以添加 plugin-2

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

从 plugin-2 中删除 edit-config 并将其合并到 plugin-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>

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

强制添加 plugin-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 的恢复更改将永久消失。在删除强制添加的插件后,它们将不会重新出现。如果需要恢复的更改,则应删除并重新添加所有关联的插件。

plugins-plist

指定要附加到 iOS Cordova 项目中正确的 AppInfo.plist 文件的键和值。这是过时的,因为它仅适用于 cordova-ios 2.2.0 及更低版本。对于较新版本的 Cordova,请使用 <config-file> 标记。

示例

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

lib-file

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

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

示例

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

framework

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

属性 描述
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
字符串
必需
Pod 规范的源 URL。

pods

<pods> 元素标识 CocoaPods 库。

此元素为每个 CocoaPods 库包含一个 <pod> 标记。

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

pod

属性(类型) 描述
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 功能时,这非常有用。有关更多信息,请参见 钩子指南

示例

<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 Maps 的 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 属性。

偏好设置

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

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

示例

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