Fix issue 2001204: libaudiopolicy.so and libaudiopolicygeneric.so libraries must be pre-linked.
diff --git a/libs/audioflinger/AudioPolicyService.cpp b/libs/audioflinger/AudioPolicyService.cpp
index 4810a44..7f6c4ed 100644
--- a/libs/audioflinger/AudioPolicyService.cpp
+++ b/libs/audioflinger/AudioPolicyService.cpp
@@ -23,6 +23,7 @@
 #include <utils/String16.h>
 #include <utils/threads.h>
 #include "AudioPolicyService.h"
+#include "AudioPolicyManagerGeneric.h"
 #include <cutils/properties.h>
 #include <dlfcn.h>
 
@@ -35,9 +36,6 @@
 
 namespace android {
 
-const char *AudioPolicyService::sAudioPolicyLibrary = "/system/lib/libaudiopolicy.so";
-const char *AudioPolicyService::sAudioPolicyGenericLibrary = "/system/lib/libaudiopolicygeneric.so";
-
 static bool checkPermission() {
 #ifndef HAVE_ANDROID_OS
     return true;
@@ -51,47 +49,29 @@
 // ----------------------------------------------------------------------------
 
 AudioPolicyService::AudioPolicyService()
-    : BnAudioPolicyService() , mpPolicyManager(NULL), mpPolicyManagerLibHandle(NULL)
+    : BnAudioPolicyService() , mpPolicyManager(NULL)
 {
-    const char *audioPolicyLibrary;
     char value[PROPERTY_VALUE_MAX];
 
-#if (defined GENERIC_AUDIO) || (defined AUDIO_POLICY_TEST)
-    audioPolicyLibrary = sAudioPolicyGenericLibrary;
-    LOGV("build for GENERIC_AUDIO - using generic audio policy");
-#else
-    // if running in emulation - use the emulator driver
-    if (property_get("ro.kernel.qemu", value, 0)) {
-        LOGV("Running in emulation - using generic audio policy");
-        audioPolicyLibrary = sAudioPolicyGenericLibrary;
-    }
-    else {
-        LOGV("Using hardware specific audio policy");
-        audioPolicyLibrary = sAudioPolicyLibrary;
-    }
-#endif
-
-
-    mpPolicyManagerLibHandle = dlopen(audioPolicyLibrary, RTLD_NOW | RTLD_LOCAL);
-    if (mpPolicyManagerLibHandle == NULL) {
-       LOGW("Could not load libaudio policy library");
-       return;
-    }
-
-    AudioPolicyInterface *(*createManager)(AudioPolicyClientInterface *) =
-            reinterpret_cast<AudioPolicyInterface* (*)(AudioPolicyClientInterface *)>(dlsym(mpPolicyManagerLibHandle, "createAudioPolicyManager"));
-
-    if (createManager == NULL ) {
-        LOGW("Could not get createAudioPolicyManager method");
-        return;
-    }
-
     // start tone playback thread
     mTonePlaybacThread = new AudioCommandThread();
     // start audio commands thread
     mAudioCommandThread = new AudioCommandThread();
 
-    mpPolicyManager = (*createManager)(this);
+#if (defined GENERIC_AUDIO) || (defined AUDIO_POLICY_TEST)
+    mpPolicyManager = new AudioPolicyManagerGeneric(this);
+    LOGV("build for GENERIC_AUDIO - using generic audio policy");
+#else
+    // if running in emulation - use the emulator driver
+    if (property_get("ro.kernel.qemu", value, 0)) {
+        LOGV("Running in emulation - using generic audio policy");
+        mpPolicyManager = new AudioPolicyManagerGeneric(this);
+    }
+    else {
+        LOGV("Using hardware specific audio policy");
+        mpPolicyManager = createAudioPolicyManager(this);
+    }
+#endif
 
     // load properties
     property_get("ro.camera.sound.forced", value, "0");
@@ -106,14 +86,7 @@
     mAudioCommandThread.clear();
 
     if (mpPolicyManager) {
-        void(*destroyManager)(AudioPolicyInterface *) =
-                reinterpret_cast<void(*)(AudioPolicyInterface *)>(dlsym(mpPolicyManagerLibHandle, "destroyAudioPolicyManager"));
-
-        if (destroyManager == NULL ) {
-            LOGW("Could not get destroyAudioPolicyManager method");
-            return;
-        }
-        (*destroyManager)(mpPolicyManager);
+        delete mpPolicyManager;
     }
 }