配置共享庫

創建音頻策略配置後,必須將HAL實現打包到共享庫中,然後將其複製到適當的位置:

  1. 創建一個device/<company>/<device>/audio目錄以包含您庫的源文件。
  2. 創建一個Android.mk文件以構建共享庫。確保Makefile包含以下行:
    LOCAL_MODULE := audio.primary.<device>
    

    您的庫必須命名為audio.primary.<device>.so以便Android可以正確加載該庫。該文件名的primary部分錶示此共享庫用於設備上的主要音頻硬件。藍牙和USB音頻接口也可以使用模塊名稱audio.a2dp.<device>audio.usb.<device> 。這是來自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生成文件中:
    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模塊:
    PRODUCT_PACKAGES += \
            audio.primary.tuna \
            audio.a2dp.default