From server side to Android

Initially published at Qvik Blog

I’ve been building web applications professionally for over five years. I’ve worked on various platforms with different programming languages, platforms like .Net, PHP, Ruby on Rails and J2EE. In the recent years I’ve mainly worked on server side Java applications, mostly because there are a lot of this kind of work available and because I enjoy working on something where the development efforts are quickly visible.

Recently I was given an opportunity to develop an application to the Android platform and, since I’m keen to try out new things, I took it. I thought that since Android application are developed with Java, it should be fairly easy thing to do. So now few weeks into development, I’m writing this blog post about my initial impression about the Android platform and development.

The Good

One of the positive things about Android, for me at least, is that the development is done with Java. So there’s no need to learn a new language or a new syntax to be able to write code. This also means that you can get an Android project to full speed rather quickly with experienced Java programmers, the only thing they need to learn is the Android way of doing things.

I’ve also been surprised about how close the Android development is to server side development. Of course there are differences in things like threading, but I never expected to able to use advanced features like Dependency Injection in Android until I stumbled in to RoboGuice. Also the fact that Android projects can be built with Ant means that the dependencies can be sorted with Ivy and builds can be managed with Jenkins.

The Bad

In server side development it’s common that projects are divided into smaller pieces called modules. Modules are easier to develop and test since they only focus one or two things. I’ve tried the same approach with the Android project I’m working on and I found out that it’s not that easy to achieve. Everything behaves the same if your modules contain only code, but once you have layouts and assets in them, everything goes to sour. The problem is caused by the Android compiler, which cannot find assets compiled into modules. Although this can be easily avoided by keeping all assets in the same project, it makes sharing code between projects more difficult.

In addition there are couple of things that bother me with the Android development tools. All in all the tools are pretty good and do the job they were meant to do, though the Android emulator could be a little bit faster and why oh why doesn’t the emulator log scroll automatically? These are small but irritating things, at least when you run into them multiple times every day.

Summary

Although I only have a few weeks experience with the Android platform and despite those small irritating things, I can honestly say that I like the Android platform. The language is familiar, the development tools are pretty good and the whole programming mindset doesn’t differ that much from the server side. With a few weeks under my belt, I’m not wondering the success of the Android platform, it’s a pleasure to work with.

Update (7.1.2012)

Lot of things have changed since 2010. One of them being the whole Hudson / Jenkins debacle. Since my preferred CI server is nowadays Jenkins, I updated the links to point to it.