Cómo configurar una biblioteca compartida

Después de crear una configuración de política de audio, debes empaquetar la implementación de HAL en una biblioteca compartida y copiarla en la ubicación adecuada:

  1. Crea un directorio device/<company>/<device>/audio para que contenga los archivos de origen de tu biblioteca.
  2. Crea un archivo Android.mk para compilar la biblioteca compartida. Asegúrate de que el archivo Makefile contenga la siguiente línea:
    LOCAL_MODULE := audio.primary.<device>
    

    Tu biblioteca debe llamarse audio.primary.<device>.so para que Android pueda cargarla correctamente. La parte primary de este nombre de archivo indica que esta biblioteca compartida es para el hardware de audio principal ubicado en el dispositivo. Los nombres de los módulos audio.a2dp.<device> y audio.usb.<device> también están disponibles para las interfaces de audio Bluetooth y USB. Este es un ejemplo de un Android.mk del hardware de audio del Galaxy Nexus:

    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    LOCAL_MODULE := audio.primary.tuna
    LOCAL_MODULE_RELATIVE_PATH := hw
    LOCAL_SRC_FILES := audio_hw.c ril_interface.c
    LOCAL_C_INCLUDES += \
            external/tinyalsa/include \
            $(call include-path-for, audio-utils) \
            $(call include-path-for, audio-effects)
    LOCAL_SHARED_LIBRARIES := liblog libcutils libtinyalsa libaudioutils libdl
    LOCAL_MODULE_TAGS := optional
    
    include $(BUILD_SHARED_LIBRARY)
    

  3. Si tu producto admite audio de baja latencia, como lo especifica el CDD de Android, copia el archivo de funciones XML correspondiente en tu producto. Por ejemplo, en el archivo Makefile device/<company>/<device>/device.mk de tu producto:
    PRODUCT_COPY_FILES := ...
    
    PRODUCT_COPY_FILES += \
    frameworks/native/data/etc/android.hardware.audio.low_latency.xml:system/etc/permissions/android.hardware.audio.low_latency.xml \
    

  4. Copia el archivo de configuración de la política de audio que creaste antes al directorio system/etc/ en el archivo makefile device/<company>/<device>/device.mk de tu producto. Por ejemplo:
    PRODUCT_COPY_FILES += \
            device/samsung/tuna/audio/audio_policy.conf:system/etc/audio_policy.conf
    

  5. Declara los módulos compartidos de tu HAL de audio que requiere tu producto en el archivo makefile device/<company>/<device>/device.mk del producto. Por ejemplo, el Galaxy Nexus requiere los módulos HAL de audio principal y Bluetooth:
    PRODUCT_PACKAGES += \
            audio.primary.tuna \
            audio.a2dp.default