So to target Android devices, you need to either write your applications in Java, or a language that compiles into Java source code or JVM byte code. Java is the first language of Android. Like most programming languages, Java has its good and bad sides. Today there are many languages targeting the JVM, like Scala, Cloure, Kawa, JRuby and many more. And fortunately some of these even support Android. When targeting Android - which typically runs on mobile phones - package size and execution speed (and battery usage) quickly becomes an issue. Some of the languages and their toolkits have improved to a level where deploying to Android devices is a real option.
Another thing to be aware of; When talking about programming languages below, I am mostly focusing on syntax, not the standard libraries that typically come with the language. A small language like Clojure typically has a payload of just below 2MB if you need "the full" language and libraries. The reality today is that if you want to target Android devices, you need to use the built in Android libraries, and there are practical limitations in how much of their standard libraries the languages can carry over to Android devices (unless those libraries are very small of course).
I recently took another look at the JVM Android landscape and this is what I found;
Mirah is still around. It's Ruby programming for Android. If Ruby is your preferred language this may be a good choice. Mirah also carries very little overhead; that means that your apk size will be real small (starting around 16KB for a minimal application). It also means that beside the Ruby syntax, you probably should not count on your favorite Ruby library and/or flexible data structures are available. Even if the syntax is Ruby, your environment is Android, and Mirah is a very thin wrapper on top of the Android libraries, and could probably be considered java with a ruby syntax (which may be a good thing). While Mirah has been around for a while, tooling and documentation seems to be lacking, and many of them are outdated.
Scala has had decent Android support for a while. My knowledge about Scala is superficial so I will not make too many comments about it, other than to note that when compiling for Android, the manage to get their apk package size down to around 10KB, but the compiling process is also famous for being painfully slow.
Clojure also has decent Android support, but so far the apk sizes created make it unsuitable for general applications to run on any (-body's) device. A minimal Android application on Clojure typically start at 1.7MB, although I've read reports that die hard Clojure proguard experts have managed to get it down to the "hundreds of KB" level. That's still a long way off compared to the rest, so I personally do not consider Clojure an alternative for Android development today.
I recently found Kawa, a JVM based Scheme language, which seems to offer a decent language (Scheme, a Lisp variant) together with a reasonable apk package size. In my own tests a minimal "hello world" style application in Kawa compiles down to an apk file of 49KB. I just recently started developing in Kawa so I am unable to comment on what those 49KB give us. If it's not really needed, I guess more proguard tweaking will make the apk smaller. Alternatively, there is a minimal standard library in there making development less painful than having to deal with java syntax for simple data structures and similar. Time will tell. But from my point of view, 50KB is not too large to get started, so unless there are other issues that will make the payload increase significantly for normal development, Kawa is looking very promising.
For my own sake, I will be trying to use Kawa for my next project, and mix in with native Java where it makes sense.