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 会针对任何目标项目不满足引擎约束的插件中止并返回非零代码。如果没有
注意:在 Cordova 6.1.0+ 中,推荐在插件的
package.json
中指定平台、插件和 CLI 依赖项。有关更多信息,请参阅 指定 Cordova 依赖项
属性 | 描述 |
---|---|
name 字符串 |
必需 引擎的名称。以下是支持的默认引擎: cordova 、cordova-plugman 、cordova-android 、cordova-browser 、cordova-ios 、windows-os 、android-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 引用:分支或标签名称(例如,master 、0.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 的配置文件,在该文档中应进行修改的位置以及应修改的内容。使用此元素测试修改的两种文件类型是 xml
和 plist
文件。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-file
,edit-config
标识要修改的基于 XML 的配置文件,在该文档中应进行修改的位置以及应修改的内容。edit-config
不是将新子节点追加到 XML 文档树,而是对 XML 元素的属性进行修改。有两种模式将决定将进行哪种类型的属性修改,merge
或 overwrite
。edit-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.0 和 cordova-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 上的CFBundleIdentifier
或AndroidManifest.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>