Android is the leading platforms for mobile development outside of the iphone ecosystem. Android’s framework is very feature-rich and allows you to make one app that runs on countless handsets, but the framework introduces it’s own unique paradigms and abstractions that make the learning curve a little larger than other java-based phone platforms.
As a development platform, Blackberry is a joy to work with. Their developer tools are clearly documented, provide a rich feature-set, and very straight-forward for those familiar with Java, providing a smaller learning curve than Android. But Blackberry’s platform only runs on Blackberry’s phones.
J2ME is primarily used for low-end handsets called “feature phones”. Its market share is increasingly being lost to Android handsets. J2ME is basically a stripped down version of Java for mobile devices that has a low-overhead allowing it to run on phones with limited amounts of memory, screen size, and other resources.
Applications have to be custom-tailored for each handset being supported. To look presentable, an application needs to be tailored to match the screen size (including the consideration of whether or not the annunciator bar can be hidden or not), and reflect the individual capabilities of the device (eg: whether or not the phone has a touch-screen, speakerphone, vendor-specific extensions, etc). Luckily, many of these changes can be accomodated through conditional compilation markers, similar to C’s “ifdef” feature, to allow a single code-base for many phones.
Other Embedded Platforms
One of the earliest experiences in my professional career was writing C code that ran on an embedded device with a motorola 68k class-microprocessor. There was lots of bits and bytes involved, stuffing the data into a very compact data-structures to transmit over a low-bandwidth radio network. You also had to be diligent to keep in mind the order of operations on mathematical calculations, to avoid truncation/rounding errors caused by the lack of a floating-point math library. But overall, despite requiring a different mindet than desktop applications, the tangible aspect of working directly with hardware devices makes it quite rewarding and fun.