Android provides two native layers that handle audio software:

Porting Android to other audio stacks (OSS, ALSA, proprietary user-space audio libraries, etc.) requires inheriting from and modifying AudioHardwareInterface to support the driver-specific implementation.
AudioHardwareInterface (//device/servers/audio/flinger) contains several pure virtual functions that the audio driver class being ported needs to implement.
Once the audio driver that inherits AudioHardwareInterface is ready, modify the static function AudioHardwareInterface::create() in order to link/load the driver in Android.
Assume the manufacturer audio driver inherits from AudioHarddwareInterface and that it is compiled into a native shared library (libaudio.so). In this case, use dlopen to load the library.
You can find an example of a similar implementation in //device/libs/media/mediaplayer.cpp. (Note that the example below uses libpv.so because this is a real code snippet from mediaplayer.cpp. If your native shared library is called libaudio.so, replace libpv.so with your libaudio.so.)
// load PV library and create PV player
mLibHandle = dlopen("libpv.so", RTLD_NOW);
if (!mLibHandle) {
LOGE("dlopen failed on libpv.so\n");
return UNKNOWN_ERROR;
}
createPlayer_f createPlayer = reinterpret_cast(dlsym(mLibHandle, "createPlayer"));
if (!createPlayer) {
LOGE("dlsym failed on createPlayer in libpv.so\n");
return UNKNOWN_ERROR;
}
Load the libraries with a call from AudioHardwareInterface::create(), as illustrated below (full code found in //device/servers/audioflinger).
if (property_get("ro.kernel.qemu", value, 0)) {
LOGD("Running in emulation - using generic audio driver");
hw = new AudioHardwareGeneric();
}
else {
// Insert calling of dynamic loading of driver here...
}
if (hw->initCheck() != NO_ERROR) {
LOGW("Using stubbed audio hardware. No sound will be produced.");
delete hw;
hw = new AudioHardwareStub();
}