对桌面 AIR 安装文件进行打包

每个 AIR 应用程序必须至少包含一个应用程序描述符文件和主 SWF 或 HTML 文件。任何随应用程序安装的其他资源也必须打包在 AIR 文件中。

本文讨论了使用 SDK 随附的命令行工具对 AIR 应用程序进行打包。有关使用 Adobe 创作工具对应用程序进行打包的信息,请参阅以下内容:

必须使用数字证书对所有 AIR 安装程序文件签名。AIR 安装程序使用该签名验证应用程序文件自签名之后是否未发生任何更改。可以使用证书颁发机构颁发的代码签名证书,也可以使用自签名证书。

当使用由受信任证书颁发机构颁发的证书时,因为您的身份是发布者,这就为应用程序的用户提供了一些保证。安装对话框反映了您的身份已经过证书颁发机构验证这一事实:

由受信任证书签名的应用程序的安装确认对话框

当您使用自签名证书时,用户无法验证您的身份是否为签名者。自签名证书不能完全保证包未经过修改。(这是因为合法的安装文件在到达用户之前可能被假冒文件替代。)安装对话框反映了发布者的身份无法验证这一事实。用户在安装您的应用程序时将承担更大的安全风险:

查看完全大小图形
由自签名证书签名的应用程序的安装确认对话框

使用 ADT -package 命令可以在一个步骤中对 AIR 文件进行打包和签名。您还可以使用 -prepare 命令创建一个未签名的中间包,然后在单独的步骤中使用 -sign 命令对中间包签名。

注: Java 1.5 版及更高版本不允许在用于保护 PKCS12 证书文件的密码中使用高位 ASCII 字符。当您创建或导出代码签名的证书文件时,仅在密码中使用常规 ASCII 字符。

当对安装包签名时,ADT 将自动连接时间戳签发机构服务器以验证时间。时间戳信息包含在 AIR 文件中。您可以在将来任一时间安装包含已经过验证的时间戳的 AIR 文件。如果 ADT 无法连接到时间戳服务器,则取消打包。您可以覆盖时间戳设置选项,但是如果没有时间戳,在对安装文件签名所使用的证书过期后,AIR 应用程序将停止安装。

如果您正在创建包以更新现有的 AIR 应用程序,必须使用与原始应用程序相同的证书对包进行签名。如果原始证书已续签或已在过去 180 天内过期,或者您要更改为新的证书,则可以申请迁移签名。迁移签名涉及到使用新证书和旧证书对应用程序 AIR 文件进行签名。使用 -migrate 命令可以应用迁移签名(如 ADT migrate 命令 中所述)。

重要说明: 在原始证书过期后,在严格的 180 天宽限期内可以申请迁移签名。如果没有迁移签名,现有用户必须卸载其现有应用程序才能安装新版本。宽限期仅适用于在应用程序描述符命名空间中指定 AIR 1.5.3 版或更高版本的应用程序。如果目标是 AIR 运行时的早期版本,则没有宽限期。

AIR 1.1 之前的版本不支持迁移签名。您必须使用 SDK 1.1 或更高版本打包应用程序才能申请迁移签名。

使用 AIR 文件部署的应用程序称为桌面配置文件应用程序。如果应用程序描述符文件不支持桌面配置文件,则不能使用 ADT 为 AIR 应用程序打包本机安装程序。可以使用应用程序描述符文件中的 supportedProfiles 元素限制此配置文件。请参阅 设备配置文件 supportedProfiles

注: 应用程序描述符文件中的设置确定 AIR 应用程序的标识及其默认安装路径。请参阅 AIR 应用程序描述符文件

发行商 ID

从 AIR 1.5.3 开始,将弃用发行商 ID。新应用程序(最初使用 AIR 1.5.3 或更高版本发布)不需要也不应指定发行商 ID。

当更新使用 AIR 的早期版本发布的应用程序时,您必须在应用程序描述符文件中指定原始发行商 ID。否则,会将应用程序的安装版本和更新版本视为不同的应用程序。如果您使用其他 ID 或省略 publisherID 标签,用户必须在安装新版本之前卸载早期版本。

要确定原始发行商 ID,请在安装原始应用程序的 META-INF/AIR 子目录中查找 publisherid 文件。此文件中的字符串就是发行商 ID。要手动指定发行商 ID,应用程序描述符必须在应用程序描述符文件的命名空间声明中指定 AIR 1.5.3 运行时(或更高版本)。

对于在 AIR 1.5.3 之前发布的应用程序(在应用程序描述符命名空间中指定 AIR 的早期版本时,则是使用 AIR 1.5.3 SDK 发布的应用程序),将根据签名证书计算发行商 ID。将此 ID 与应用程序 ID 一起使用来确定应用程序的标识。发行商 ID(如果存在)用于以下用途:

  • 验证 AIR 文件是一个更新而不是要安装的新应用程序

  • 作为加密本地存储加密密钥的一部分

  • 作为应用程序存储目录路径的一部分

  • 作为本地连接的连接字符串的一部分

  • 作为用于使用 AIR 浏览器内 API 来调用应用程序的标识字符串的一部分

  • 作为 OSID(在创建自定义安装/卸载程序时使用)的一部分

在 AIR 1.5.3 之前,如果您使用新的或续签的证书对包含迁移签名的应用程序更新进行签名,则可以更改应用程序的发行商 ID。当发行商 ID 改变时,所有依赖该 ID 的 AIR 功能的行为也会改变。例如,将无法访问现有加密本地存储中的数据,所有创建到应用程序的本地连接的 Flash 或 AIR 实例必须使用连接字符串中的新 ID。

在 AIR 1.5.3 或更高版本中,发行商 ID 不是基于签名证书的,而且只能在应用程序描述符中包含 publisherID 标签的情况下指定。如果为更新 AIR 包指定的发行商 ID 与其当前的发行商 ID 不匹配,则无法更新应用程序。

使用 ADT 打包

可以使用 AIR ADT 命令行工具对 AIR 应用程序进行打包。打包前必须先编译所有的 ActionScript、MXML 和任何扩展代码。还必须有代码签名证书。

有关 ADT 命令和选项的详细参考,请参阅 AIR Developer Tool (ADT)

创建 AIR 包

若要创建 AIR 包,请使用 ADT package 命令,同时针对发行版将目标类型设置为 air

adt -package -target air -storetype pkcs12 -keystore ../codesign.p12 myApp.air myApp-app.xml myApp.swf icons

此示例假设指向 ADT 工具的路径存在于命令行 shell 的路径定义中。(有关帮助信息,请参阅 路径环境变量 。)

必须从包含应用程序文件的目录运行此命令。示例中的应用程序文件是 myApp-app.xml(应用程序描述符文件)、myApp.swf 和图标目录。

当运行如上所示的命令时,ADT 会提示输入 keystore 密码。(键入的密码字符不会总是显示;只需在键入结束后按 Enter。)

从 AIRI 文件创建 AIR 包

您可以对 AIRI 文件进行签名,以创建可安装的 AIR 包:

adt -sign -storetype pkcs12 -keystore ../codesign.p12 myApp.airi myApp.air