In my last post, I wrote about my first Android app, a spinning OpenGL-accelerated cube. I didn't release that one to the Android market of course; it was just a test.
However, I am proud to say I have now written an app, "RuneScape Map", and released it to the Android market! It is a tool for players of the popular online game RuneScape, that lets them view the large (12-megapixel) world map on their Android device. Of course, they can pinch-zoom and scroll around the map with their fingers.
It sounds like a simple app, but it actually took some clever tricks; the 12 megapixel image can't fit into memory -- in fact, if you try to view it through the Android browser, it's extremely low-resolution and if you zoom in, it is too blurry to read. It was a wonderful feeling to get it working, and even more wonderful to actually put it out there in the public.
Anyway, my point of this post was not to advertise my app; I doubt any one of the readers of this article plays RuneScape. I guess my point is, Android apps aren't tough to make, and they're a ton of fun to develop. If you are a Java developer, get started and you'll see what I mean!
All it takes is to download the Google SDK and read some of the documentation. There is plenty of material to read through Google's online reference. The SDK comes with an emulator which looks and acts like a real Android phone, right on your screen. You don't even need a physical device to develop apps (though of course you should test on physical devices).
Here are some good reasons for you, as a Java developer, to start Android development:
The SDK installs into Eclipse, so you can use the IDE that you already know and love. When you hit "Run", it launches the emulated phone and starts your application, or if you connect your real phone to your computer, it will automatically deploy it to your device!
The Android virtual machine supports most of the Java 5 libraries you already use. You can look through the package index to see if a certain library exists in the Android environment. The big omissions are Swing and AWT, which of course are replaced by the Android's custom GUI system (which optionally uses XML to define the layout of widgets!), but many libraries like java.util, java.io, java.math, java.net, javax.xml, junit, and so on are implemented just as you are used to. And there's even OpenGL support, which is great for someone like me who is looking to develop a 3D game in the near-ish future.
Your apps are portable. I don't mean cross-platform, I mean literally portable. Picture yourself in an interview, the interviewer asks about your prior work, and you just calmly pull your phone out of your pocket, tap the icon of your whiz-bang application, and hand the phone to them. I don't know about you but if I were that interviewer, I think I'd be impressed (assuming of course that the app is as thought out as the delivery). Or, see my other scenario at the end of my previous blog post, about the mobile WebSphere console.
There's a large, and growing, audience. Though the iPhone is ahead, the Android platform is growing in terms of popularity and number of phones. Many people (such as myself) prefer the additional customization and freedom that Android allows users, and many people (also such as myself) are migrating from "dumbphones" to smartphones.
There is a lot of untapped potential and plenty of room to grow. In my case, I searched the market for "RuneScape" and found nothing, so I developed an app myself. This kind of thing is common; once you have access to the Android market, go search for anything you can think of and see what's out there. There's a good chance you can find something that hasn't been made yet, so go make it! Fill that need!
I hope I have convinced you to at least consider the Android platform, if you are interested in these type of apps. If not, that's okay! But I personally find it very exciting to make something that runs on my phone, anywhere, and can do anything that I can write in Java.
Matching: android X
I just got an HTC Droid Incredible last Thursday, so naturally I've been playing with it nonstop. It is admittedly my first smartphone, though I've owned my iPod Touch 2g for almost a year so I am well acquainted with apps. So far I really love the Google Android OS, which I expected given that Lifehacker recently recommended it over the iPhone OS for geeks. But nothing about the phone gave me more joy than a spinning cube.
Last night, I downloaded the Android SDK, installed it into Eclipse, and wrote some Java to create an app - a spinning colorful 3D cube, hardware accelerated with OpenGL ES. After it ran perfectly in the emulator, I connected my phone, installed drivers and ran a command to transfer it. My "OpenGL Test" app may not be any more than a spinning cube with no interaction, but to see it run on my phone screen is so rewarding, especially after so little time and effort.
And as I posted on Facebook shortly after: "I've had my iPod for one year; Apple requires a Mac to develop for it, so I have done nothing as far as coding on it. I've had my Incredible for 5 days; I just developed my first mini Android app, a spinning 3D cube, and deployed it to my phone." I think this is a definite win for Android, Java, and Eclipse!
If you have an Android phone and haven't touched the SDK, go give it a try! It's daunting at first but I promise it's not very hard!
Anyway, the whole reason I wanted to write this post was to ask about IBM and the Android Market (the equivalent to the iTunes App Store). IBM has no presence there! If we are trying to be leaders in Java, would it not make sense to develop some Android apps in Java, alongside our other Java initiatives?
For example, I think a slim WebSphere console would be neat. Let's say it's 3AM and IT guy Bob Smith is woken up by a call from a client; their web application is being hacked into, they're in a panic, and they want it to be taken offline immediately to stop the attack while they fix it. Normally, Bob would get up, run into his home office on the other side of his house, turn on his computer, VPN into his company, connect to the WebSphere server, and then stop the application. But what if it was as easy as hanging up with the client, tapping the WebSphere app, and tapping the stop button next to the client's web application. He wouldn't even have to get out of bed, not to mention the time saved.
Do you think this is something that IBM, or more importantly IBM's clients, would find desirable? Is there a reason for IBM's neglect of the Android Market?