Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 9 years ago.
Improve this question
I'm debating between Phonegap and RhoMobile for cross platform mobile application development. I'm a web developer with experience in Ruby as well as the traditional web technologies (HTML, CSS, and Javascript). The backend of this application will be accessed via a web browser and built with Rails. What are my chief concerns when choosing between these platforms? Which would you recommend I go with and WHY?
Thank you
Personally, I'd recommend PhoneGap because (at the time of this writing) PhoneGap has a website dedicated to it's development while Rhodes does not, and support for PhoneGap (Documentation, community, etc) is more readily available. Both frameworks can do just about the same thing by providing your phone's Web View with HTML tied to native features with JavaScript APIs. In terms of performance, they are identical because the only indicators of performance are the capabilities of your phone's web view. Plus, PhoneGap's branding is stylish and modern.
Comparing with Adam Blum's answer point by point:
No one is stopping you from implementing a Model View Controller arrangement of your code in PhoneGap.
No one is preventing you from using an Object Relation Mapper (or similar) with PhoneGap. Try googling for "backbonejs" or "angularjs".
PhoneGap has an app generator called "Build" to publish apps to all platforms easily, which is free for open source apps and up to one proprietary app, $9.99/mo for up to 25 commercial apps. http://build.phonegap.com
PhoneGap supports a large number of devices, including Windows Mobile. http://phonegap.com/about/feature
PhoneGap has a plugin for Near Field Communication (NFC) that works on Android. iPhone 5 doesn't even have NFC. http://phonegap.com/2011/09/26/building-an-nfc-enabled-android-application-with-phonegap/ This will get you started with barcode scanning in PhoneGap: Phonegap Barcode Scanner
No IDE for PhoneGap. You'll have to use PhoneGap Build or use platform-dependent IDEs to test apps.
I will just add that these are the major differentiators of Rhodes versus PhoneGap (or Titanium):
Rhodes is the only framework with support for a MVC (Model View Controller) pattern
Rhodes is the only framework with both synchronization and an Object Relational Manager, making it ideal for data intensive applications
Rhodes is the only framework with an app generator
Rhodes has broader OS support (including the only one with support for Windows Mobile)
Rhodes supports more device capabilities. It is the only framework with Near Field Communications support, realtime hardware-based barcode scanning and signature capture
Rhodes has true full IDE with an integrated debugger and a device independent simulator (something PhoneGap does not)
If you go to the google group, I think you will see that few bugs are reported there. But make your own judgement after reading the content and executing the RhoStudio tutorial (which should take less than an hour of investment). Also regression testing is executed continuously on all Rhodes checkins.
If you judge the framework by the ability to create a native app with HTML and make some device calls, PhoneGap and Rhodes are both pretty much the same. And both have few issues with bugs, as this low bar is fairly simple.
The differentiators listed above (which I summary as "modern development techniques for information intensive apps") have an inherent complexity to them. With the help of the community and a large dedicated QA staff from our new owner Motorola, these differentiator features are all now quite mature, and do not exist in other products.
Really just my two cents, I tried both (and also Adobe Flex, Corona SDK, etc), and I prefer PhoneGap, similar to #Stephan Branczyk, I had quality issues with Rhodes.
I have also observed that Phonegap applications tend to be slow on Android while Rhodes apps work fine on pretty much all platforms. Also, Rhodes supports Symbian S40 as well, something which Phonegap lacks for now. Although the support for S40 might not be required for modern apps but still if you consider the enterprise scenario then this might be a possible usecase.
I would personally recommend RhoMobile.
Rhomobile has a very good documentation.
Rhomobile has an IDE(Rhostudio).
Rhomobile has multiple components like Rhogallery, Rhoconnect and Rhoelements. Which helps you start from developing mobile apps, synchronization and deploying it.
There are no much big difference b/w both the framework architecture, both of them makes use of WebView Component for rendering and native features with JavaScript APIs.
Since you are Ruby developer it would be very easy for you to catch up with Rhomobile.
I would recommend using Plain Android SDK, if you really want to build good quality apps. It might be a little pain initially to learn Android Platform APIs in Java but its worth the effort :)
Related
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 8 years ago.
Improve this question
I’m getting started with using Cordova/PhoneGap for Android/iPhone app development and am very confused with the number of frameworks out there. I have taken tutorials by Christophe Coenraets (here and here) as a starting point and managed to get something working, but my current problem is getting a nice UI.
The tutorials mentioned above use http://topcoat.io/topcoat/ and http://goratchet.com/ but both of them seem to have very little support. But these really appeal to be because they are so lightweight and are independent of the functional aspects of the code.
I've looked at http://mobileangularui.com/ which looks great, but I'm really confused by "Build HTML5 Mobile Apps with Bootstrap and Angular JS" on the homepage - can I use just the UI "layer" or does it need both Angular JS and Bootstrap. And are these essentially different, competing frameworks?
Finally, I've created test apps with these and they all work fine on my Android 4.2 phone, but all of the have various issues (usually will not scroll) in my older Android 2.3 phone - do these modern frameworks not support a phone of that age?
Thank you in advance.
Why not try Ionic Framework
I have used ionic, angularJS, phonegap/cordova together for Android/iPhone development and its quite nice. Not that hard to learn and quite fun to work with.
Choosing Mobile frameworks is based on the requirement of the app. There are various frameworks available, most popular and widely used are jQuery Mobile, Sencha Touch and others..
This article has introduction to Cordova/Phonegap and comparison to some of the Mobile Frameworks, you can choose it based on the requirement. For best practices in Cordova, it is always better to use SPAs - SinglePageApplications for that jQuery Mobile and Angular/Backbone can be combined.
Angular vs Backbone!
For your other question on older phones like Android 2.3 phone:
These frameworks are built for/using many features like HTML 5, CSS 3, localStorage, local database as well and others.. so HTML 5 support is not completely supported in older phones/Android versions, also local storage, sqlite and many others..
You can check the support for HTML 5 here, also for others you can check in the same website or Mozilla Developer Network for JavaScript.
First and foremost - your Cordova applications should adopt the SPA (Single Page Application) design. Loosely defined, a SPA is a client-side application that is run from one request of a web page. The user loads an initial set of resources (HTML, CSS, and JavaScript) and further updates (showing a new view, loading data) is done via AJAX. SPAs are commonly used for more complex client-side applications. GMail is a great example of this. After you load GMail, mail views, editing, and organization are all done by updating the DOM instead of actually leaving the current page to load a completely new one. More.....
Examples of SPA libraries(UI) you can use in your Cordova applications are:
1) AngularJS
2) jQuery Mobile
3) Kendo UI
4) Sencha Touch
5) Backbone
I hope this question is specific enough. I have a client for whom I made an iOS native app and an Android native app (same app, different platform). It's a fixed pixel design (I made this work for Android somehow:) and it works on iPad, iPhone and most Android devices (with some letterboxing). Now I am asked to write the same app for the Windows store and they want me to use HTML and JavaScript. My question is, when I use HTML and JavaScript, would it be "easy" for me to use this code into some sort of hybrid solution (PhoneGap, etc)? The app doesn't need much complicated functionality but does need to support push notifications on iOS and it needs to be able to play videos, preferably HLS. Any advice on what the best hybrid solution and do hybrid solutions allow you to build for Windows 8?
I'm a cross-platform developer working on PhoneGap and Titanium Appcelerator. The correct answer is "It depends". Currently the state of cross-platform development is not very recommendable. Yes, you can write plugins for PhoneGap and it does support windows phone but you will have a ridiculously hard time getting them to communicate with each other properly. I learnt this from experience.
If it was a hacking/hobby project to further the cause then I would say go for it but for a time-bound client project like yours, I would recommend against cross-platform solutions and go native instead. Plus native always gives considerably better control, speed and ease of development. You will probably develop it faster in native than cross platform anyway. I've played around with windows SDK and it seems easy to use and well-built with good documentation and you can use C# which is similar to Java since you have already used it on android.
You can also build windows 8 desktop apps using html and javascript natively but this isn't present in windows phone 8 yet.
As I mentioned, If you don't need too many native controls, then you can go cross-platform. For your requirements, it can be done. If you have already developed android and ios apps and only need windows app now, then going native would be easier. But if you have to make all 3 then you can go cross platform if your requirements are restricted to what you mention. Here's a good quora thread that discusses the pro's and cons:
http://www.quora.com/Is-Titanium-good-for-developing-iPhone-apps
Take a look on Xamarin
Main idea - they brings real native code for all platforms.
They have instruments to compile C# code that it can be used at all platforms
For example you should create UI in XCode (for iPhone) and use ModoDevelop to create DAL/BLL, then you can re-use C# code base over all other platforms
They have cross-platform iPhone/Android/WP7/W8 samples on GitHub
Also see Q&A on Stackoverflow tagged Xamaring
We are starting to build multiple apps for multiple clients both in IOS and Android native platforms. The problem is we are going completely native which is taking too much time.
I would like to look at the linked in method (http://arstechnica.com/information-technology/2012/10/a-behind-the-scenes-look-at-linkedins-mobile-engineering/) which is a more hybrid approach using HTML and native code.
The problem is I don't think Phonegap is that good - good for prototyping but maybe not for full versions of apps as it can be a bit slow and a bit buggy.
I would like to look into doing a model where we create like 65% HTML and 35% native to that device (like linked in)
Would anyone have any suggestions for this? Would people say we need a massive development team to pull such an approach off?
I welcome thought:)
Thanks
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 8 years ago.
Improve this question
I am curious to know if there are any drawbacks or limitations of using Phonegap as compared to using Android. What else can we do that cannot be accomplished using the other platform?
Why would one specifically choose Phonegap over Android (besides budget or cross platform compatibility) or vice versa ? I am looking for clear scenarios with justifications.
Full disclosure I'm one of the core committers to PhoneGap's Android implementation so my opinion may be biased but I like to think I'm fair.
To answer your question it really depends on what your requirements are. You've already dismissed budget and cross platform which are two of PhoneGap's key benefits. For instance if I never intended to target any platform but Android I would probably go with native Android development but if we were going to other platforms I'd pick PhoneGap. Also, I'd take a look at my team, are they hard core Java programmers? Go Android. Are they HTML developers? Go PhoneGap or pure HTML5.
Also, it depends on what type of application you are writing. A first person shooter, go Android. A table driven data applicaiton, PhoneGap is the way to go.
Anyway, without knowing what type of app you are trying to develop it's hard to be specific.
PhoneGap Pros
PhoneGap is an excellent solution in a number of situations:
Multiple platforms: Since the front end of the application is built using web technologies, a PhoneGap application with the exact same source code can be deployed across different platforms.
Access basic native functionality: If the application requires minimal access to the native APIs such as camera, geolocation and contacts PhoneGap allows access to these APIs with just a few lines of JavaScript code.
Offline usage: Although the app is built using web technologies, it can still provide offline functionality and has access to the browser’s local cache.
PhoneGap Cons
Since the front end of the application is built in JavaScript, it causes a number of limitations.
Data processing: Native languages are much faster than JavaScript for data processing on the device.
Background processing: A large number of applications rely on background threads to provide a smooth user experience: calculating the GPS positions in the background, for example. PhoneGap APIs are built using JavaScript which is not multi-threaded and hence do not support background processing.
Access advanced native functionality: A number of native APIs are not yet supported by PhoneGap’s APIs.
Complex Business Logic: A number of applications such as enterprise applications are quite complex. In this scenario it is simply better to have a certain amount of native code.
Advanced Graphics: Apps that use advanced graphics which can only be accessed using third-party libraries are best done natively.
Benefits of building mobile web app:
1) Just need HTML5/CSS/Javascript skills vs Objective-C or Java. We made things even simpler by using Mobl (http://www.mobl-lang.org), a domain-specific language for creating mobile web applications that compiles to javascript/html.
2) Single code base for all platforms (iOS, Android, Windows 7, mobile web)
3) Rapid testing and deployment (up until you Phonegap it, at which point you're subject to App Store review conditions, etc)
4) With Phonegap, you can still take advantage of distribution and integrated payment via the App Store or Android Market
Drawbacks:
1) Poor performance, esp if your app is graphically intense, i.e. a game. You can implement caching or leverage some 3rd party solutions (i.e. Sibblingz) for native graphics acceleration but for the most part a native app is much faster/smoother than mobile web app
2) Lack of pre-built UI widgets, transitions, standard controls, etc. Your development time can take longer, especially if you want a polished-looking app with a native look and feel. You can try using Sencha Touch, JQ Touch, or similar tools with pre-built UI elements, but you'll probably still need to spend a good amount of time styling the app to look native.
So, should you build a mobile web app or a native one? If you're building an app that's graphically involved or involves any computationally expensive operations, go native for sure as the tools aren't quite there yet to make the job easy for mobile web apps. If you're building something fairly simple and you don't need any native styling or design polish, go the mobile web route.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 8 years ago.
Improve this question
I've been playing around with developing Android apps in Java for a while and am starting to get a handle on it. However if I want to on start on an iOS version I need to code everything from scratch - which is, well, undesirable.
I was wondering on what cross platform solutions there are available and how well they work in practice. I've been thinking about web applications - perhaps using jQuery Mobile or Titanium, or Adobe Flash/Flex/Air. I also don't yet have a Mac, which I'll probably have to invest in.
So my Questions :
What cross-platform development environments exist for iOS / Android (and/or other devices)?
What has your experience been with these tools? (this is what I'm really keen to know)
Disclaimer: I work for a company, Particle Code, that makes a cross-platform framework. There are a ton of companies in this space. New ones seem to spring up every week. Good news for you: you have a lot of choices.
These frameworks take different approaches, and many of them are fundamentally designed to solve different problems. Some are focused on games, some are focused on apps. I would ask the following questions:
What do you want to write? Enterprise application, personal productivity application, puzzle game, first-person shooter?
What kind of development environment do you prefer? IDE or plain ol' text editor?
Do you have strong feelings about programming languages? Of the frameworks I'm familiar with, you can choose from ActionScript, C++, C#, Java, Lua, and Ruby.
My company is more in the game space, so I haven't played as much with the JavaScript+CSS frameworks like Titanium, PhoneGap, and Sencha. But I can tell you a bit about some of the games-oriented frameworks. Games and rich internet applications are an area where cross-platform frameworks can shine, because these applications tend to place more importance of being visually unique and less on blending in with native UIs. Here are a few frameworks to look for:
Unity www.unity3d.com is a 3D games engine. It's really unlike any other development environment I've worked in. You build scenes with 3D models, and define behavior by attaching scripts to objects. You can script in JavaScript, C#, or Boo. If you want to write a 3D physics-based game that will run on iOS, Android, Windows, OS X, or consoles, this is probably the tool for you. You can also write 2D games using 3D assets--a fine example of this is indie game Max and the Magic Marker, a 2D physics-based side-scroller written in Unity. If you don't know it, I recommend checking it out (especially if there are any kids in your household). Max is available for PC, Wii, iOS and Windows Phone 7 (although the latter version is a port, since Unity doesn't support WinPhone). Unity comes with some sample games complete with 3D assets and textures, which really helps getting up to speed with what can be a pretty complicated environment.
Corona www.anscamobile.com/corona is a 2D games engine that uses the Lua scripting language and supports iOS and Android. The selling point of Corona is the ability to write physics-based games very quickly in few lines of code, and the large number of Corona-based games in the iOS app store is a testament to its success. The environment is very lean, which will appeal to some people. It comes with a simulator and debugger. You add your text editor of choice, and you have a development environment. The base SDK doesn't include any UI components, like buttons or list boxes, but a CoronaUI add-on is available to subscribers.
The Particle SDK www.particlecode.com is a slightly more general cross-platform solution with a background in games. You can write in either Java or ActionScript, using a MVC application model. It includes an Eclipse-based IDE with a WYSIWYG UI editor. We currently support building for Android, iOS, webOS, and Windows Phone 7 devices. You can also output Flash or HTML5 for the web. The framework was originally developed for online multiplayer social games, such as poker and backgammon, and it suits 2D games and apps with complex logic. The framework supports 2D graphics and includes a 2D physics engine.
NB:
Today we announced that Particle Code has been acquired by Appcelerator, makers of the Titanium cross-platform framework.
...
As of January 1, 2012, [Particle Code] will no longer officially support the [Particle SDK] platform.
Source
The Airplay SDK www.madewithmarmalade.com is a C++ framework that lets you develop in either Visual Studio or Xcode. It supports both 2D and 3D graphics. Airplay targets iOS, Android, Bada, Symbian, webOS, and Windows Mobile 6. They also have an add-on to build AirPlay apps for PSP. My C++ being very rusty, I haven't played with it much, but it looks cool.
In terms of learning curve, I'd say that Unity had the steepest learning curve (for me), Corona was the simplest, and Particle and Airplay are somewhere in between.
Another interesting point is how the frameworks handle different form factors. Corona supports dynamic scaling, which will be familiar to Flash developers. This is very easy to use but means that you end up wasting screen space when going from a 4:3 screen like the iPhone to a 16:9 like the new qHD Android devices. The Particle SDK's UI editor lets you design flexible layouts that scale, but also lets you adjust the layouts for individual screen sizes. This takes a little more time but lets you make the app look custom made for each screen.
Of course, what works for you depends on your individual taste and work style as well as your goals -- so I recommend downloading a couple of these tools and giving them a shot. All of these tools are free to try.
Also, if I could just put in a public service announcement -- most of these tools are in really active development. If you find a framework you like, by all means send feedback and let them know what you like, what you don't like, and features you'd like to see. You have a real opportunity to influence what goes into the next versions of these tools.
MonoTouch and MonoDroid but what will happen to that part of Attachmate now is anybody's guess. Of course even with the mono solutions you're still creating non cross platform views but the idea being the reuse of business logic.
Keep an eye on http://www.xamarin.com/ it will be interesting to see what they come up with.
My experience with making something very simple in PhoneGap+jQuery Mobile was fine. I was able to do it quickly for iOS. However, it didn't work on my Android phones without making some changes. The project was a very simple app to take pictures and post them to a web site. And at the end of the day it felt "clunky" compared to a true native app.
I don't believe there will ever be easy cross platform development. I think the browser is as close as you will get. By choosing something like PhoneGap I think you are just trading one set of pain points for a different set of pain points.
In case you do not want to use a full-fledged framework for cross-platform development, take a look at C++ as an option. iOS fully supports using C++ for your application logic via Objective-C++. I don't know how well Android's support for C++ via the NDK is suited for doing your business logic in C++ rather than just some performance-critical code snippets, but in case that use case is well supported, you could give it a try.
This approach of course only makes sense if your application logic constitutes the greatest part of your project, as the user interfaces will have to be written individually for each platform.
As a matter of fact, C++ is the single most widely supported programming language (with the exception of C), and is therefore the core language of most large cross-platform applications.
Although I've just begun looking at this area of development, I think it comes down to this basic difference: some tools retain the original code, and some port to native...
for instance, PhoneGap just keeps the HTML/CSS/JS code that you write, and wraps it in sufficient iOS code to qualify as an app, whereas Appcelerator delivers you an XCode project...so if you're not familiar with iOS, then that wouldn't really provide any benefit to you over PhoneGap, but if you DO know a bit, that might give you just a bit more ability to tweak the native versions after your larger coding effort.
I haven't used appcelerator myself, but worked on a project a couple weeks ago where one of our team members made an entire iPad app in about 24 hours using it.
And yes, to actually submit to apple, you'll have to get a mac, but if that's not your primary work platform you can go cheap.
Cappuccino or PhoneGap.
Sometimes though trying to find a shortcut does not save you time or give you a comparable end product.
There's also MoSync Mobile SDK
GPL and commercial licensing. There's a good overview of their approach here.
If you've ever used LUA, you might try Corona SDK can create apps that run on IOS and Android
https://coronalabs.com/
I've downloaded it and messed around some, I find LUA a very easy to learn scripting language without the usual scripting language hassles/limitations....
There is also BatteryTech which we've been using for the past 18 months and have released several games off of it. http://www.batterypoweredgames.com/batterytech
All C++, Android and iOS support, all users get full source. The new v2 includes lua bindings.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
More and more mobile platforms are being launched and sdk's are available to developers. There are various mobile platform are available:
Android, iOS, Moblin, Windows mobile 7, RIM, symbian, bada, maemo etc.
And making of cross platform application is headache for developers. I am searching for common things across the platforms which will help to developers who want to port application to all platforms. Like what are the diff screen resolutions, input methods, open gl support etc.
please share details that you know for the any of platform.
Or are there possibilities, by writing code in html (widget type of thing) and loading it into native application.
I know about the android, in which we can add the web view into application by calling setContentView(view)
Please share the class details where we can add the html view into native application of different type of platforms that you know.
Purpose of this thread is share common details across developers. marking as community wiki.
Cross platform tools & library
XMLVM, Codename One and iSpectrum (cross compile Java code from an Android app or creating one from scratch
Phone Gap (cross platform mobile apps)
Titanium (to build native mobile and desktop apps with web technologies)
Mono Touch ( C# for iphone )
rhomobile - http://rhomobile.com/
samples are here: http://github.com/rhomobile/rhodes-system-api-samples
Sencha Touch - Sencha Touch is a HTML5 mobile app framework that allows you to develop web apps that look and feel native on Apple iOS and Google Android touchscreen devices. http://www.sencha.com/products/touch/
Corona - Iphone/Ipad / Android application cross platform library . Too awesome.
http://anscamobile.com/corona/
A guide to port existing Android app to Windows Phone 7
http://windowsphone.interoperabilitybridges.com/articles/windows-phone-7-guide-for-iphone-application-developers
Jquery MobileTouch-Optimized Web Framework for Smartphones & Tablets
My answer here covers some of the technical limitations of cross-platfrom tools but let me expand a bit:
I think that cross-platform tools have historically always been also-rans because such tools have the wrong philosophical focus.
All the selling points for cross-plaform tools are the benefits they bring to developers. They are sold on the idea that they allow the developers to write-once-run-anywhere. They are sold on the idea that they allow the developers to expand their market without learning new APIs. They are sold on the idea that they allow the developers to slash cost and time to market.
What cross-plaform tool are NOT sold on is the benefit they bring to end users.
Benefit to the end user is not a selling point because cross-platform development is seldom a benefit to the end user. The end user does not care how hard the developer had to work to bring the product to market. Nor do they care how many platforms the app can run on when they they don't use but one platform. They just care if the app does what they need it to on the hardware they need to run it on. Unless they have a specific need to run the app on many different platforms, the fact that it does brings them no value.
Conversely, the inevitable compromises of making a cross-platform API mean that all the apps created by the API will be at best B-grade on every platform. They will never be the best tool to use on each platform.
All this means that in most use cases, cross-platform tools give the end user an inferior product compared to ones made with platform specific APIs. The end user will always have a better choice.
You make money in the long run by giving end users the most useful tools. If you don't philosophically concentrate on making the end user's life easier and more productive, you are pretty much doomed from the outset. End users have lots of choices and if your tool isn't one of the best you won't make it in the market.
You should only use cross-platform tools if you think, "the users will really benefit from running this app on many different platforms." If you start out looking at cross-platform tools solely because they will make your (the developers) life easier, then you have picked them for the wrong reason and they will hurt you more than they will help.
There are several approaches to cross-platform development on mobile devices. Of course they all have limitations. No solution manages to take advantage of all the device's functionalities the way a native application can.
Re-using code
While all mobile OS don't use the same development language and API you can sometimes share some classes or logic tier code.
C++ for example can probably be re-used for an iOS application, for an Android app by using the NDK, for a Symbian app since they are developed in C++, etc.
Some solutions also offer the possibility to write the app in an other language than the one normally used by the device. The most famous (in fact the only one I know) are commercial and based on the Mono project (C# development):
MonoTouch for iPhone [ 1 ]
MonoDroid for Android (still in development)
Similar project for BlackBerry (still in development)
But I'm not sure we can really call this cross-platform development since the re-use of code is limited depending on the device :
Windows Phone 7 will not allow native code development (maybe in further updates)
AFAIK mono like project do not exist for all platforms (yet?) bada, webOS, maemo, etc.
And the UI part also stays specific to each device.
Web development
A regular answer when asking about cross-platform development for mobiles is web development. We would then need a wrapper, that will use the mobile browser, to make it look and behave like a native application. That is how some of the cross-platform framework that we will see further on work.
The rise of HTML5 brings to web development functionalities that could only be done with a native application like geolocation, off-line application, local storage.
We can found more and more frameworks to develop web application for mobiles with a native look and feel by taking advantage of the latest web standards HTML5, CSS3, Js:
Sencha Touch
JQTouch based on jQuery
JQuery Mobile framework
But HTML5 is still very young and implementation may vary from a browser to another. Most default mobile browsers use the WebKit engine (main exception being Windows mobile/phone using Internet Explorer) and even so they don't necessarily support the same functionalities. Local database is still awkward to work with and we can't be sure how it is going to implemented by the different browsers. Moreover, even with HTML5, web development is still very limited compared to a native app. You can't access contacts, camera, accelerometer, etc.
Edit: Earlier this month the W3C have delivered some warnings about the evolution of HTML5: Article from ZDNet
So it will only suit a limited category of applications.
Cross-platform frameworks
And than we have the cross-platform mobile applications frameworks. With which you can presumably develop once and deploy on different platforms. These solutions usually focus on iOS and Android and rely on the WebKit engine. They offer more interaction with the phone functionalities while developing with web technologies. The most well-known are Nitobi PhoneGap, RhoMobile Rhodes, Appcelerator Titanium. But many others are out there and don't all use the same technique like MoSync which translate your code to it's own intermediate language before compiling it for the desired platform.
[ 1 ] Remember that Apple has a special policy about apps written for their platform. They don't seem to be blocking these apps at this date but it is an information that should be taken into account.
Edit: Apple has changed this policy since September 9.
You get some commonality when deploying as a webapp (html5 as mentioned above) but for rich native apps the APIs are completely different for the various smartphones.
HTML5 may improve things somewhat but to do interesting things you need to go native.
There are 'cross platform' smartphone frameworks such as Phonegap but I've heard mostly bad things about using it for "real" work. (lots of overhead etc)
Yes, html5 is getting some attention. You should also look at this consortium & platform to come in Q4.
Not sure about the success of that project, as it sounds like a huge challenge, but here are the details:
Website:
http://www.wholesaleappcommunity.com/default.aspx
News:
http://news.google.de/news/search?aq=f&pz=1&cf=all&ned=us&hl=en&q=%22Wholesale+Applications+Community%22
WAC aims to publish its initial
specification and components of its
SDK to developers in November. This
specification will be based on W3C
standards and create a strong platform
for developing rich mobile web
applications. WAC will also provide
backwards compatibility for devices
based upon the current JIL and BONDI
specifications.
(http://www.convergedigest.com/Bandwidth/newnetworksarticle.asp?ID=31021)
.
It IS an international coalition of around 25 telecom companies that's aiming to create a platform open to all developers and selling to all mobile phone users.
(http://www.downloadsquad.com/2010/02/15/atandt-wholesale-applications-community-is-a-platform-not-an-app/)
As far as I know most of those devices are able to run this:
Java ME - the Most Ubiquitous Application Platform for Mobile Devices
I think this can serve both as good and bad example.