Flash Brings the Web to Life

We just posted a few new videos to give you an update on mobile apps and the breadth of Flash content on the Web available on exciting new devices, like the upcoming Dell tablet.

Standalone Apps Outside the Browser

With dozens of tablets and new smartphones coming to market over the coming weeks and months, developers want to know how to deploy and monetize their apps across screens without having to rewrite apps for every platform and device – from smartphones, to tablets, netbooks, televisions, and others.

Today, we announced that more than 100 AIR apps, coming out of a limited pre-release program with developers, are available on Apple’s App Store. Created with Flash Pro CS5 and wrapped as native apps (via the Packager for the iPhone, a capability of AIR 2), AIR apps can be distributed to the iPhone and Apple’s tablet today, as well as Android, BlackBerry and other platforms in the coming months. Check out two videos for more details at:

Packager for iPhone Demos from Mark Doherty on Vimeo.

Browsing of Flash Content on New Mobile Devices

At the same time, Adobe and its partners believe in the free flow of content across screens and in enabling consumers to browse the full Web, including over 70% of games and 75% of video that are delivered with Flash. Check out this new video, which features different mobile devices including a sneak peak of one of Dell’s new tablets (5” tablet, not released yet) plus Dell’s 12” smartbook (Latitude Xt2) running a broad variety of Flash content.

We are excited to work with Dell to bring uncompromised Web browsing to its new devices. As previously announced, we’re also working with HP on their new line of tablets that will deliver the full Web with support for Flash Player 10.1.

Adobe AIR – Packager for iPhone OS demos

We’re getting closer and closer to the launch of Flash Professional CS5, our Flash authoring tool ships with our Packager for iPhone preview. With the new tool it’s possible to create Adobe AIR applications based on Flash, and ship those on the Apple AppStore.

As you may have noticed, we have been shipping our own mobile applications for a while now, including Photoshop.com Mobile on Android, iPhone, Windows Mobile, and Acrobat Connect on the iPhone.  In just these few short months we’ve managed over 6 million downloads already, and I’m looking forward to seeing future Adobe products on different form factors.

Of course some developer agencies have already been pushing out their first Flash-based applications using the pre-release packager.  So I thought it would be interesting to have a look at the progress being made, enjoy the “presentation” :-)

Although I’ve focused on the iPhone here, everything that you have seen can run on other platforms with a few tweaks.  That’s the benefit of using Flash and AIR for your mobile and devices content.

Flash Player 10.1 – Camera support with PhoneGap

Some of you will remember my earlier blog posts in August 2009 on the HTC Hero, the first Android device to ship with Flash.  The goal of the Android experiment was to learn about the Android SDK, the development process and discover how Flash was enabled in the context of the browser.

As we edge closer to the release of Flash Player 10.1 in the first half of this year, it seems appropriate to revisit these posts.  In this post you’ll see that there are hidden benefits to using a common runtime across device platforms, some of which are not that obvious.

The result of my week long investigation is that (using the beta version) I can hook up Flash Player 10.1 to the camera; but that’s just the start.  Let’s look at how it’s done…


Those of you familiar with Nokia’s WebRuntime or the iPhone UIWebView will recognize WebView, because it’s the same thing.  Really it’s an implementation of the browser made available as a UI component for native applications.  So this means that you can create an application in HTML/JScript and manage the user experience through a native shell.

So why is WebView useful?  Let’s look at the relevant classes:

  • WebView – Used to load and display web pages using the built-in device browser and chrome, embedded into your application.
  • WebViewClient – Enables the handling of various browser actions like page loading and error handling.  Overrides the Activity in the built in browser.
  • WebChromeClient – Enables the replacement of the browser chrome for events like progress, alerts and for window controls.  Can override the default Chrome.

So using a standard WebView I can use the core browser, or if I choose, extend this and replace the chrome and user experience.  If you were reading carefully, inside WebView you will have noticed a method called addJavascriptInterface, and that’s where it gets interesting because this allows you to create a JavaScript front end to a native class.

In effect you can then write anything you want using native APIs, and add that functionality to WebView in the form of JavaScript interfaces.  Wait!  Doesn’t Flash have the ability to speak to JavaScript?

Flash Player – ExternalInterface

This is a long standing ExternalInterface API in Flash Player that enables communication with JavaScript in the browser.  It’s primary purpose is actually to help Flash live alongside HTML, enabling Flash to signal JavaScript and pass messages back and forth.  So in principle, if Flash can communicate with JavaScript and JavaScript with Native code, then we can start adding functionality.

Sounds really simple right?


The folks at Nitobi have already made a huge head start creating PhoneGap, an open source set of cross-platform Javascript APIs for HTML applications, just some of which are below.  The PhoneGap framework also enables anyone to create their own extensions based on the same principle, and although it’s quirky, the process is relatively simple.

In the git repository the team are also hard at work on functionality like Text-to-speech, Camera and File access for Android.  Remember that this is an open source project, it’s changing just about every day and they need helpers.  What’s really exciting is that PhoneGap workshops, including in person and online events; so I suggest attending!

iPhone Android Blackberry
Geo Location yes yes yes
Vibration yes yes yes
Accelerometer yes yes pending
Sound yes yes yes
Contact Support yes pending yes

Porting PhoneGap

As you have read previously, we are working to bring Flash Player 10.1, which includes the ExternalInterface, to Android in the next few months.  Now, my Nexus One is an Android 2.1 device, and that creates a slight problem because PhoneGap is only compatible with Android 1.6 APIs.

This means that I had to port code and complete some APIs, in fact I’ve completed the Contacts API, updated the Camera, Location and Accelerometer APIs and did a spot of bug fixing get things working.  In total this took about five days, to get setup and familiar with the code, and then writing some code for a few hours here and there.  Using Open Source kit often results in these sticky issues, hint, that’s why Adobe put so much effort into documentation :-)

With the Android SDK it really couldn’t be simpler to perform tests once I got started, really it couldn’t be easier to do live debugging on Windows, Mac and Linux; a great SDK from Google.  Once you get into the flow of debugging, coding and testing it’s all good.

My advice, as always, is to think about functionality that you’d like to add and go for it.  There are lots of docs out there, and alot of helpful code available for hacking something together.


After playing with PhoneGap and testing out my changes/addition, I decided to put the framework to the test and build an application.  The first API test was for the Android Camera, and I’m calling it FlashCam.

With FlashCam I have created a simple stub application that contains a WebView, much like the previous blog post.  This WebView pulls down an HTML page that’s actually on my blog here, and instantiates the native code and applies the javascript interfaces.  So you heard that right, I’m able to extend functionality to a live webpage and not just a static local page.

HTML Integration

Embedded in the example HTML file from PhoneGap is a JavaScript function called show_pic().  It simply wraps up another function inside the phonegap.js that is also referenced in the HTML file.  If this function succeeds then dump_pic() is called, if not then the function fail() is called.

The code under getPicture() is really quite complex and beyond the scope of this post, but you can see it here.  Essentially it calls a native function called takePicture() written in Java, and this launches a new Activity (like a Window) with the camera’s viewfinder surface.

function show_pic(){
//Note: This could be simplified, but it's abstracted for safety
   navigator.camera.getPicture(dump_pic, fail, { quality: 50 });

When the photo is taken we call dump_pic() and it will contain the Base64 encoded JPEG image data from the camera.  Then, all we need to do is return this to Flash in a callback and in this case “mySWF”, which is the name of the SWFObject embedded in the HTML file.

function dump_pic(data){

In the running SWF file we have a SimpleButton that can call the show_pic() function, but first we need to add a callback which is analogous to an event listener.  In Javascript we call photoBytes(image_data), and once the ExternalInterface receives this event it will call onReceivedPhoto(image_data):

public function fl_MouseClickHandler(event:MouseEvent):void{
  ExternalInterface.addCallback("photoBytes", onReceivedPhoto);

Here in the onReceivedPhoto function we decode the Base64 encoded image_data, which is just a very large string containing the image.  I’m using the Base64 classes provided here by Jean-Philippe Auclair, and merely getting the ByteArray.  I can then use Loader to take these bytes and produce BitmapData and do a little scaling in the imageLoaded handler before adding it to the stage within the holder_mc.

public function onReceivedPhoto(image_data):void {
  var bytes:ByteArray =  Base64.decode(image_data);
  imageLoader = new Loader();
  imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,  imageLoaded);

private function imageLoaded(e:Event):void {

var image:Bitmap = Bitmap(imageLoader.content);
var tmpdata = new BitmapData(320, 260);

var matrix = new Matrix();
matrix.scale( 320 / image.width, 260 / image.height );

tmpdata.draw( image.bitmapData, matrix, null, null, null, true ); // smoothing
image.bitmapData = tmpdata;

Here is FlashCam in action…

So that’s it, it’s really that simple to hook up native code to Flash Player 10.1.  I suspect that this will also be possible on Palm’s WebOS, Symbian and Windows Mobile in time.  I’m also loosely aware of a better bridge to JavaScript in Flash Player 10.1, so this might be a source of further investigation to improve performance for large data sets.

Now it’s your turn, below are the sources that I’ve used from PhoneGap with my own additions.  You can also find the Flash FLA and AS files below, note that you will need at least Flash Professional CS4 to open the FLA.



  • You cannot keep the SWF file within the stub package, they must be in the remote sandbox.
  • Flash Player security does not allow for localWithTrusted access to local Javascript.
  • Proportional scaling of images is a pain in the ass in Flash, I’d like to hear about any libraries for that.
  • I found CameraForm useful for producing encoded image data for testing; impossible with HTML5

Robert Scoble interviews Flash Platform execs

Earlier this week, Robert Scoble visited the Adobe office in San Francisco to talk to Anup Murarka (director on the Flash Platform team) and Aaron Filner (product manager for AIR). In the first video they talk about Adobe’s recent announcements. In the second video they debunk some of the recent claims that were discussed in […]

The Flash Mobile Advantage

A post up about Jeff Smith from Smule and why he won’t ever target Android.

Smith is part of a small but vocal chorus of app developers who say they don’t want to move to Android, even though it is growing quickly. His complaints: He doesn’t like the way the store merchandises its wares, and he doesn’t want to have to create different apps for each handset Android supports.

To me, that helps show the value proposition of Flash on mobile devices. You’re going to have to create custom Flash mobile content for each device. It’s not going to be write once, run everywhere. But you’re not going to have to rewrite an app from scratch and you’ll be able to use the same technologies and tools across multiple platforms which means you can crank out applications faster and make sure they’re higher quality.

As developers get more sophisticated, just like agencies have their own frameworks to give them a head start on the apps they build, you’ll see frameworks that increase the time to market of mobile applications for different sized screens and different functionality. But the key is being able to use the same tools, the same language, and the same platform so that you can easily tweak and write those applications for multiple platforms.

Context-aware applications

As part of a recent video recording session I created a Location API example, this was to demonstrate just how simple it is to add Context-awareness to your applications.  Now context-awareness is something that I know quite a bit about, it was actually the subject of my dissertation.  Back then I created something called “BlueSpot”, which was a language and Server->Mobile Client system that would provide contextual information and learn about you over time.

In practice the idea was quite simple, shops, Bus Stops and even your own home could begin to channel information about you and act accordingly ok ok, it was about mobile advertising.  The idea came from an incredible paper called Context-aware computing applications (Schilt 94), and so I decided to build a context-aware application for mobile phones.

The example that I created was centered on a record store that could send messages to you about your favourite artist, and yet generic enough that a bus stop could learn your route and ensure that you get to work on time. Context-awareness, I wrote: “is the sum of inferences derived from physical, temporal, emotional needs mixed with intention”.  Admittedly I didn’t really know what I meant at the time, there were simply no real-world examples around.

Though let’s break it down..

Example: Matt’s heavy night out

  • Matt arrives home at 3am having had too much to drink on a Thursday night
  • Like most people in the UK, Matt is in the office normally by 9am
  • On Friday he doesn’t have that much to do in the morning

So how would a context-aware application help out?  Well given a bit of fine tuning over time, you can imagine that a context-aware application might be able to wake Matt up a little later on Friday.  It may even have ordered a cab, or sent a lovely excuse email to the boss while Matt slept in.

“Hi, I’m stuck at the dentist for an hour this morning.  Matt” – Obviously the app would change “dentist” for a suitable, fresh, excuse each time ;-)

New devices, new Contexts

With our continued drive to bring the full Flash Player 10.1 and AIR to devices, including desktops, netbooks, tablets and mobile phones you can imagine new sets of contexts appearing.  Arguably this could just mean that we’re moving away from consolidated devices with all features, although I like to think that consolidation is still happening.  So you mobile phone will have a camera just in case, but it’s unlikely to be your camera of choice.

Applications are moving in much the same way, we’ve seen a trend towards the availability of information across screens and on different devices.  That said, these applications are going to be created with their context in mind.

So we do need to extend the vision for context-aware applications to include the device, it’s characteristics, and the human interface guidelines set out for the experience.  Google’s Eric Schmidt unveiled the new Google mantra of “Mobile First”, clearly a sign that creating applications for use in the mobile context will ultimately create better applications that scale across devices.

Context-awareness is not about moving a few buttons around, cutting down on a few components and resizing videos.  It’s ultimately about understanding your users, addressing their needs in the context of the moment and enabling them to gain access to your content from any (relevant) screen.

This is the reason that we added Location APIs to AIR, iPhone and FL4, because location is a key part of context-awareness.


So hopefully that little introduction has sparked some imaginative ideas around Context-aware applications.  To that end I have provided below a little example application called FindMe.  It doesn’t do anything that special, but shows you a Google Map of your location and then allows you to search for places.  To use it you’ll need to get a Google API Key

You could extend it to track your position over time, or maybe guess where you are based on your past history?

The idea is to get started and learn how to produce applications for users in different contexts, and it would be great to see your ideas and results!


Acrobat Connect Pro is now on the AppStore

One of the tools that I use almost every day at Adobe for screensharing, video conferencing and presentations is called Acrobat Connect Pro.  It has been around for quite some time and today it’s used globally by organizations to help reduce the travel burden, as well as enabling teams to work together.

Today it is available for the Mac and PC and is created using the Flash Platform, with the addition of some extra features for screen sharing built into the Connect Addin for the desktop.

The great news is that yesterday the team launched their first version of Connect on mobile devices, starting with the iPhone.  It is available for free now on the AppStore, although of course you will need an account and you can sign up for a 30 day trial for free over here.


  • Attend Connect Pro Meetings with integrated conference call or Voice over IP audio.
  • See who has joined the meeting, and their role (host, presenter, or attendee)
  • View presentations, PDF documents, videos, and screen sharing provided by the meeting organizer.
  • Rotate, pan, and zoom to choose your personal ‘best view’ of shared content
  • View webcamera broadcasts from unlimited live camera feeds provided in the meeting
  • Participate in Chat conversations throughout the meeting.
  • Join meetings attended by users on virtually any computer system: Mac, Windows, Linux, Solaris and now iPhone.

Built using Flash Professional CS5

Acrobat Connect for the iPhone was created using the Adobe Flash Platform, and specifically with AIR 2.0 APIs.  The team were able to create their contextual application using Flash Professional CS5 and simply package the application using the upcoming tool!

I know that many of you have wondered about building out complex applications such as this, and so I think this is a great demonstration of what you can achieve using both AIR and the new Flash Pro tool.

In addition, we have already shown Acrobat Connect running on Android devices and that was achieved by simply repackaging the code.  The team made some great choices with regards to their design that have made it possible for the UI to lay itself out dynamically for different screen sizes and orientations.  Some of the mobile developers among you will probably have played with these concepts before, and the rule has always been to ensure that you bake these into your design and development from the start.

As you can see the experience is really fluid and great for the end user.  I’ve been able to connect seamlessly to the Connect session and broadcast my iTunes library in coverflow view :-)

Battery Performance with Flash Player 10.1 on Nexus One

It appears that there has been some confusion from the community at large surrounding battery performance. This was caused by my colleague Michael Chaize publishing an amazing video of Flash Player 10.1 demos on Vimeo.

Bloggers from Daring Fireball and Macgasm have spent a little more time than expected studying the battery indicators, as opposed to the incredible advancements in web browsing for mobile phones, netbooks and tablets.  To be clear, the battery indicator changes being discussed are a function of video editing and not much else.

That said, let’s look at some mobile facts for fun.

Mobile phones are complicated mini-computers with extremely complex chip designs all working to produce a rich experience with maximum efficiency.  It should be no surprise that using 3G, WIFI, Bluetooth, GPS or leaving a browser window open and showing even basic HTML can drain your battery.  Additionally, distance from a cell tower is also a potential pitfall and some the travellers among you will note differing battery life in various cities, countries and networks.

For many years we have been working within these constraints, probably without many of you realizing it.  Remember that our mobile optimized runtime Flash Lite (shipped on over a Billion phones) and has been used extensively for User Interfaces on mobile phones from Samsung, Sony Ericsson and LG, so this is something that we know quite a bit about.

During our testing of Flash Player 10.1 we have baseline tests against the following use cases (among others), and using a multi-meter to ensure that your content runs with acceptable battery consumption.  We’re also testing against the web on sites like youtube, blip.tv and others with great performance reaching to hours of playback on the Nexus One.

Here are the actual combinations of test scenarios carried out at our offices, of course the real world result for you will be different:

  • Idle – No 3G, Wifi, Bluetooth, IR
  • Idle – No 3G, Wifi, Bluetooth, IR + backlight ON
  • 3G enabled – Wifi, Bluetooth, IR off
  • WIFI + vanilla HTML.   ’simple.html’
  • 3G + vanilla HTML.   ’simple.html’
  • 3G + vanilla HTML file + swf:  ’simple-swf.html’

To demonstrate battery performance on the Nexus One here is a recording of a large movie playing on Youtube.  It lasts for some 17 minutes with little effect on the battery indicator, and just to ensure fairness I have included the battery usage chart data from the Android OS.  Our own tests show that video can be played for well over 3Hours over WIFI from youtube in H.264 (Baseline 1.2).

The resulting battery usage is a mere 6% for the Browser which totalled 199Mb of data received:

Content Optimization

Poorly written content, Flash or otherwise, will perform badly on any platform.  Our investments with Flash Player 10.1 and AIR are designed to provide the best results for the majority of existing content for web enablement on devices.  However, all of us will have to consider the user experience for our new mobile users.  Those of you that have created iPhone applications will know some of the tricks of the trade already :-)

Thibaut (from the video above) has in fact written a fantastic document to lead you through the first steps in optimizing your content.  Most of this is applicable to any of the Flash Platform runtimes, and certainly the desktop/AIR/netbooks/tablets etc.

Mike Chambers has also completed a great study on the Touch and Mouse events, and in particular how you can begin to optimize your content for this huge array of new platforms; and ultimately customers.

Mobile World Congress 2010: Roundup

I arrived back from this years Mobile World Congress far more exhausting than normal, hence the complete lack of blogging during the event; apologies for that.  So here I will aim to roundup the various announcements and hopefully add to the huge amount of blogging and articles written during the event.

In general this years event had a more positive mood with attendees and exhibitors all looking to the future of mobile and devices.  New this year was the inclusion of Tablet and Netbook devices in the show many of which use the same hardware as high end smartphones.  Our goal is to enable the Flash Platform to extend to these devices too, and so it should be no surprise that we had many partners previewing Flash experiences on their hardware, more on that later.

Open Screen Project Update – “Connecting Developers with Consumers”

At the conference we announced that we now have some 70 partners, with new additions like Burda Group, RTL, Stern, Addicting Games and EPIX on the content partner side.  New technology partners include Freescale, MIPS, Vizio, Symbian, Imagination Technologies and Sonic.  In terms of scale we have created one of the largest initiatives in the mobile ecosystem to build a foundation for the distribution of the Flash Platform across devices.  Of course for the community much of this will appear like marketing, but rest assured that there are many hundreds of engineers working globally to bring Flash to a huge array of platforms.

As we begin to wrap up the Flash Player integration efforts our focus has widened to include enablement for web content.  In total we’re working with over 140 content provider partners, owners of the largest and most popular sites that use Flash today.  At MWC 2010 we showed applications and websites optimized for mobile viewing from the following:

Animation – Angry Alien Productions

Branded – AOL Mobile, BBC iPlayer, ESPN, Sony Pictures, TBS, TNT, Warner Brothers

Gaming – Addicting Games, Armor Games, Kongregate, Miniclip.com, Nick.com, South Park Studios

News – BBC News, The New York Times Reader App, The Wall Street Journal Online

Video – AlloCiné, Amazon.com, AOL Moviefone, Canoe, Dailymotion, Disney, Epix, GMX, IGN, Kid Rock (Atlantic Records), Lavanguardia, National Geographic, Mobile YouTube, Studio1290 Mobile, STV Player Mobile, Ustream, Vimeo, Yahoo! Movies

As you can see the list is HUGE and this represents a small part of the overall efforts to bring the full web to devices using Flash Player.  For the Open Screen Project to be truly successful we need our content providers and developers to play their part, as you can see, this effort is very much underway.

Of particular note we also joined the LiMo Foundation to deliver the Flash Platform on their Linux based devices.  It’s an exciting announcement because it demonstrates that the Open Screen Project and other industry initiatives are aligned with a goal to the delivery of consistent and open platforms for developers and consumers.

Flash Player 10.1

On our stand at the Mobile World Congress we showed a beta version of Flash Player running on the Motorola Droid, Palm Pre and the Google Nexus One.  The applications above were running incredibly well and attendees were very impressed with the performance and fluidity of the experience, Flash was built for the web and on devices it just makes sense.  The most important addition to the mobile experience was the ability to playback Flash content in full screen mode, enabled by these powerful webkit browsers.

Of course the fun part for attendees was in visiting their own sites to understand the sheer power of the new player.  In all, the thousands of attendees that visited our stand were extremely excited about being able to browse more of the web on their devices.  For many the call to action was “How can I get started?”, well Thibaut has been crafting a great set of resources with our engineering teams here.  The first step however is to create a plan of action, begin to plan a suitable user experience for mobile devices; and in particular those based on touch.

With Flash Player 10.1 we have worked to enable the same web content to run using less memory, yet with higher performance.  The results are really incredible and should see a significant improvement, not only for the mobile devices but also for desktop computers and application running on Adobe AIR 2.0.  Remember, we can only do so much and as a Flash Developer you have a role to play in ensuring that your content works well on these new devices.

For fun, my colleague Michael Chaize has created his own tour of the web on the Nexus One, he even pushes out all the stops by visiting a site based on Papervision!

In terms of availability we have required some significant patches to Android and to the Web OS to support the installation of the Flash Player over-the-air.  We expect these new updates to become available soon to end users, at which time the Flash Player will become available either via their respective Application Stores, within the software updates or both.  In either case the installation of the Flash Player will be seamless and ongoing we expect to see significant traction as we move forward.

Adobe AIR on devices

One of the big pieces of news at Mobile World Congress was the announcement of Adobe AIR on Android, and the tie-in with our Adobe Packager for the iPhone.  At MAX 2009 we demonstrated the creation of iPhone applications using the upcoming Flash Professional CS5, and the twist is that these applications are based on AIR 2.0.  To demonstrate the possibilities we showed some of the same applications created in Flash Professional CS5 that are available on the AppStore today, running on Android devices using Adobe AIR.  The workflow couldn’t be simpler, it’s simply a repackaging effort with a little UX tweaking for basic layout and hardware capabilities.

Here is a nice video from Kevin Hoyt showing off Adobe AIR for Android:

Write One Run Everywhere? – In many ways the answer is yes, given a few measured choices.  We have made it fantastically simple to reach across devices and platforms with Flash and AIR, and so the same code can now run on a huge array of phones, desktop computers and consumer electronics.  Using the same assets and principle it will be extremely simple to tweak applications for varying screen sizes, input methods and user experiences.

So now our “marketecture” diagram for Applications looks like this (2010 is on the right):

Note that I’ve called out iPhone OS separately, this is because you will be required to use Actionscript 3 to target the iPhone. Once you package an application it will not be possible to process additional SWF files containing actionscript, such as those stored on the web, due to Apple’s restrictions around interpreted code.

Android, by comparison, is totally open and AIR runs beautifully on the platform; and dare I say a little faster on the Moto Droid, a device with iPhone 3Gs hardware.

iPhone stats from the Flash Player download center

A little while ago I blogged about our new iPhone page at the Flash Player download center, the same site where hundreds of millions of users download and upgrade Flash every year.

We were amazed by the numbers of hits received from iPhone OS devices, from users seeking the Flash Player to play back rich content from their favourite sites.  Users that, before we created the special page, had no idea that Apple do not want them viewing the Internet as they see it today.

It has now been reported that over 7 million attempts were made by users to download the player by December 2009, that’s up from 3 million attempts in June 2009.

Incredible numbers I think you’ll agree!