如何打包和部署air应用程序

昨天折腾了一个晚上,终于把我写的美女时钟桌面 的air应用程序给发布出去了,在发布的过程中还出现了点问题(下文有说明),不过总算解决了累死我了。 Air应用程序的部署和发布不是一般的麻烦,想来很多和我一样的Air初学开发者在部署Air应用程序可能都不知道怎么做,于是我写了这篇文章,希望能对你有所帮助。 如果你想发布一个Air程序,需要两个步骤,打包和部署。下面对这两个步骤都做详细的说明。本文以上次发布的 美女时钟桌面 作为示例。

一、打包Air应用程序

步骤1. 生成签名文件(数字证书, CA)

Air的应用程序签名(CA)是强制,不签名无法打包应用程序,签名基于RSA不对称加密,生成一对公钥和私钥,使用私钥加密应用程序,同时公布把公钥打包到应用程序中,可以防止其他用户修改发布的Air应用程序然后再发布。 一般来说,获得签名文件的方法有两种:

  • 1) 可以向安全的证书管理机构如VeriSign或Thawte获取证书,这种证书是安全的,并且Air安装程序可以自动联网获取证书信息,如签名者,颁发机构,有效期等。如果联网能查到当前Air安装程序的信息,表明这个程序是未被修改的,原始程序。当然这个需要交纳一定的费用,如果你是开发一个完整的应用程序,并且能保证随时更新,还是建议你使用这种方式获取签名文件。
  • 2) 使用 ADT 创建自签名证书,您可以生成有效的 AIR 安装文件,但由于无法验证自签名证书的可靠性,因此该证书只能向用户提供有限的安全保证。当安装自签名 AIR 文件时,发行商信息将对用户显示为“未知”。ADT 生成的证书有效期为五年。如果只是测试Air应用程序,推荐这种方式。

这里采用第二种方式发布,简单,免费,方便。 首先请确保 命令 AdobeAIRSDK/bin/adt.bat (linux下为adt)在环境变量中,然后执行以下命令:

1.adt -certificate -cn solosky -o solosky.net 1024-RSA SigningCert.p12 god!1#$

参数说明如下:

  • -certificate 当前命令为生成签名文件
  • -cn solosky 分配的作为新证书公共名称,必须。这里是solosky
  • -o solosky.net 被分配作为证书颁发组织名字。可选。这里是solosky.net
  • 1024-RSA 用于证书的密钥类型,即“1024-RSA”或“2048-RSA”,必须,这里是1024-RSA
  • SigningCert.p12 保存证书的文件名字,必须,这里是SigningCert.p12
  • god!1#$ 签名私钥,以后签名程序的时候需要输入这个密码,必须,这里是god!1#$

执行完毕后会在当前目录生成一个SigningCert.p12的签名文件,请妥善保管好这个文件,以后更新程序的时候需要使用相同的签名文件签名程序,否则无法完成更新操作; 更多关于adt签名的信息请参考这里 对 AIR 应用程序进行签名

步骤2. 打包Air应用程序

生成签名文件之后,接下来就可以直接打包为.air的安装文件了。 首先用cd命令进入air应用程序目录,然后执行以下命令

1.adt -package  -storetype pkcs12 -keystore ../shells/SigningCert.p12 -keypass god!1#$ girlclock-1.0.air girlclock-air.xml .

参数说明如下:

  • -package 当前命令为打包air应用程序
  • -storetype pkcs12 签名密钥类型,保持不变
  • -keystore ../shells/SigningCert.p12 签名文件地址,切记一定不要放在应用程序目录下,否则签名文件也会打包到应用程序。。。
  • -keypass god!1#$ 签名文件的私钥,创建签名文件的时候输入的密码,运行之后仍需输入一次
  • girlclock-1.0.air 输出的air发布程序名,一般都以air为后缀
  • girlclock-air.xml 应用程序的描述文件
  • . 打包的目录,.表明是当前目录,切记别忘记最后面的一点

命令执行完毕,在当前目录会生成girlclock-1.0.air的air部署文件,整个打包过程完成; 更多关于adt打包信息请参考 使用 AIR Developer Tool (ADT) 打包 AIR 安装文件

如何生成exe可执行程序

你还可以指定target native参数,生成本地的可执行文件(window下为exe,linux为deb或者rpm,MacOS为dmg),但这就丧失的air的跨平台性。 如下命令将会生成girlclock-1.0.exe文件:

1.adt -package  -storetype pkcs12 -keystore ../shells/soloskyAirSign.p12 -keypass god!1#$  -target native girlclock-1.0.exe girlclock-air.xml .

如果生成本地可执行文件,请注意以下几点:

  • 1. 这种发布文件无法通过下面的网页部署方式部署;
  • 2. 可以直接把可执行文件发布出去,用户下载可执行文件,第一次运行时会自动检测Air运行时环境,如果没有会自动下载安装,满足安装条件后会自动安装到系统中,并在开始菜单中创建快捷方式,系统程序卸载工具中创建卸载方式;
  • 3. 如果你的应用程序需要支持NativeProcess(即supportedProfiles配置为extendedDesktop),则必须采用这种方式打包和部署,我在这里纠结了很久;
  • 4. 无法支持Air的Update框架,但有开源的解决方案(请google之);

二、部署应用程序

因为Air应用程序运行需要Air运行时环境,所以部署起来有点复杂,这里提出了三种部署方式,建议在发布air应用程序的时候,这三种方式都采用,尽量让所有的用户都能顺利的安装上air应用程序;

1. Web部署

这种方式只适合打包类型为.air类型的应用程序的部署。 直接把.air的文件提供给用户下载是不行的,因为Air应用程序运行需要Air运行时环境,所以假如用户没有安装air运行时环境,就无法运行.air的应用程序。好在air官方发布了一个统一的安装包,可以在网页上直接安装air应用程序,并且会自动检测用户是否安装air运行时环境,如果没有会自动下载安装,提供了无缝的安装体验,非常的方便,只不过部署起来比较麻烦:

  • 1. 先从官方网站下载 air安装包文件(Adobe AIR Badge Installer),并解压;
  • 2. 建立web目录,把生成的.air应用程序文件(girlclock-1.0.air),以及解压之后的安装包文件里面的AIRInstallBadge.swf,swfobject.js,expressinstall.swf四个文件复制到web目录下;
  • 3. 为你的应用程序截图,调整大小为205×170像素,重命名为snap.png也复制到web目录中;
  • 4. 新建一个文件deploy.html,复制下面的内容到这个文件里,然后修改部分参数,保存(当然你也可以复制到你的发布页中,注意一定要包含swfobject.js脚本);
    01.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    02.<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    03.<head>
    04.<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    05.<title>美女时钟桌面 v1.0 在线安装</title>
    06.<script type="text/javascript" src="swfobject.js"></script>
    07.</head>
    08.<body>
    09.<div id="flashcontent" style="width:215px; height:180px;">
    10.<strong>请升级你的Flash Player。</strong>
    11.程序安装需要 Flash Player 6.0.65 或者更高版本的Flash Player。
    12.</div>
    13.<script type="text/javascript">
    14.// <![CDATA[
    15.  
    16.// version 9.0.115 or greater is required for launching AIR apps.
    17.var so = new SWFObject("AIRInstallBadge.swf", "Badge", "215", "180", "9.0.115", "#FFFFFF");
    18.so.useExpressInstall('expressinstall.swf');
    19.  
    20.// 下面的参数在网页安装air应用程序的是必须的
    21.so.addVariable("airversion", "2.5"); // 修改为运行你的air应用程序需要的最低运行时环境版本
    22.so.addVariable("appname", "GirlClock"); // 修改为应用程序名,将会在安装界面上显示给用,仅支持英文....
    23.so.addVariable("appurl", "http://labs.solosky.net/air/girlclock/girlclock-1.0.air"); //你的.air打包文件的绝对地址,必须以http或者https开头
    24.  
    25.// 下面的参数在网页启动air应用程序是必须的,但安装时是可选的,
    26.so.addVariable("appid", "net.solosky.girlclock"); // 应用程序Id,命名方式类型于java的包命名方式(ex. com.gskinner.air.MyApplication)
    27.so.addVariable("pubid", ""); // publisher id
    28.  
    29.// 这个参数是可以为airy应用提供在线升级支持
    30.so.addVariable("appversion", "1.0"); //你的应用程序版本
    31.  
    32.// 下面的参数是可选的
    33.so.addVariable("image", "snap.png"); // 应用程序截图(205x170像素),推荐设置
    34.  
    35.//下面的参数请根据自己需要修改
    36.so.addVariable("appinstallarg", "installed from web"); // passed to the application when it is installed from the badge
    37.so.addVariable("applauncharg", "launched from web"); // passed to the application when it is launched from the badge
    38.so.addVariable("helpurl", "help.html"); // optional url to a page containing additional help, displayed in the badge's help screen
    39.so.addVariable("hidehelp", "false"); // hides the help icon if "true"
    40.so.addVariable("skiptransition", "false"); // skips the initial transition if "true"
    41.so.addVariable("titlecolor", "#00AAFF"); // changes the color of titles
    42.so.addVariable("buttonlabelcolor", "#00AAFF"); // changes the color of the button label
    43.so.addVariable("appnamecolor", "#00AAFF"); // changes the color of the application name if the image is not specified or loaded
    44.  
    45.so.write("flashcontent");
    46.  
    48.// ]]>
    49.</script>
    50.</body>
    51.</html>

    现在整个目录的内容如下图:air-web-deploy-dir

  • 5. 将web目录下面的所有文件上传到你的网站服务器上,然后输入deploy.html查看是否出现安装提示。如下图:air-web-deploy-preview

更多关于air无缝安装包(Adobe AIR Badge Installer)请参考 Getting started with the custom install badge

2. 本地程序部署

使用上面的打包方法打包为本地应用程序,如indow下为exe,linux为deb或者rpm,MacOS为dmg,可以直接双击执行,但不包含air运行时环境,当用户运行应用程序的时候会自动自动检测系统是否已经安装air运行时环境,如果没有会自动下载并安装。 这种类型的发布程序部署比较简单,直接发布出去即可,

3. 包含air运行时环境部署

这种方式可以直接把air运行时环境和air应用程序打包在一起,而不用考虑用户是否已经安装了air运行时环境。但由于包含了air运行时环境,所以有点大,大概20M左右的大小,对于无法联网或者自动安装失败的用户可以尝试使用这种方式发布。 网上的方案比较多,这里还是推荐 梦宇工作室 编写的 AirLauncher 来打包air应用程序。 遗憾的是仅支持windows。原理很简单,就是启动进程调用adl命令启动程序,但没有命令行窗口。

  • 1. 首先建立pack目录,然后把应用程序的所有文件都复制到pack目录中;
  • 2. 在pack目录中建立AdobeAIRSDK目录,并把AIRSDK目录下面的bin和runtimes复制到pack/AdobeAIRSDK下;
  • 3. 复制AirLauncher.exe到pack目录下,并修改应用程序描述符为application.xml;双击运行AirLauncher.exe看能否启动air程序,如果能,工作完成了大部分href=”http://flexlessons.googlecode.com/files/ResHacker%203.5.zip”>ResHack修改;整个文件目录结构如下图:air-pack-deploy-dir
  • 4. 你可以重命名AirLauncher.exe为你的应用名称,如girlclock.exe,程序图标可以使用
  • 5. 打包pack目录下的所有文件为.zip文件,并发布这个压缩文件到网页上即可。

你可以在这里查看AirLauncher的作者更详细的打包教程:用WinRAR制作脱离AIR运行时的AIR程序安装包

上面三种方式都可以完成air应用程序的部署,推荐使用Web部署和本地部署,包含air运行时环境部署也建议一并发布,如果每一种方式不可用,可以尝试其他的安装方法。尽量让每个用户都能用上你写的air应用程序。

posted @ 2013-12-23 13:26  Lunaa  阅读(397)  评论(0编辑  收藏  举报