Holiday stress? Google Mobile to the rescue!



The holiday season can be a stressful time in the U.S., but it should be enjoyable. Whether you need flight updates, store locations, or price comparisons, let Google Mobile offer you some peace of mind.

At the airport...
  • Search for flight info: You're heading to the airport to pick up your relatives from New Jersey and want to check the status of their flight. Just go to www.google.com on your cell phone and search for the flight number to get departure and arrival times.
  • Find a popular restaurant: Once at the airport, you suddenly realize you forgot to make dinner reservations! Crisis? Not at all. Find them the best lasagna money can buy -- just go to www.google.com on your cell phone, search for "Italian restaurants", and see ratings and reviews of local favorites.
Shopping...
  • Keep track of to-do lists: Keep your family's wish lists, grocery lists, and all your other "To-Dos" in Google Notebook and access them while you're out and about. Easily update them online on your computer, then visit google.com/notebook/m on your cell phone when you're on the go.
  • Compare prices: Before heading to the cash register, compare in-store prices to online retailers' prices by texting product names, ISBN or UPC numbers ("price mp3 player," "price 1591841410") to GOOGLE (466453). We'll send the results back to your cell phone in a snap, so you'll always know where to get the best deal.
On the way to the holiday party...
  • Get directions: Try the "My Location" feature on the newest version of Google Maps for Mobile to find out where you are. Then, enter the destination address and get directions to the party. You can even turn on the traffic overlay to find out which highways to avoid. Just go to google.com/gmm on your cell phone to download the application.
  • Find a last-minute gift: The moment you find your way, you realize you forgot to pick up a gift for the hosts! Avoid a social faux pas. Dial 1-800-GOOG-411 (1-800-4664-411) and say "florist" to find a flower shop on your way. GOOG-411 can even connect you directly. If you have an iPhone, say "map it" and we'll send you a link to a map showing the florist's location.
Discover some other ways Google Mobile can help you reduce stress this season.

Happy holidays from the entire Google mobile team!

On the Road with Android

This week finds me at the Google offices in jolly old London after a quick dash out to Belgium last week. I have had the chance to meet the Mobile developers based here in London and give them an introduction to Android, as well as do the same for 70ish external developers from the London area. It has been a fun week of Android hackathons, brainstorming for Android application ideas and occasionally finding bugs and holes in the documentation.



It has been really valuable spending enough time with a group of motivated developers to move beyond the first steps and into real development work. A couple of my temporary office mates here are already well on their way to implementing a general puzzle application for Android. It will enable you to choose your favorite puzzle engines to install and then play a selection of puzzles downloaded on demand from a server – quite an ambitious project for a first try, but these guys are pretty determined and hope to have a prototype of the first puzzle (battleships) working before I hit the road again on Friday. They are also treating the implementation as a chance to learn the architecture: learning the right way to use the architectural pieces in Android rather than opting for the quick and easy shortcuts, which is the best way to really learn a new platform in my experience (don't compromise, be true to your vision).



The week is far from over yet, with another internal and external hackathon planned, and as many more ideas sessions as we can cram in.



As for the London offices – well they are fantastic. Right in the middle of everything, Jaffa Cakes in the kitchens (if you don't know what a Jaffa Cake is, or how to eat one in particular, check out this informative video on the subject). There are also a wealth of pubs within easy walking of the offices, a welcome feature for an ex-pat like me.



With the holidays getting close, don't forget that a new SDK version was announced last week with several improvements. It might be worth grabbing that before taking off for the holidays, just in case you get the urge to do some Android coding while trying to work out if you ate just a bit too much for dinner.



Happy Holidays...

Life can be tough; here are a few SDK improvements to make it a little easier

It's been just over a month since we gave developers the first early peek at the Android SDK. We've been hard at work since then on some nifty new stuff we think you'll really like. We hope to show that to you soon, but in the meantime, we wanted to fix some of the important issues you've raised. We're very pleased to announce the immediate availability of m3-rc37a. (What a great name for a droid!)



Our servers are quivering in anticipation of the opportunity to deliver these bits fresh to your desktop. Don't be shy! But if you need further enticement to download the new version, here are a few of the improvements you'll find therein:




  • The new default skin for the emulator is HVGA, portrait mode. That's the one you should focus on for your submissions for the Android Developer Challenge.

  • We've added the ability to inject SMS messages into the emulator, which will allow you to more easily test IntentReceivers for incoming SMS messages.

  • The choppy audio problem in the emulator on Windows should now be solved.

  • There's a new emulator control panel that you can use to control network events like radio state changes and incoming calls.
  • The Eclipse plugin now does color syntax highlighting on the XML files, such as AndroidManifest.xml.

  • Some of the more annoying bugs in the Eclipse plugin have been fixed; for instance, the application launcher retries if the first try times out while waiting for the emulator to start, and "R.java" files are no longer flagged as read-only.



You can find a full list of changes for this and every release at the Release Notes page. If you're looking for tips on upgrading your SDK installation, we have those too.



We hope that these humble tweaks make your life just a little bit better, or at least, the part of your life you spend writing code.

Upload Geo-Tagged YouTube Videos from your Helio Ocean

Christine LeeProduct Marketing Manager, YouTube

Helio has just released a custom-built application that enables you to watch, record, upload, and share YouTube videos on your Helio Ocean phone. Now, you can really interact with the YouTube community on your Helio Ocean by rating videos, posting text comments, sharing videos with friends, saving videos to your Favorites and Playlists, and subscribing to new channels. You can even let everyone know where you shot a video by attaching a "geo-tag," which includes the GPS coordinates for the location where you shot the video.

You can also personalize your YouTube experience on the Helio Ocean by customizing your video feeds like My Subscriptions, My Favorites, My Playlists, My Videos and Received Videos. Of course, you can always view traditional YouTube categories like Most Viewed, Most Recent, Top Rated and Recently Featured.

What better way to show you than via this video:


To get the new application in the U.S., just "JUMP" to YOUTUBE by entering 9688823 (YOUTUBE) from the Helio Ocean idle screen. You'll then receive a link to download the application.

This is a nice example of how mobile providers can bring YouTube to their customers. We're pretty excited about the opportunities for YouTube on the small screen. Now people can watch YouTube on their phones and participate in the YouTube community without having to be at their computers.

No more excuses for being late

Marcus FosterProduct Manager, Google mobile team, London

A few months ago we released a mobile version of Google Calendar. I find it incredibly useful, especially when traveling and running from one meeting to the next. I know that wherever I am, my Google Calendar travels with me.

Since we know how much Calendar users depend on their schedules, we are always trying to make it easier to access at any time. For example, I live in London, and like many people in major metropolitan areas around the world, I spend a lot of time underground, on the Tube (a.k.a. subway, Metro, U-Bahn...). At least in London, there is no mobile network coverage on the Underground, so I cannot always access Google Calendar on my phone.

But now there's a solution. Starting today, you can use Google Sync for mobile to synchronize your BlackBerry handheld with Google Calendar. Simply go to http://m.google.com/sync in your mobile browser to download and install the Google Sync for mobile application.


Once installed, simply click on the Google Sync icon (which looks like this):
Then, sign in to your Google Account or your Google Apps account, and that's it. The Calendar application on your BlackBerry will always be synchronized with your Google Calendar. You can even edit events or create new ones on the handheld.

Get more information on Google Sync.

Picasa Redefined for your iPhone

Joe WalnesSoftware Engineer, Google mobile team in London

I was sitting in the pub recently (I'm a Brit, it's what I do), and I wanted to show my friend a photo of the sunset I saw on my honeymoon. I pulled out my phone and started typing in the URL for Picasa Web Albums. Before I could continue, he threw his shiny iPhone into my hand. He told me to launch the Safari browser bundled on the iPhone and give that a try.

I had a look around some websites and I really liked how they looked on the iPhone. I could get to everything I needed. I went to picasaweb.google.com but it didn't quite feel right. It was using some very cool AJAXy features, but these were designed with a desktop web-browsing experience in mind. So the next day I had a go at creating a new interface for Picasa Web, designed for the iPhone.

Today, I'm happy to tell you that we've just released this new iPhone interface for Picasa. After you go to Picasa on your iPhone and log in, you can quickly see all your albums that you've uploaded to Picasa Web. If you click on any of the albums, you can get a full view of your picture with comments from your friends. Or you can click on Slideshow, sit back and watch the pictures scroll. You can also search for photos in your album or through community photos. Finally, with one of my favorite features, you can view your friends' albums through favorites.

What are you waiting for? If you have an iPhone or iPod Touch go to http://picasaweb.google.com and check it out. Alternatively, you can go to www.google.com and launch the application from the "More" tab. Note that we've only launched in English so far, so you'll have to change your language preference if you're not in an English-speaking country.

For those that have never used Picasa before, visit our web site for PC users or Mac users. You can easily upload all your photos from your desktop. If you have any suggestions or feedback, please leave us a comment below.



Update Google Mobile Products on your BlackBerry with One Click



If you find it hard to keep your BlackBerry up to date with Google's expanding mobile product suite, we hope we just made your life a little easier. The new Google Mobile Updater for BlackBerry makes it simple for you to stay informed and current by telling you when new products and updates are available for your phone and allowing you to install them with a single click. The Updater will even put an icon for each product on your BlackBerry's main menu, making it as easy as possible for you to get to your favorite Google mobile products.

Now you can easily get the latest Google mobile applications like Google Maps for Mobile with My Location (the magical blue circle on your map), and web applications like Picasa Web Albums and Google Docs -- all of which you can choose to install to your BlackBerry's main menu for easy access.

Google Mobile Updater is also the only way you can get the latest, fastest Google mobile search for BlackBerry. In under a second, you can start entering your query without waiting to load the Google home page. This saves you valuable time when you are trying to find the answer to that quiz question, the address of a nearby restaurant or the latest price of your favorite stock. You can assign a convenience key to make it even easier to access Google search.

To get Google Mobile Updater, visit mobile.google.com on your BlackBerry and click "Download all" under "Get all Google products in one go." From there, you can get the latest Google search application by selecting "Search" and then "Update." Note that right now, Google Mobile Updater and the new Google search experience are only available for BlackBerry devices in the U.S. In the future, whenever we launch new products or updates we will let you know by changing the Google Mobile Updater icon to have a green arrow, like this:

Google Developer Podcast: Android



Dianne Hackborn and Jason Parks are two of the architects on the Android engineering team, and in this podcast they talk to us about the Android platform from a technical perspective.



Dianne and Jason share a background at both Be and PalmSource, and talk about how that experience has been applied to Android. Other topics covered include:




  • Some history behind the project

  • The high level architecture of Android. For example, how Linux processes handle the VM and manage security (the VM doesn't handle it)

  • Details on the Dalvik VM and how it is optimized for small devices

  • The architecture: From Intents to Views to Permissions and more

  • How XML is slow, but the tools convert the XML to a nicer format for you

  • The tooling and steps for building an application on Android

  • How so many objects have a URL, and how the environment is like a mini-SOA (Services across processes instead of across the network)

  • Thoughts on how you program for small devices, and things to watch out for if you move from the desktop

  • The control, or lack of control that you have over the application lifecycle

  • "Everything you do drains the battery"

  • The thread story: they exist, you don't have to deal with them if you don't want to, and the UI

  • Using XMPP for messaging



You can download the episode directly, or subscribe to the show (click here for iTunes one-click subscribe).

Google on the iPhone: Fast and Fluid

Posted by

We all know that using the web on mobile phones can be a challenge sometimes. Compared to our personal computers, the screens are smaller, it's more difficult to navigate and enter text, the network connections are slower, and the browsers lack many of the features we've become accustomed to. I deal with this every day as both a developer and a user of mobile web applications. So you can imagine how excited I was when the iPhone launched with a large touch screen, Wi-Fi, and a full-blown Safari web browser!

I started thinking about how to use AJAX technology to improve Google on the iPhone. I set out to create an application that would preload my favorite Google products and allow me to switch between them instantly. I wanted web results as well as image, local, and news results without having to repeat my search. I wanted to check Gmail and my news feeds in Google Reader without having to load a new page every time. I also wanted Google Suggest to save me time typing queries on the virtual keyboard.

I created a prototype and showed it to some fellow Googlers. After that, things started moving pretty quickly. A few weeks (and a few gallons of mint tea) later, I had an improved version which Googlers throughout the company were using on their iPhones (it works great on the iPod Touch too). Now we want to share it with everyone.

Our guiding principles were "fast" and "fluid." We think we've achieved both, thanks to some AJAX magic made possible by the iPhone's Safari browser. To try it out, just go to www.google.com on your iPhone.

We want to know what you think! You can post your comments below or submit specific questions on our discussion board. We hope you'll like it.


The Auction

In case you missed it, Google officially announced today that we'll be applying to participate in the upcoming 700 megahertz spectrum auction. You can read more about it on the Official Google Blog. As Chris notes, we'll be obligated to remain silent on this for awhile -- just so you know.

A Maze of Twisty Little Passages



The end of last week was Thanksgiving in the US, the tradition is to be with family, eat too much food and watch football (not necessarily in that order).



Apparently some folks took the chance to work on Android projects too. We are highlighting a few of the projects that caught our eye.



One of the coming of age rituals of any new platform is the porting of the Z-machine – the interpreter used in the Zork series of games from Infocom. Now Android has the Z-machine thanks to sussman and mariusm. The project, called Twisty, is available on Google code hosting. Thanks for the lost productivity you guys.



Testing is also a hot topic on our Google groups. While JUnit is bundled with the Android SDK to make it possible to do unit testing, there are many other kinds of testing, like automated acceptance testing. Positron builds on the Android instrumentation features from the SDK to make automated acceptance testing of Android applications possible. The author, phil.h.smith, has a pretty good introduction on how to use Positron as well.



Plugins for other IDEs are another favorite on the Android Google groups. While there are only rumblings about a NetBeans plugin at present, the idea-android project already has an early release for IntelliJ IDEA thanks to aefimov.box and intelliyole.



Dion Almaer also picked up on a crossover GWT/Android project which looks pretty amazing too. Chronoscope is an open source charting and visualization library written in GWT. The team were able to take the library, and with 8 hours of playing with Android, had a port to the Android platform.



Of course, there are many more Android projects springing up all the time, as a search of the android label on Google code hosting will demonstrate. It's great to see all this activity just a couple of weeks after the SDK was released.

New magical blue circle on your map



We've all been there: You're out and about, and you need to figure out where you are, what's around you, and how to get there. Google Maps for mobile can help you do all that, but first you have to enter in a starting point using the keypad. And let's face it -- entering things into your phone using the keypad is so 2006. While some people are lucky enough to have GPS-enabled mobile phones that provide location information for Google Maps for mobile, the vast majority of us are not. So what to do?

Starting today, we have an answer: Google Maps for mobile with My Location . My Location is a new beta technology from Google that uses cell tower identification to provide you with approximate location information, so it will work on phones without GPS. Simply fire up Google Maps for mobile, press [0], and the map will indicate your approximate location by centering on a blue circle like this:

If you do have a GPS-enabled device, My Location can actually complement it. My Location kicks in faster than GPS in most cases, so you can access your location even faster on the map. It also works reliably indoors (unlike GPS) and doesn't drain your phone battery at the rate that GPS does.

Of course, this feature is in beta, which in this case means a few different things: First, although accuracy and coverage may vary, both will improve over time as more and more people use Google Maps for mobile. Second, My Location isn't currently supported on all devices (see our Help Center for more on this); we're working on that. Third, we'd love to get your feedback on it -- feel free to leave your comments below.

To give Google Maps for mobile with My Location a try, text "MYLOCATION" to 33669, or head to www.google.com/gmm on your mobile browser.

If you'd like to learn more about the My Location technology, take a look at this short video:

We're open for business



Welcome to the new Google mobile blog. We hope this will be your first stop for the latest news and views from our global team that has been working to bring you innovative mobile products for awhile, now.

Through this blog, we plan to share with you over time more on what we're up to, who we are, and what we think is going on in this dynamic industry. We'll have plenty of product launches, features, and tips to tell you about. We also hope to introduce you to some of our partners and some of our users along with the applications they love. Additionally, we plan to offer up comments on trends in the industry and even an occasional take on non-Google products we feel are particularly noteworthy.

Earlier this month we launched Android, one of our most ambitious mobile initiatives to date. While Android is an important part of our mobile strategy, so too is our goal of developing useful and compelling mobile products for our current and future users, devices, platforms, and partners. As always, you can find out more about our full suite of Google mobile products at mobile.google.com.

Finally, we're very interested in reading what you have to say so we invite you to submit comments below pertinent blog posts. We'll do what we can to respond; feel free to respond to each other as well. For specific questions on Google mobile products, please visit our discussion group and submit them there.

A Stitch in Time



Background: While developing my first useful (though small) application for Android, which was a port of an existing utility I use when podcasting, I needed a way of updating a clock displayed on the UI at regular intervals, but in a lightweight and CPU efficient way.



Problem: In the original application I used java.util.Timer to update the clock, but that class is not such a good choice on Android. Using a Timer introduces a new thread into the application for a relatively minor reason. Thinking in terms of mobile applications often means re-considering choices that you might make differently for a desktop application with relatively richer resources at its disposal. We would like to find a more efficient way of updating that clock.



The Application: The rest of the story of porting the application will be detailed in future blog entries, but if you are interested in the application in question and the construction of it, you can read about it in a not-so-recent Developer.com article about using Matisse (a GUI builder for Swing). The original application is a Java Swing and SE application. It is like a stopwatch with a lap timer that we use when recording podcasts; when you start the recording, you start the stopwatch. Then for every mistake that someone makes, you hit the flub button. At the end you can save out the bookmarked mistakes which can be loaded into the wonderful Audacity audio editor as a labels track. You can then see where all of the mistakes are in the recording and edit them out.



The article describing it is: http://www.developer.com/java/ent/print.php/3589961



In the original version, the timer code looked like this:



class UpdateTimeTask extends TimerTask {
public void run() {
long millis = System.currentTimeMillis() - startTime;
int seconds = (int) (millis / 1000);
int minutes = seconds / 60;
seconds = seconds % 60;

timeLabel.setText(String.format("%d:%02d", minutes, seconds));
}
}

And in the event listener to start this update, the following Timer() instance is used:

if(startTime == 0L) {
startTime = evt.getWhen();
timer = new Timer();
timer.schedule(new UpdateTimeTask(), 100, 200);
}


In particular, note the 100, 200 parameters. The first parameter means wait 100 ms before running the clock update task the first time. The second means repeat every 200ms after that, until stopped. 200 ms should not be too noticeable if the second resolution happens to fall close to or on the update. If the resolution was a second, you could find the clock sometimes not updating for close to 2 seconds, or possibly skipping a second in the counting, it would look odd).



When I ported the application to use the Android SDKs, this code actually compiled in Eclipse, but failed with a runtime error because the Timer() class was not available at runtime (fortunately, this was easy to figure out from the error messages). On a related note, the String.format method was also not available, so the eventual solution uses a quick hack to format the seconds nicely as you will see.



Fortunately, the role of Timer can be replaced by the android.os.Handler class, with a few tweaks. To set it up from an event listener:



private Handler mHandler = new Handler();

...

OnClickListener mStartListener = new OnClickListener() {
public void onClick(View v) {
if (mStartTime == 0L) {
mStartTime = System.currentTimeMillis();
mHandler.removeCallbacks(mUpdateTimeTask);
mHandler.postDelayed(mUpdateTimeTask, 100);
}
}
};


A couple of things to take note of here. First, the event doesn't have a .getWhen() method on it, which we handily used to set the start time for the timer. Instead, we grab the System.currentTimeMillis(). Also, the Handler.postDelayed() method only takes one time parameter, it doesn't have a "repeating" field. In this case we are saying to the Handler "call mUpdateTimeTask() after 100ms", a sort of fire and forget one time shot. We also remove any existing callbacks to the handler before adding the new handler, to make absolutely sure we don't get more callback events than we want.



But we want it to repeat, until we tell it to stop. To do this, just put another postDelayed at the tail of the mUpdateTimeTask run() method. Note also that Handler requires an implementation of Runnable, so we change mUpdateTimeTask to implement that rather than extending TimerTask. The new clock updater, with all these changes, looks like this:



private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
final long start = mStartTime;
long millis = SystemClock.uptimeMillis() - start;
int seconds = (int) (millis / 1000);
int minutes = seconds / 60;
seconds = seconds % 60;

if (seconds < 10) {
mTimeLabel.setText("" + minutes + ":0" + seconds);
} else {
mTimeLabel.setText("" + minutes + ":" + seconds);
}

mHandler.postAtTime(this,
start + (((minutes * 60) + seconds + 1) * 1000));
}
};


and can be defined as a class member field.



The if statement is just a way to make sure the label is set to 10:06 instead of 10:6 when the seconds modulo 60 are less than 10 (hopefully String.format() will eventually be available). At the end of the clock update, the task sets up another call to itself from the Handler, but instead of a hand-wavy 200ms before the update, we can schedule it to happen at a particular wall-clock time — the line: start + (((minutes * 60) + seconds + 1) * 1000) does this.



All we need now is a way to stop the timer when the stop button is pressed. Another button listener defined like this:



OnClickListener mStopListener = new OnClickListener() {
public void onClick(View v) {
mHandler.removeCallbacks(mUpdateTimeTask);
}
};


will make sure that the next callback is removed when the stop button is pressed, thus interrupting the tail iteration.



Handler is actually a better choice than Timer for another reason too. The Handler runs the update code as a part of your main thread, avoiding the overhead of a second thread and also making for easy access to the View hierarchy used for the user interface. Just remember to keep such tasks small and light to avoid slowing down the user experience.



So that's it for the first of what will be a series of Android tips. Hopefully this will save you a little head scratching on what will probably be a fairly common thing to want to do (i.e. make something happen or update at regular intervals in a lightweight way in your application). There is plenty of more material from my experience of porting this very simple application which will be covered in some of the future "tips" articles. There are some other great tips being discussed as well as an opportunity ask questions at the Android Developers Discussion Group.

Android: the first week

Wow, what a week! The response from the community on Monday's Android SDK release has been overwhelming. Our forums have been flooded and we're glad to be helping people dig in writing new applications.



A handful of quick notes for this Friday evening:




  1. We've released a quick point-revision of the SDK to fix some high-priority issues. You can now download M3-RC22a and read the release notes. Don't forget to get Eclipse to update the ADT plugin.


  2. A couple of good articles on the web for your reading pleasure:



  3. Finally, we've split our forums into topic areas to make them a bit easier to manage. Be sure to check out the details and join the discussion.



Have a great weekend, and happy Android coding.

Just show me the code

OK, you've downloaded the SDK and are now ready to build the next killer app for mobile (and maybe win some $$$ in the process ;)



Activities? Intents? SimpleCursorAdapter? Huh? Hmm...how do I proceed?



Well, that depends on your style. Some will want to carefully go through all the documentation top-to-bottom, while others may prefer to just dive right into code.



Either path will eventually lead to the sample applications provided in the SDK — these samples will be invaluable in your quest for Android mastery. The samples include:




API Demos

A 'kitchen sink' application that covers the most useful aspects and components of the Android APIs. You'll see different implementations of Activities, Services, Notifications, Layouts, as well as methods for working with graphics and text. This application provides a good source of templates for your projects as well as a reference to 'How do I do this?'-type questions.


Lunar Lander

A game which demonstrates how to load and draw graphics, animation techniques, taking user input, saving state when the user pauses the game, and more. Coding shouldn't be this fun!


Note Pad

You'll learn how to use Intents to open a new screen, access a local database, and more. This sample is a good introduction to application flow and life cycle management, which are vital in developing more complex applications.



Source code and resources for these applications are available in the SDK (samples/) as well as online: http://code.google.com/android/samples/



Here are some suggestions on what to do next:




  • Read through each application's manifest file (AndroidManifest.xml) to learn about the typical structures in an Android application.

  • Modify the code to familiarize yourself with the building and testing process.

  • Use a particular code snippet as either a base template or to get some needed functionality for your own project (why reinvent the wheel?)



Put these sample applications through their paces; and if you get stuck, please post your questions to the Android Developers Discussion Group.

This is the droid you're looking for

Following last week's announcement of the Open Handset Alliance, today we're happy to offer an early look at the Android SDK. We're eager to get feedback from lots of developers in our discussion group. We're also providing developer documentation and this blog to help you get up and going.



You're probably wondering about what's available today. This preview of the SDK will allow you to develop Android applications that you can run, test, profile, and debug using the emulator and the other included tools. Note that the look and feel of the user interface in the emulator is a placeholder for a final version that is under development.



One of our goals in releasing the Android SDK is to unleash the creativity of application developers on the platform. We'd also like to get feedback early enough that we can make changes before the first Android-powered devices are available to the public. We plan to release updates to the SDK regularly which means that there will be additions and changes to the APIs and user experience — subscribe to this blog to stay up to date.



We're really looking forward to seeing all the amazing applications that developers will create on an open mobile phone platform. In fact, you may even want to enter your application into the Android Developer Challenge — a USD$10 million challenge sponsored by Google to support and recognize developers who build great applications for the Android platform.