AIR问题
特别注明一下air2要自己下sdk
一年前air做打印弹出一个确认框框,没法去掉这个框框,于是放只能放弃air.
搜到个国外论坛找到了swfkit 这玩意将swf打包成exe
在PrintJob前加上下面两句话问题得已解决
接一来是自动更新的问题,值得庆幸的是 swfkit脚本可以调用exe,无耐同事找了一个开源的dephi程序完成了自动升级
var fp:FlashPlayer=new FlashPlayer(); fp.showPrintDlg=false; var printJob:PrintJob=new PrintJob();
幸福的时光都是短暂的。悲剧的事情发生了。开源的升级程序让那该死的360报成木马。客户有意见了。
一阵冷汗后 又想回到air去完成自动升级,air2可以调exe了。又可以升级。感觉上蛮良好。弹出打印对话框的事再议,同
事写了一个程序 不断 监听 那个对话框。出来了就默认点击确认,对话框问题解决了。
幸福的时光仍是短暂。调试的一切正常,我的心都快喷出来了。纠结我一年的问题今天都解决了。
官方打印问题居然也解决了。
新的打印支持可以更好地控制从 AIR 应用程序打印内容的方式,包括选择打印机、纸张大小和副本数。通过新的 API,开发人员可以检索其他打印信息,例如可打印区域、打印机是否可以打印彩色以及打印作业当前是否处于活动状态。还可以在打印时不显示打印对话框。
var printJob:PrintJob=new PrintJob(); if(printJob.start2(null,false)){}
打包运行。fuck,调用exe报异常。完成没心理准备。他姐的真是打击啊。还好,有事不决问google,菩萨保佑有解决方
案, flex不成熟真是不成熟,不成熟弄死你我。打包出来的air安装是无法调用exe的。必需打成本地文件:
adt -package -target native TechPos.exe TechPos.air
高兴啊。试一下,打印问题是好的。 air的更新好做:代码如下
private var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI(); private function checkForUpdate(server:String,port:String,validateFile:String = "update.xml"):void { appUpdater.updateURL = "http://"+server+":"+port+"/posinstall/"+validateFile; // Server-side XML file describing update appUpdater.isCheckForUpdateVisible = false; // We won't ask permission to check for an update appUpdater.addEventListener(UpdateEvent.INITIALIZED, onUpdate); // Once initialized, run onUpdate appUpdater.addEventListener(ErrorEvent.ERROR, onError); // If something goes wrong, run onError appUpdater.addEventListener(UpdateEvent.CHECK_FOR_UPDATE,onError); appUpdater.addEventListener(UpdateEvent.INITIALIZED,onError); appUpdater.addEventListener(UpdateEvent.DOWNLOAD_START,onError); appUpdater.addEventListener(UpdateEvent.DOWNLOAD_COMPLETE,onError); appUpdater.addEventListener(UpdateEvent.BEFORE_INSTALL,onError); appUpdater.addEventListener(StatusUpdateEvent.UPDATE_STATUS,onError); appUpdater.addEventListener(DownloadErrorEvent.DOWNLOAD_ERROR,onError); appUpdater.initialize(); // Initialize the update framework } private function onError(event:ErrorEvent):void { Alert.show("请检查服务器设置是否正确!"+event.toString()); } private function onUpdate(event:UpdateEvent):void { appUpdater.checkNow(); // Go check for an update now }
<?xml version="1.0" encoding="utf-8"?> <update xmlns="http://ns.adobe.com/air/framework/update/description/1.0"> <version>2.0</version> <url>http://localhost:8080/app.air</url> <description>--> <![CDATA[--> New version includes:--> * Feature 1--> * Feature 2--> * Feature 3 --> ]]>--> </description></update>
哎,真是万恶的adobe啊。居然更新不成功!
再拿app.air 安装 测试。。更新成功!
看到了曙光,真是开源的伟大啊 http://code.google.com/p/nativeapplicationupdater/
<?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:updater="http://updater.riaspace.com/" creationComplete="updater.initialize()"> <fx:Script> <![CDATA[ import air.update.events.UpdateEvent; protected function updater_initializedHandler(event:UpdateEvent):void { updater.checkNow(); } ]]> </fx:Script> <fx:Declarations> <updater:NativeApplicationUpdater id="updater" updateURL="https://yoursecurehost.com/download/update.xml" initialized="updater_initializedHandler(event)"/> </fx:Declarations> <s:Label text="You are updated to version: {updater.currentVersion}" horizontalCenter="0" verticalCenter="0" /> </s:WindowedApplication> Here is an update descriptor xml that the updateURL property is pointing to: <?xml version="1.0" encoding="utf-8"?> <update xmlns="http://ns.riaspace.com/air/framework/update/description/1.1"> <!-- Mac update --> <dmg> <version>1.0.1</version> <url>https://yoursecurehost.com/download/YourApplication.dmg</url> <description> <![CDATA[ * This a Mac update ]]> </description> </dmg> <!-- Win update --> <exe> <version>1.0.1</version> <url>https://yoursecurehost.com/download/YourApplication.exe</url> <description> <![CDATA[ * This a Win update ]]> </description> </exe> <!-- Debian update --> <deb> <version>1.0.1</version> <url>https://yoursecurehost.com/download/YourApplication.deb</url> <description> <![CDATA[ * This a Debian update ]]> </description> </deb> <!-- Redhat/Fedora/OpenSUSE update --> <rpm> <version>1.0.1</version> <url>https://yoursecurehost.com/download/YourApplication.rpm</url> <description> <![CDATA[ * This a Redhat/Fedora/OpenSUSE update ]]> </description> </rpm> </update>
不尽人意的是不是官方提供的。就是检测下载,覆盖安装。。
测试期间弄了一段ant脚本。官方copy过来的还不能跑。有一些调整。也贴出来吧。
有一些变量可能要自己替换,以供大家参考吧
注意红色的地方,我被困了一下。-C变量是指进入当前目录,包含哪些目录只要加arg 就可以了
<property name="SDK_HOME" value="D:/Program Files/Adobe/Adobe Flash Builder 4 Plug-in/sdks/3.5.0.air.2"/> <property name="ADL" value="${SDK_HOME}/bin/adl.exe"/> <property name="ADT.JAR" value="${SDK_HOME}/lib/adt.jar"/> <property name="MXMLC.JAR" value="${SDK_HOME}/lib/mxmlc.jar"/> <!-- Project properties --> <property name="PROJ_ROOT_DIR" value="${PROJECT_ROOT}/src/pos"/> <property name="APP_NAME" value="TechPos"/> <property name="APP_ROOT_DIR" value="${APP_ROOT}"/> <property name="APP_ROOT_FILE" value="${APP_NAME}.swf"/> <property name="APP_DESCRIPTOR" value="${PROJ_ROOT_DIR}/${APP_NAME}-app.xml"/> <property name="AIR_NAME" value="${APP_NAME}.air"/> <property name="release" location="${PROJ_ROOT_DIR}/release"/> <property name="STORETYPE" value="pkcs12"/> <property name="KEYSTORE" value="aaaaaa.p12"/> <property name="MAIN_SOURCE_FILE" value="${PROJ_ROOT_DIR}/${APP_NAME}.mxml"/>
<target name="init" depends="clean"> <mkdir dir="${release}"/> </target> <target name="test"> <echo>${APP_DESCRIPTOR}</echo> <echo>${APP_ROOT_DIR}</echo> <exec executable="${ADL}"> <arg value="${APP_DESCRIPTOR}"/> <arg value="${APP_ROOT_DIR}"/> </exec> </target> <target name="package" depends="clean" description="package"> <java jar="${ADT.JAR}" fork="true" failonerror="true"> <arg value="-package"/> <arg value="-storetype"/> <arg value="${STORETYPE}"/> <arg value="-keystore"/> <arg value="${KEYSTORE}"/> <arg value="-storepass"/> <arg value="aaaaaa"/> <arg value="${DEPLOY_DIR}/${AIR_NAME}"/> <arg value="${APP_DESCRIPTOR}"/> <arg value="-C"/> <arg value="${APP_ROOT_DIR}"/> <arg value="${APP_ROOT_FILE}"/> <arg value="opendoor.exe"/> <arg value="public"/> <arg value="images"/> <arg value="lag"/> <arg value="logo"/> </java> </target>
<target name="keystore"> <java jar="${ADT.JAR}" fork="true" failonerror="true"> <arg value="-certificate"/> <arg value="-cn"/> <arg value="SelfSigned"/> <arg value="1024-RSA"/> <arg value="aaaaaa.p12"/> <arg value="aaaaaa"/> </java> </target>
要是哪一天flex air 等等更完美了。。。 别忘通知我一声