配置共享库

创建音频政策配置后,您必须将 HAL 实现打包到共享库中,并将其复制到相应位置:

  1. 创建一个 device/<company>/<device>/audio 目录以包含您的库的源文件。
  2. 创建一个 Android.mk 文件来编译共享库。确保 Makefile 包含以下行:
    LOCAL_MODULE := audio.primary.<device>
    

    您的库必须命名为 audio.primary.<device>.so,以便 Android 可以正确加载库。此文件名的 primary 部分表示此共享库用于设备上的主要音频硬件。模块名称 audio.a2dp.<device>audio.usb.<device> 也可用于蓝牙和 USB 音频接口。以下是 Galaxy Nexus 音频硬件的 Android.mk 示例:

    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. 如果您的产品支持 Android CDD 指定的低延迟音频,请将相应的 XML 功能文件复制到您的产品中。例如,在您产品的 device/<company>/<device>/device.mk Makefile 中:
    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. 将您之前创建的音频政策配置文件复制到您产品的 device/<company>/<device>/device.mk Makefile 的 system/etc/ 目录下。例如:
    PRODUCT_COPY_FILES += \
            device/samsung/tuna/audio/audio_policy.conf:system/etc/audio_policy.conf
    

  5. 在您产品的 device/<company>/<device>/device.mk Makefile 中声明您的产品所需的音频 HAL 的共享模块。例如,Galaxy Nexus 需要主要音频 HAL 模块和蓝牙音频 HAL 模块:
    PRODUCT_PACKAGES += \
            audio.primary.tuna \
            audio.a2dp.default