Learn Flash/Actionscript3/Adobe AIR. It will simply run everywhere.
(cue Flash vs HTML5 flame war. off-topic, IE9 ain't coming to XP so screw that -- I'm sick of all the "this will only work on Safari" or "this will only work on Chrome" HTML5 demos. As someone who actually builds stuff for clients instead of just blogging about these technologies, this is a dealbreaker and ***FORWARD*** compatibility headache as Windows XP will never go away for the near future. The original reason I learned Flash coding was because of the bloody headache of cross-browser compatibility.)
Back on topic, Flash is coming to every single smartphone platform (and even
TV set top boxes). 19 of the top 20 mobile manufacturers are already part of the consortium
Adobe Open Screen Project and they're working to get Flash running on their respected platforms. Only Steve Jobs didn't sign up for whatever his reasons. Flash is now out on Android, Symbian, Maemo, coming to WinMo 7 (Flash Lite is already out on older versions of WinMo), Blackberry & Palm, definitely on Meego (Nokia Maemo + Intel Moblin).
Flash CS5 can now be used to make native iPhone apps legally again as per App Store policies (the process is the same as making an Adobe AIR app). Here's a refresher on exporting your AIR project into iOS:
Packager for iPhone Refresher.
There's some
surprising current statistics to fix one's perspective on the death of Flash by the iOS gadget crowd. Currently 97% of the internet is Flash capable and iOS only has 1.1% share. Of course, the iOS share will increase as more customers buy them, but think of that when building stuff with the widest reach possible. Also, currently, devs seem to be monetizing the most on iOS, but the App store is now *so* *so* *so* saturated that it's hard for a new app to get noticed amidst all the noise.
Flash 10.1 is already out on Android Froyo (2.2) and AIR for Android is currently in public beta and should come out soon
http://labs.adobe.com/technologies/air2/android/ so Flash is already good to go if you want to target Android.
Another thing to consider is that Android market share has now overtaken iOS and since there's not enough decent content on the Android and Adobe AIR marketplaces compared to the Apple App Store, if you build a good app on any of those platforms, it's easier to pull in a user base since there isn't much competition yet.
Your Flash apps would run on Symbian^3 devices which are already out (N8, C3, etc) as they have all Flash Lite 4.0 (A slightly stripped down version of Flash 10 which already runs AVM2 AS3 swfs). In fact, Nokia just launched the $10million
Calling All Innovators N8 app contest and Flash is one of the formats you can enter in.
Not only will your apps run on mobile devices if you build 'em in AIR, they will also run on Desktop Linux, Mac & Windows and that is the biggest plus for me. For complaints about the cost of Adobe tools, you can build SWFs and AIR apps from completely Open Source tools. The
Flex SDK is FOSS and you can build apps just with your
.AS3 sourcecode + a command line just like with the JDK for Java (or pick any appropriate IDE of your choice to make your life easier). Oh, btw, the commercial Flash Builder is free for students & teachers + developers who're hit by the economic crisis and are currently unemployed ->
apply here for license.
Of course, please don't forget to *optimize* *optimize* *optimize*. Flash is not a slow platform. The terrible content you see out there is due to abusive content creators who don't know how to optimize for CPU, memory & bandwidth and especially
for mobile.
Of course learning Native Android or iPhone dev will give you the best understanding and performance for the Platforms you're targeting, but if you're short on time & resources and need to deploy on multiple platforms, this is the way to go.