views:

780

answers:

6

Hello guys, I just got myself an android phone and I'm dying to start coding on it ! However I'm not a big java fan, although I can live with that, I would like to know if there're reasonable alternatives for the android virtual machine. I've done a medium sized project using clojure, however from the reviews I read, it's very slow when running on android. How about scala ? I read that some people did experiments with it in android, is it "fast enough" ? How big is the learning curve ?

Cheers, Ze Maria

+2  A: 

There's the NDK which allows you to write parts of your program in C or C++.

There's ASE that allows you to write scripts in python and maybe other languages. There's no python compiler despite you might hear otherwise.

I have read something about scala but since I wasn't really interested I did not pay attention.

Lo'oris
NDK only produces code for ARM at the moment. So devices with other CPUs are left out. Like the WeTab.
stesch
+4  A: 

This: http://stackoverflow.com/questions/476111/scala-programming-for-android seems interesting.

Alex
+2  A: 

There's definitely quite a few people doing Android development in Scala. Of particular notice, there's even a plugin for SBT, the prefered builder for Scala projects, with Android-specific targets.

As for learning curve, I can't speak for Android development itself, as I haven't done that. As for Scala, you can be productive very quick, but learning all the particularities of the language takes time. You don't need to learn all the particularities -- I have seen people write non-toy programs with barely any experience -- but some people can't stand not knowing something about the language they are using.

Also, a lot of Scala code out there is very declarative. If you look at the SBT build files, for example, they are mostly declarative. Some people get very upset by that, for some reason.

I'm guessing what I'm trying to say is that it depends mostly on you how well you'll take to Scala.

As for speed, Scala code can be as fast as Java code, though that may call for avoiding the more high level abstractions in exchange for uglier, but fast, code. It depends a lot of what kind of computation you are doing, though.

Daniel
+2  A: 

Android 2.2 adds jit to the VM which is supposed to make loading Clojure programs much more efficient. Clojure produces a lot of small classes which take a while to load when the android program starts up. this should be alleviated with the enw android though its not intolerable now.

Arthur Ulfeldt
And Clojure code relies on a good GC, which dalvik can't deliver. JIT or not.
stesch
+1  A: 

Just noticed that some Scala examples can be found in trunk: http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/docs/android-examples.

I haven't tried myself but it's encouraging.

huynhjl
A: 

"fast enough" - you are running applications on a mobile phone that question relative to what you expect it to do.

Also java's performance has been increased through the years. But also run you are just coding in java. Google has created a tool that take java byte code and converts it to .dex (Dalvik Executables). Dalvik the VM implementation that java used is optimized for this platform. Which mean you can program in a high level language like java which provides many helper classes which means you will be more productive.

They do have a NDK but I believe you have to still have a java front end and have your java code call the NDK code when necessary. You pretty much only want to write the native code when you really need to optimization. Alot of java classes like java nio and the opengl classes are just wrappers to low lever calls that use hardware resources directly.

I probably over answered you question a little.