Here's what we're doing ...
Make the app a generic web application/website. Host it on your server and have your server detect the type of browser. If it is a mobile browser, show the small-screen version of your app.
Once you get that going, create individual apps for the particular phones/mobile hardware. Those will each have a single web browser control in them. The web browser will have a hardcoded URL which points to your web site.
For example, write a java wrapper for Google Android. Write an Objective-C wrapper for Cocoa Touch (iPhone using XCode). Your wrapper for Windows Mobile will be in a .Net Framework app in C# or VB.Net (or IronPython for that matter).
Here's how to do it for iPhone: http://www.iphonesdkarticles.com/2008/08/uiwebview-tutorial.html
Here's how to do it for Android: http://developerlife.com/tutorials/?p=369
Here's how to do it for Windows Mobile: http://msdn.microsoft.com/en-us/library/ms229657.aspx
The wrapper can then access the phone's firmware for motion, GPS info, sounds, and so forth.
The beauty of this is
You can now submit each app to the
individual platform's AppStore which
is the #1 way to get new customers.
You have one set of source and one
place to upgrade. When you upgrade
in one location, everyone gets it
immediately.