目录

概述

Config.xml是全局配置文件,在很多方面控制着cordova应用的行为。Config.xml是平台无关的,基于W3C网络应用标准的xml格式文件,扩展了cordova核心api、插件和特定平台的设置。
用命令行(CLI:Command-Line Interface)创建的cordova工程,会在app/下创建config.xml。
需要注意的是,在3.3.1-0.2.0版本之前,config.xml文件存在于app/www/目录下,现在新版的cordova依然支持这样的写法。
用命令行创建cordova工程的时候,config.xml会自动在各个平台下创建。目录结构如下:<
app/platforms/ios/AppName/config.xml
app/platforms/blackberry10/www/config.xml
app/platforms/android/res/xml/config.xml

config.xml的参数及用法说明:

config.xml的重要参数:

id(string,必填项):填写app所有人的域名,在Wex5平台,该参数是“配置应用信息页面”的版本号和应用包名。如下图所示:Specifies the app’s reverse-domain identifier, and the version its full version number expressed in major/minor/patch notation.
version(string,必填项):填写app的版本号
android-versionCode(string) :安卓应用版本号。
ios-CFBundleVersion(string) :ISO应用版本号。
举例:

<!-- Android -->
<widget id="io.cordova.hellocordova" version="0.0.1" android-versionCode="0.1.3" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
</widget>

<!-- iOS -->
<widget id="io.cordova.hellocordova" version="0.0.1" ios-CFBundleVersion="0.1.3" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
</widget>

name

应用的名字,用户设备桌面的应用图标显示和应用商店显示。
举例:

<widget>
   <name>HelloCordova</name>
</widget>

description

应用说明,可用于应用商店对应用的描述。
举例:

<widget >
   <description>A sample Apache Cordova application</description>
</widget>

author

应用作者的联系方式,可用于应用商店对应用的描述。
email(string,必填):应用作者的email。
href(string,必填):应用作者的网站地址。
举例:

<widget>
   <author email="dev@cordova.apache.org" href="http://cordova.io"></author>
</widget>

content

定义应用的首页地址,一般为“index.html”,在工程目录的最外层,www文件夹内。
举例:

<widget >
   <content src="startPage.html"></content>
</widget>

access

origin(string):定义了应用可以数据交互的域名。
定义了应用可以访问的域名,默认允许访问任何服务器。更多内容可查看“域名白名单”。
举例:

<widget >
   <access origin="*"></content>
</widget>

<widget >
   <access origin="http://google.com"></content>
</widget>

allow-navigation

href(string):定义webview可以跳转的域名。
举例:

<!-- Allow links to example.com -->
<allow-navigation href="http://example.com/*" />

<!-- Wildcards are allowed for the protocol, as a prefix to the host, or as a suffix to the path -->
<allow-navigation href="*://*.example.com/*" />

allow-intent

控制哪些URLs是应用允许打开的,默认是全部禁止。
举例:

<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />

engine

如何恢复平台的详细说明
name(string):需要被恢复的平台名。
spec(string):需要会恢复的平台源码的详细描述。可以是major.minor.patch的版本号,包含平台源码的地址链接或者指向git仓库的url地址。这些信息可以被用作从NPM、本地地址链接或者git仓库恢复平台的代码。
举例:

<engine name="android" spec="https://github.com/apache/cordova-android.git#5.1.1" />
<engine name="ios" spec="^4.0.0" />

plugin

关于如何恢复插件的详细说明,在config.xml使用–save时,插件会自动的加载到工程中。
name(string):需要恢复的插件名。
spec(string):关于如何恢复插件源码的详细描述。可以是major.minor.patch的版本号,包含插件源码的地址链接或者指向git仓库的url地址。这些信息可以被用作从NPM、本地地址链接或者git仓库恢复平台的代码。
举例:

<plugin name="cordova-plugin-device" spec="^1.1.0" />
<plugin name="cordova-plugin-device" spec="https://github.com/apache/cordova-plugin-device.git#1.0.0" />

variable

定义了命令行恢复插件时的变量默认值,当插件执行命令行使用–save标签添加变量的时候,该元素会被加入config.xml。
需要注意的是此值只有在插件被恢复的时候才会有效,改变它的值并不会改变当前工程中的值。如果要恢复此值,可以先从工程中卸载插件并执行“cordova prepare”恢复插件。
name(string):命令行的变量名。只能包含大写字母,数字和下划线。
value(string):命令行变量的值,在恢复插件的时候有效。
举例:

<plugin name="cordova-plugin-device" spec="^1.1.0">
    <variable name="MY_VARIABLE" value="my_variable_value" />
</plugin>

feature

如果使用命令行创建应用,可以用插件命令开放设备APIs的。这样做并不会修改config.xml文件的顶层,所以此元素不支持你的工作流。如果使用SDK和指定平台的config.xml。使用“feature”可以开放设备层级的APIs和外部的插件。“feature”是config.xml比较常用的元素。
name(string):需要被开放的插件的名字。

param

用于说明插件的必要参数,如:插件源码的包名,插件是否会在webview初始化的时候被初始化。
name(string):android-package, ios-package, osx-package, onload. ‘ios-package’, ‘osx-package’ 和’android-package’ 用于描述初始化插件代码的包名,使用onload可以描述该插件在controller初始化的时候是否被实例化。
value(string or boolean) :描述初始化插件代码的包名(当名字为android-package, ios-package or osx-package),指定的插件名会在controller初始化的时候加载。
举例:

<!-- Here is how to specify the Device API for Android projects -->
<feature name="Device">
   <param name="android-package" value="org.apache.cordova.device.Device" />
</feature>

<!-- Here's how the element appears for iOS projects -->
<feature name="Device">
   <param name="ios-package" value="CDVDevice" />
   <param name="onload" value="true" />
</feature>

<!-- Here's how the element appears for OS X projects -->
<feature name="Device">
   <param name="osx-package" value="CDVDevice" />
   <param name="onload" value="true" />
</feature>

platform

使用命令行创建应用的时候,有时候需要向指定的平台添加一些参数和偏好设置,使用platform做指定的配置,该配置只会出现在指定的平台。
name(string):该平台的设置都在此标签内。
举例:

<platform name="android">
   <preference name="Fullscreen" value="true" />
</platform>

hook

代表出现指定的action的时候会执行用户的脚本。(比如插件被加载或者平台已经加准备好)。当你需要依赖默认的cordova功能时,hook会非常实用。
type(string):描述用户的脚本执行时执行什么动作。
src(string):描述脚本的位置
举例:

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

Sample config.xml

以下是config.xml的范例

<?xml version='1.0' encoding='utf-8'?>
<widget id="io.cordova.hellocordova" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
  <name>HelloCordova</name>
  <description>
      A sample Apache Cordova application that responds to the deviceready event.
  </description>
  <author email="dev@cordova.apache.org" href="http://cordova.io">
      Apache Cordova Team
  </author>
  <content src="index.html" />
  <plugin name="cordova-plugin-whitelist" spec="1" />
  <access origin="*" />
  <allow-intent href="http://*/*" />
  <allow-intent href="https://*/*" />
  <allow-intent href="tel:*" />
  <allow-intent href="sms:*" />
  <allow-intent href="mailto:*" />
  <allow-intent href="geo:*" />
  <platform name="android">
      <allow-intent href="market:*" />
  </platform>
  <platform name="ios">
      <allow-intent href="itms:*" />
      <allow-intent href="itms-apps:*" />
  </platform>
</widget>