I just found this handy directory of available Android devices over at Google:

http://www.google.com/phone/#

I personally have the Nexus One (sadly not available any more) which I use on T-Mobile. I love it. If I had to get another phone right now, I'm probably look seriously at the Samsung Vibrant, which is the T- Mobile version of the Galaxy S.

I'd definitely recommend against considering any phone that isn't at least running Android 2.1 at this point (and preferably 2.2).

The Android software stack is a (non-standard) Linux kernel hosting a (non-standard) Java VM (called Dalvik) that provides a (semi-standard) Java SE environment. To be more precise, the kernel is Linux, but Google maintains their own fork, but their changes to support a lot of the features needed for a mobile device environment have not been folded back into the mainline kernel. It's possible this may happen in the future. The Dalvik VM uses a different bytecode than the standard Java VM, ostensibly for efficiency in memory constrained environments, but also possibly as a dodge around various legal issues. Google provides a bytecode translator as part of their SDK, so code compiled with standard java compiles can be transliterated. This of course also assumes API compatibility. Android provides most of the standard Java SE 1.6 API, with the major exception being the UI framework. Android uses its own custom UI framework.

There is also an NDK (mentioned earlier) that supports native code development. Since all the current Android handsets use an ARM CPU of some sort, this is also reasonably portable.

As far as using JVM languages other than Java, the major gating factor would probably be if the runtime for that language depends on runtime bytecode synthesis (which see Jython). In contrast, I've heard of people successfully using Scala to write Android code.

As far as the native environment goes, if you are interested in that, you'll probably make sure you get a phone that is easy to root. Both for the purpose of being able to install community built ROMs (customized versions of the software stack) and having full shell access to your device. Then again, for my own purposes, I've never needed to do that.

Unlike iOS devices, it's not necessary to crack your device to run "unapproved" apps on it. The Android App store is the preferred method of software distribution, but all that is necessary to download and run apps from other sources is to go into settings on your device and check one box that says "I take responsibility for running random third party software on my device". How remarkably grown up. Also while Android apps can be signed, it is not required to do so to run them on a device. Again, unlike iOS devices, where app signing is done by Apple to control whose apps are available on their phone, app signing on Android is merely done to signify what developer the app came from. The only real benefit of app signing is that apps from the same developer are allowed root around in each others private storage, which is otherwise not allowed. Apps may of course always share public storage.

-wilhelm

Reply via email to