Although Android development tools are available for a
wide variety of platforms, we provide a pre-congured vir-
tual appliance for four important reasons. First, we avoid
mistakes or incompatibilities in development tool installa-
tion. For example, when the course was oered, the An-
droid development tools did not support Mac OS 10.6, Mac
OS versions prior to 10.4, or Linux distributions other than
Ubuntu. Students may also use non-standard PC congu-
rations which would put unnecessary management burden
on the instructional sta. Second, the virtual appliance can
be used as a safety net for students who corrupt their de-
velopment tool installation or experience complete system
failure. The VMware Workstation snapshot feature can be
used to make incremental backups of student work and any
changes they make to the development environment. A snap-
shot is also an easy way for students to begin a homework
assignment from a known good conguration. Third, by pre-
conguring all of the development tools, we avoid compli-
cated cross-compilation setup by providing simple, standard
Makeles and shell scripts for both kernel and user-level de-
velopment. The Android SDK is designed primarily for GUI
application development not kernel development, so some
conguration of the compiler and Android runtime libraries
is necessary. A standardized environment allows us to pro-
vide simple Makele examples for user-level test programs
and simple Linux kernel cross-compilation instructions. Fi-
nally, the virtual appliance gives us freedom to customize
both the tools and the Android user space. Customizing
the Android user space allows us to create more engaging
projects as well as to overcome deciencies in development
tools. We use a customized version of the Android emulator
which enables students to use the Sensor Simulator program
from OpenIntents [12] to inject orientation and acceleration
data into the emulator by interacting with a 3D model of
a phone instead of manually entering numbers into a shell
prompt. We also use a custom device drawing library to sup-
port the kernel scheduling project described in Section 3.3.