AIR, Flex / Flash, FMS, PushButton, Game… Developer
Posts tagged Adobe AIR
Tip of the Day – Populate Version Number from an AIR Descriptor File in ANT
Apr 19th
So I’ve seen this question pop up a few times.
Can I grab a version number from the app-descriptor via ant and add that to the AIR filename? Anyone know?
This is a pretty straight forward thing to do using Ant-Contrib tasks, that are publicly available.
You can download the example files –> here.
Let’s take a quick look at the ANT script.
<project name="PopulateVersion" default="populateVersion" basedir="."> <taskdef resource="net/sf/antcontrib/antcontrib.properties"> <classpath> <pathelement location="./ant-contrib.jar"/> </classpath> </taskdef> <property name="app.descriptor" value="air-app.xml" /> <target name="populateVersion"> <echo message="Parsing application.version from ${app.descriptor}"/> <xmlproperty file="${app.descriptor}" prefix="airApp.appdescriptor"/> <propertycopy property="versionNumber" from="airApp.appdescriptor.application.versionNumber" override="true" /> <echo message="Parsed application version: ${versionNumber}"/> <propertyregex property="fileVersionNumber" input="${versionNumber}" regexp="\." replace="_" casesensitive="false" /> <echo>Version Number: ${versionNumber}</echo> <echo>File Version Number: ${fileVersionNumber}</echo> </target> </project>
As you can see it’s very straight forward to parse the version number out of the Application Descriptor. The only other thing we do is us RegEx to change the periods in the version number to underscores to make for more friendly file names.
Using the same concept it is very easy to also populate a Version file that gets compiled into your application which can include build numbers, or other interesting things… but we’ll save that for another day.
Tip of the Day – Creating an AIR application for a kiosk
Jan 30th
Today I needed to prototype a chromeless AIR application for use in a kiosk. It’s actually a whole lot easier than I thought it would be.
Here’s a quick example of what you can do with Adobe AIR and FlexMDI.
The cool thing about Adobe AIR is that it can run on Linux. So if I needed to deploy thousands of kiosks I could install Linux on them and save on windows licensing.
Here is the application source:
<?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:flexmdi="flexlib.mdi.containers.*" layout="absolute" backgroundColor="0x000000" showFlexChrome="false" applicationComplete="onReady()"> <mx:Script> <![CDATA[ import mx.core.UIComponent; import mx.controls.Button; import mx.core.Application; import mx.events.MenuEvent; import flexlib.mdi.containers.MDIWindow; import flash.display.StageDisplayState; import net.natebeck.BrowserWindow; [Bindable] public var ADOBE:String = "Adobe"; // FlexMDI Manager layout types [Bindable] public var TILE:String = "Tile"; [Bindable] public var TILE_FILL:String = "Tile and Fill"; [Bindable] public var CASCADE:String = "Cascade"; // File Menu [Bindable] public var EXIT:String = "Exit"; [Bindable] public var buttons:Array = [] private function onReady():void { // Enter Fullscreen Interactive State stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; } public function openWindow(event:MenuEvent):void { var location:String = ""; switch(event.label) { case ADOBE: location = "http://www.adobe.com"; break; case CASCADE: mdic.windowManager.cascade(); break; case TILE: mdic.windowManager.tile(false, 10); break; case TILE_FILL: mdic.windowManager.tile(true, 10); break; case EXIT: var exitingEvent:Event = new Event(Event.EXITING, false, true); this.nativeApplication.dispatchEvent(exitingEvent); if (!exitingEvent.isDefaultPrevented()) { this.nativeApplication.exit(); } break; } if(location.length > 0) { var window:BrowserWindow = new BrowserWindow(); mdic.windowManager.add(window); window.title = event.label; window.location = location; window.maximize(); } } ]]> </mx:Script> <mx:ApplicationControlBar dock="true"> <mx:MenuBar id="myMenuBar" labelField="@label" width="100%" height="100%" itemClick="openWindow(event);" > <mx:XMLList> <menuitem label="File" > <menuitem label="Exit"/> </menuitem> <menuitem label="Launch" > <menuitem label="Adobe"/> </menuitem> <menuitem label="Window" > <menuitem label="Tile"/> <menuitem label="Tile and Fill"/> <menuitem label="Cascade"/> </menuitem> </mx:XMLList> </mx:MenuBar> </mx:ApplicationControlBar> <flexmdi:MDICanvas id="mdic" top="10" bottom="10" left="10" right="10"/> </mx:WindowedApplication>
And here is Browser.mxml
<?xml version="1.0" encoding="utf-8"?> <flexmdi:MDIWindow xmlns:flexmdi="flexlib.mdi.containers.*" xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300"> <mx:Script> <![CDATA[ [Bindable] public var location:String = ""; ]]> </mx:Script> <mx:HTML width="100%" height="100%" location="{location}" /> </flexmdi:MDIWindow>
The full application can be downloaded here.
:: Update ::
There seems to a be a little bug in the applicaiton… when you’re rendering HTML with Flash Content within it. It won’t display in StageDisplayState.FULL_SCREEN_INTERACTIVE mode. However, if you hit the ESC key… the flash content will show up. I’ll have to check and see if there is a bug filed on this.
