When Android was being invented, its designers faced many choices whose outcome would determine the success or failure of their project. Once they had rejected all the other smartphone operating systems, both closed and open source, and decided to build their own atop the Linux kernel, they were faced with somewhat of a blank canvas. One important choice was which user interface technology to deploy: Java ME, Swing, SWT, or none of the above.
JavaME is the Java Micro Edition, Sun/Oracle’s official standard API for cell phones and other small devices. Java ME is actually a pretty big success story: tens or hundreds of millions of cell phones have a Java Micro Edition runtime inside. And every BlackBerry made since around 2000, and all BlackBerry smartphone applications in the world (before BBX), are based on Java ME. But the Java ME GUI was regarded as too limiting, having been designed for the days when cell phones had really tiny screens.
Swing is the Java Standard Edition (Desktop Java, Java SE, a.k.a. JDK or JRE) GUI. It is based atop Java’s earlier widget toolkit (AWT). It can make some beautiful GUI music in the right hands, but is just too large and uses too much overhead for Android.
SWT is the GUI layer developed for use in the Eclipse IDE itself and in Eclipse rich clients. It is an abstraction layer, and depends on the underlying operating system–specific toolkit (e.g., Win32 in the Microsoft arena, ...