공유 라이브러리 설정

오디오 정책 구성을 만든 후 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 모듈이 필요합니다.
    PRODUCT_PACKAGES += \
            audio.primary.tuna \
            audio.a2dp.default