Adobe Air vs Flash Player 10.1 Runtime - air

Adobe Flash Player is a browser
plug-in that provides advantages for
users and content creators in the
browser, including the ability to
deliver RIAs in the browser. Adobe AIR
incorporates technologies originally
developed in Flash Player and enables
rich Internet applications on the
desktop. Adobe AIR and Flash Player
provide complementary deployment
methods for the RIAs.
as in here
Here are a couple of conceptual questions :
Since both runtimes consume .swf
files, what is the difference?
What is the end product of a compiled
AIR Application-a .swf/.air?
If AIR is just a deployment
mechanism, why is it called a
runtime?
Does Adobe AIR applications allow
states and transitions like a mxml
application ? -both can be authored
using Flash Builder

Adobe AIR runs on the same technology as Flash (i.e. your AIR apps will run in the Flash player.) The difference is the additional libraries available in AIR to allow you to more easily create Rich Internet Applications, as opposed to Flash itself which is targeted at animation and games creation.
The end product of a compiled AIR application is either a .air file or a natively packaged .exe/.dmg file (if targeted at the desktop in AIR 2+)
The .air file is just a zip file which contains a .swf file and relevant directories from your project (such as unembedded assets).
The .exe file is the same except for it also contains code to download and install the Adobe AIR Runtime if the user does not have it installed on their system. This can be very useful if you want your application to run only on the desktop as it means users won't get an 'open this file with..' message when they run the app without the runtime installed.
The Adobe AIR runtime is what allows your operating system to interpret .air files and install/run them on the system. It contains the relevant AIR libraries not included in Flash.
Adobe AIR when combined with Flex (mxml application) does allow states and transitions. States and transitions are a feature of Flex, so you would need to be using the Flex SDK in your project to use them.

Related

Is it possible to run an Adobe AIR app without installation?

Is it possible to run an Adobe AIR app without installing it? The AIR runtime is already installed, and we need a solution to control the 'installation' of applications - so what we need is run an adobe air app which just runs and doesn't presents the installer when launched.
Yes it is. Adobe call it a captive runtime, and I believe this is only supported under Adobe Air 3.0 and up.
Their website does a good job of explaining various pros and cons at Packaging a captive runtime bundle for desktop computers

adobe air: how to embed air runtime or simply distribute air applications?

My question is quite simple: I want to create an adobe AIR application for desktop (windows).
What if an user does not have AIR runtime installed ? Does newest version of AIR come now with EMBEDDED AIR runtime, so it works even for people that do not have AIR runtime installed ?
if not, what would be the simplest way to distribut my AIR application and make sure people that do not have air runtime will be able to run it ?
regards
With the Release of the AIR 3.0 SDK you are now able to distribute Air with your application using the Captive Run Time
This will allow a user to install and run your Air application without having the runtime already installed.
There are some downsides however. For mobile applications (and desktop alike) including the captive runtime can increase the package size by around 10MB. Also, for desktop applications, you will have to package the application natively (ie .exe or .dmg) but if the user doesn't have the runtime installed in the first place they can't run the .air file anyway.
I've had to do this just recently and wanted to know exactly what you just asked.
http://www.adobe.com/devnet/air/articles/badge_for_air.html
That is what you need to know and will answer your question.
All you need to do then is deploy your .air file onto a server somewhere and point the javascript code to it.
HTH
Anthoni

Setting up Flash CS4 to use Adobe AIR 2.6

I use FlashDevelop as my code editor and the Flash CS4 IDE for publishing my AIR files (as well as asset control, animation creation etc...). The bonus of this is the Flash IDE handles all the crap of creating certificates and whatnot very easily as well.
Flash CS4 uses Adobe AIR 1.5, which is very old and I am wanting to update it to AIR 2.6, which as of current writing, is the latest version of AIR. Also, I don't know if this is of any significance, but I would like to publish AIR apps for Android now. I've successfully made an AIR app for PC in the past, using AIR 1.5.
I downloaded the AIR 2.6 SDK from the Adobe website and replaced all the files inside the "AIK1.5" folder of my Flash installation (the folder being still named 1.5 inherently annoys me).
Is there any other steps I must take? Because I'm not convinced I'm publishing AIR 2.6 apps as the application.xml file in my AIR project still reads:
<application xmlns="http://ns.adobe.com/air/application/1.5">
If I change the version in the .xml, Flash explodes (doesn't compile, gives me an error).
Furthermore, if I go File > Publish Settings, then the Flash tab, the player field reads as "Adobe AIR 1.5". Is this right? I'm assuming this will always be this way, even if you do successfully update the AIR version, since apparently Adobe is too lazy to update CS4 so that it can logically figure out it has the new version of AIR.
Also, if AIR is free, why the hell does Adobe not at the very least, release updates to CS4 that update the version of AIR it uses. This seems to be fully within their power, and it seems incredibly negligent that they don't do this for people who have bought their software.
Please, if you could provide clear step by step help, because I'm very ignorant when it comes to development configurations and stuff. I just want to write code and be off.
UPDATE
Once you've updated Flash's AIR library with AIR 2.6, and have compiled your AIR project, make sure you use the new application descriptor template from the AIR SDK. I originally thought it just required changing the version number from 1.5 to 2.6 or whatever new version you're using. As seen below.
<application xmlns="http://ns.adobe.com/air/application/1.5">
But the format as changed, and you really need to use the new template, otherwise it won't work. And when you compile you won't automatically get a preview of your compiled .swf. This will happen in FlashDevelop too if you've set-up your descriptor file incorrectly.
Bzzzzzzt wrong you can hack apart your CS IDE and get it working follow the concepts in this tutorial, they should get you going and you should be able to piece it together from there.
http://swfhead.com/blog/?p=16
If you have any problems just post a comment I'll help you sort it.
You will need to purchase the latest version of Creative Suite or Flash/Flash Builder to take advance of the latest versions of AIR.
Like any other software, releases are versioned with specific features and newer versions support newer features and integration into other newer technologies.
Its like Microsoft is well in their power to provide docx support in windows 2003, but that would just cause compatibilty, support and licensing issues.
These are the tutorial for Flash cs 5:
http://blog.prevail.co.nz/2011/06/21/overlaying-air2-7-in-flash-cs5/
These are the tutorial for Flash cs 5.5:
http://www.yeahbutisitflash.com/?p=2949
http://helpx.adobe.com/x-productkb/multi/overlay-air-sdk-flash-professional.html
This is the tutorial for Flash cs 6:
http://www.leebrimelow.com/?p=3335

Decompiling Adobe AIR applications

Are there tools for decompiling Adobe AIR applications?
I want to check how do they work on the apps I have made.
Packaged AIR files (those with .air extension) are ZIP files. You can use any ZIP program to pull them apart.
However, AIR apps can be written in Flash, Flex or HTML/JavaScript. If the app you want to look at is not the latter, you will need a Flash or Flex decompiler.
Here is what you are looking for ;)
http://www.sothink.com/product/flashdecompiler/index.htm
Sothink SWF Decompiler claimed the file was corrupt.
What worked for me, was JPEXS Free Flash Decompiler which had the added benefit of being open source and completely free.
https://github.com/jindrapetrik/jpexs-decompiler/releases

How can I load the AIR runtime as a in-process shared library from a C program

I'd like to build a special AIR launcher program in C along the lines of java.exe.
I've looked at running AIR programs with a process viewer and was able to locate the AIR runtime DLL that is being used. AIR programs are different than Java in that they are installed as platform-specific executables that bind the AIR runtime as an in-process shared library once they're launched (their icon is double-clicked by the user).
Well, I want to make an AIR launcher that is instead like the java.exe.
The java.exe is launched as a platform OS process that binds to the Java JVM runtime (JRE) as an in-process shared library. The java application that is to be executed is specified as a command-line argument to java.exe. Once java.exe is running and the JVM is fully functional, the specified java application class is loaded by the JVM class loader for execution. That specified Java application then takes over, in a sense "hijacking" the process of java.exe. Of course, the specified java application shows up in any process listing as the java.exe program that host it.
I want to make AIR app launching work like this. Why? So I can explore ways to hack AIR and perhaps overcome some of its many, many deficiencies. For instance, for starters I want to extend the AIR runtime experience with some new APIs that become available to the running AIR application.
My first order of business would be to:
Implement a binding interface of
ActionScript3 to C that is comparable
to .NET PInvoke
Add an API for process launching that
is comparable to the APIs found in
Java SE for doing this (Runtime.exec,
ProcessBuilder, Process)
Add support for an AIR application to
be able to interact with stdin,
stdout, stderr. Strangely, though
Adobe added support for local file
access in AIR, they have omitted
interaction with these standard file
pipes (yet they are found on any
OS platform that AIR supports).
Implement support of AMF over stdin,
stdout, stderr - so AIR (or Java or
any AMF capable language) apps can
interprocess communication via
exchanging AMF objects. This would add
a touch of Microsoft's PowerShell
to AIR.
Currently Merapi provides a AMF bridge with Java, so that demonstrates the efficacy of this. Alas, Merapi has to use a localhost port and socket for doing the interprocess communication - which is a clumsy way to go relative to using stdin/stdout/stderr interprocess pipes instead.
It sounds like you want to do some very hardcore AIR hacking. I don't think hosting the AIR runtime in your own process will be very easy. But you might consider embedding the Flash Player ActiveX Control. Since it is just a COM object, any COM application can CoCreateInstance() the Flash Player. The COM interface is not well documented, but here are some examples that might be helpful:
F-IN-BOX is a developer's library to enhance Macromedia Flash Player ActiveX features. It does not use its own engine to display movies but provide a wrapper around official swflash.ocx/flash.ocx code instead.
How to embed Flash Player ActiveX using BoxedApp SDK
If you want to get even lower level access, you could embed the open-source Tarmain AS3 VM. The code has an example command-line shell called "avmshell". If you build the Tamarin VM yourself, you can add new ActionScript classes implemented in native C++. Tamarin (and the Flash Player) implement many of their features using this "AVM Glue" between AS and C++.
What my question posed attempting to do turns out to be prohibited by Adobe (so far as any potential commercial use):
From the Adobe® AIR™ Runtime Distribution FAQ:
Distribute or use the Adobe AIR
runtime, installer files, or extracted
installer files in an undocumented
manner or purpose. For example, you
may not distribute, call directly, or
write wrappers for any of the Adobe
AIR libraries or runtime components
within your software application.
Runtime.dll, Runtime executables,
template.exe, and template.app are
examples of Runtime Components.