As I release my 3rd Alpha-version of Sparql Droid I thought I’d document a few lessons learned and open items as I work with the Android environment. Some of my constraints are based on targeting smart phones rather than tablets, but the lessons learned around development environments, screen layouts, and memory management are valuable.
I’ll start on the development side. I use Eclipse and the android development plugin is very helpful. It greatly streamlines the development process. Principally, it automates the generation of the resources from the source files. These resources, such as screen layouts and menus, require a conversion step after being edited. The automation, though, comes at a price.
Taking a step back, Android doesn’t use an Oracle-compliant JVM. Instead it uses the Dalvik VM. This difference creates two major ramifications: 1) not all the standard packages are available; and 2) any compiled Java code has to go through a step to “align” it for Dalvik. This alignment process is required for class files you create and for any third-party classes (such as those found in external JAR files). Going back to item 1, if an external JAR file you use needs a package that isn’t part of Dalvik, you’ll need to recreate it.
The alignment process works pretty fast for small projects. My first application was a game that used no external libraries. The time required to compile and align was indistinguishable from typical compile time. However, with Sparql Droid, which uses several large third-party libraries, the alignment time is significant – on the order of a full minute.
That delay doesn’t sound so bad, unless you consider the Build Automatically feature in Eclipse. This is a feature that you want to turn off when doing Android development that includes third-party libraries of any significance. Turning off that feature simply adds an extra step to the editing process, a manual build, and slightly reduces the convenience of the environment.
With my first Android project, I was able to edit a resource file and immediately jump back to my Java code and have the resource be recognized. Now I have to manually do a build (waiting a minute or so) after editing a resource file before it is recognized on the code side. Hopefully the plug-in will be improved to cache the aligned libraries, saving that time when the libraries aren’t being changed.