Probably the most publicized cross platform mobile dev environment has been the Flash Platform. Whether you like Flash or not, Adobe has done some serious work to add the ability to build mobile apps into their Flash dev tools. Unfortunately, a lot of people think this now means that the resulting mobile apps will have cheesy animations, non-standard UI elements, and be full of ads. Ultimately, that’s up to the developer, but before you dismiss this as a serious dev platform, have a read through this post.
Flash Platform allows compilation down to a native iOS app. That’s right, NATIVE. No ifs, ands or buts about it (well, with perhaps a couple of small caveats listed below).
On the other hand, apps created to run on Android and BlackBerry will run on top of Adobe AIR. This means that AIR must be installed on the device (it is available as an app in the App Store). As of AIR 3, you can also include AIR with your app (captive runtime) so a seperate install of AIR is not required.
The Adobe AIR SDK is required to build apps for mobile. The SDK is what provides access to device level APIs such as the camera, accelerometer, local storage, etc. AIR 3 has recently been released with a load of useful features, some of which will be discussed here. Apps can be built using Flash Professional or FlashBuilder. Additionally, the AIR Developer Tool (ADT) can be used for command line compilation.
When it comes to WYSIWYG dev environments, the Flash platform tools some of the best available. You can easily do visual edits and animations/transitions within the Flash IDE. FlashBuilder is a great code editor, but there are also lots of alternatives on the market (FDT, FlashDevelop, Realaxy to name a few). ActionScript (AS3) is a fully mature OOP language, and folks doing Java or C# should have little problem picking it up. In my own experience, I went from AS3 to C# with minimal effort (aside from learning all of the APIs which takes time no matter what language you’re moving to).
Flash platform allows you to create traditional “forms” based apps as well as games. There are a standard set of UI controls that are part of the Flex framework that can be used in place of their native counterparts.
Native UI Controls:
One of the limitations of mobile dev using Flash platform has been that you can’t use native UI controls within your app. While this is largely true, Adobe has done some things to make the user experience better with regards to the UI.
Native text. This gives you access to all of the native textfield functionality for things like magnifying glass, text selection, copy/paste, auto-correct, etc.
Native HTML rendering. This allows HTML content to be rendered using the native web view control.
Standardized UI Controls. The Flex framework (ActionScript based UI framework) contains all of the standard UI controls you would expect for application development. In addition, the latest build of the framework adds new controls that are specific to mobile platforms. Things like SplitViewNavigator, CalloutButton, ToggleSwitch and spinners. And it also has layout containers for some of the standard UI metaphors used on devices.
Obviously device APIs and functionality vary across devices. I’m attempting to cover most of the more commonly used features. The following device features are accessible from the AIR SDK:
- Camera (front & back)
- Image Gallery
- Encrypted Local Storage
- Device Back / Menu button Events
- Multitouch / Gestures
- Background audio playback
- Different Keyboard types
A couple of important notes to add here:
- One HUGE feature of Flash player 11 is Stage3D, which allows for GPU hardware accelerated rendering. This currently isn’t supported on AIR for mobile, however, word from Adobe is that it is coming.
- AIR 3 supports a feature called Native Extensions. This allows developers to use native code to write custom functionality that isn’t already supported in AIR. So if there is a device feature that the AIR SDK can’t interface with, in theory, an extension can be written to do just that. Obviously, these extensions will be platform specific, but the potential here is huge. Extensions have already been written to support the following:
- Battery Status
If you are looking for cross platform mobile dev solutions, Flash platform should not be overlooked. Not only can you deploy to 3 different platforms with essentially a single code base, but Adobe is committed to supporting the toolset and adding features rapidly, as well as improving performance. And with upcoming support for Stage3D on mobile, this will become a viable solution for building high quality games (both 2D and 3D). Additionally, there are a TON of code frameworks that do everything from UI & layout, to physics engines, to MVC architecture and on and on, so there is a lot to work with. As a long-time Flash dev (also one who has also done Windows Phone dev using Visual Studio and worked with Objective-C and XCode), I can say that the workflow isn’t perfect, but from a design/dev standpoint, it’s better than most of what’s out there.
On the downside, lack of native controls can be an issue.
For updates when new articles in this series are posted, follow @philterdesign on Twitter.