Using ALSA audio drivers in Android

While working on a port of the Gingerbread (2.3.7) userland of Android for the N810, I had to figure out how to add support for an audio chip with a working ALSA driver in an Android build. The information was out there but it took me a while to figure everything out, so here’s a brief summary of the process.

First, of course, ALSA drivers for the chip must be enabled in the kernel; to check whether they are working, see if /dev/snd is properly populated. If not, check if the driver has been compiled into the kernel and not as a module.

There are three libraries that act as intermediate layers between an ALSA sound device and the Android userland. Due to the recent relocation of the Android source tree, I used alternative URLs for the three libraries. The code (shamelessly stolen and modified from this Armadeus Wiki page) is as follows, assuming $ANDROID_SOURCE points to the root of the checked-out Android source tree:

cd $ANDROID_SOURCE/external
git clone git://git.omapzoom.org/platform/external/alsa-lib.git
git clone git://git.omapzoom.org/platform/external/alsa-utils.git

cd $ANDROID_SOURCE/hardware
git clone git://git.omapzoom.org/platform/hardware/alsa_sound.git

However, a bogus commit to the last library in platform/hardware/alsa_sound breaks the build (as explained in this thread), hence:

cd $ANDROID_SOURCE/hardware/alsa_sound
git checkout ece3f1b6f1e6a67d02e42490eca6c7de62220b57

Then, modify the BoardConfig.mk of your build to include:

HAVE_HTC_AUDIO_DRIVER := false
BOARD_USES_GENERIC_AUDIO := false
BOARD_USES_ALSA_AUDIO := true
BUILD_WITH_ALSA_UTILS := true

And that should do the trick.

About the author

I am a software engineer by profession and a passionate technology geek in my free time.