Configurer une bibliothèque partagée

Après avoir créé une configuration de stratégie audio, vous devez empaqueter l'implémentation HAL dans une bibliothèque partagée et la copier à l'emplacement approprié:

  1. Créez un répertoire device/<company>/<device>/audio pour contenir les fichiers sources de votre bibliothèque.
  2. Créez un fichier Android.mk pour compiler la bibliothèque partagée. Assurez-vous que le fichier Makefile contient la ligne suivante :
    LOCAL_MODULE := audio.primary.<device>
    

    Votre bibliothèque doit être nommée audio.primary.<device>.so pour qu'Android puisse la charger correctement. La partie primary de ce nom de fichier indique que cette bibliothèque partagée est destinée au matériel audio principal situé sur l'appareil. Les noms de module audio.a2dp.<device> et audio.usb.<device> sont également disponibles pour les interfaces audio Bluetooth et USB. Voici un exemple d'Android.mk du matériel audio du 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 votre produit est compatible avec l'audio à faible latence, comme spécifié par le CDD Android, copiez le fichier de fonctionnalités XML correspondant dans votre produit. Par exemple, dans le fichier Makefile device/<company>/<device>/device.mk de votre produit:
    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. Copiez le fichier de configuration des règles audio que vous avez créé précédemment dans le répertoire system/etc/ du fichier Makefile device/<company>/<device>/device.mk de votre produit. Exemple :
    PRODUCT_COPY_FILES += \
            device/samsung/tuna/audio/audio_policy.conf:system/etc/audio_policy.conf
    

  5. Déclarez les modules partagés de votre HAL audio requis par votre produit dans le fichier Makefile device/<company>/<device>/device.mk du produit. Par exemple, le Galaxy Nexus nécessite les modules HAL audio principaux et Bluetooth:
    PRODUCT_PACKAGES += \
            audio.primary.tuna \
            audio.a2dp.default