Android : alsa-lib 移植


一、官網下載lib源碼

網址:http://www.alsa-project.org/main/index.php/Download#alsa-lib

左擊:Stable Release列表中的【1.1.3】(移植的此版)

修改后的源碼壓縮包下載鏈接:http://pan.baidu.com/s/1eSorykM 密碼:rpiy

二、安裝android平台交叉編譯工具鏈:

1.用apt直接裝:

 sudo apt install gcc-arm-linux-androideabi

 查看版本驗證是否裝成功:arm-linux-androideabi-gcc -v

2.如果apt裝的有問題就卸載:sudo apt remove --purge gcc-arm-linux-androideabi

 用以下提供的版本【arm-linux-androideabi-4.7.1】:鏈接:http://pan.baidu.com/s/1c16wgJe 密碼:rkcs

 解壓到任意目錄下,然后配置環境變量:sudo gedit ~/.bashrc

 在~/.bashrc末尾添加如下:
   export PATH=/home/sheldon/bin:/home/sheldon/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games #default
 export PATH=${PATH}:/home/sheldon/workspace/tool/arm-linux-androideabi-4.7.1/bin
   export PATH=${PATH}:/home/sheldon/workspace/tool/opt/FriendlyARM/toolschain/4.4.3/bin

 然后在終端執行生效指令:source ~/.bashrc

 查看是否配置成功:arm-linux-androideabi-gcc -v

 

三、修改&添加配置文件:

修改alsa-lib源碼 src/conf.c ,直接指定配置文件的位置(否則有open device fail的問題):

//#define ALSA_CONFIG_PATH_DEFAULT ALSA_CONFIG_DIR "/alsa.conf" #define ALSA_CONFIG_PATH_DEFAULT "/system/usr/share/alsa/alsa.conf" //set by myself

並將生成的 tmp/share/alsa/alsa.conf 文件 push 到機台的 /system/usr/share/alsa/alsa.conf

或者

嘗試僅設置一下環境變量: export ALSA_CONFIG_PATH="/system/usr/share/alsa/alsa.conf"

 

四、編譯&生成靜態庫:

1.配置編譯項,生成Makefile:

 CC=arm-linux-androideabi-gcc ./configure --host=arm-linux prefix=$PWD/tmp --enable-shared=no --enable-static=yes --with-softfloat=yes --with-versioned=no

2.編譯和生成靜態庫:

 make | make install

   沒問題的話靜態庫應該生成在配置指定的目錄 : tmp/lib/libasound.a

 

五、Android.mk中添加靜態庫使用:

include $(CLEAR_VARS)
LOCAL_MODULE := libasound
LOCAL_SRC_FILES := libasound.a
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_OWNER := xxxx
LOCAL_MODULE_SUFFIX := .a
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
LOCAL_MODULE_PATH := $(TARGET_OUT)/lib
include $(BUILD_PREBUILT)  

 

 

問題一:

pcm_ladspa.c:1119:82: error: 'struct lconv' has no member named 'decimal_point' Makefile:488: recipe for target 'pcm_ladspa.lo' failed

使用軟浮點:

--with-softfloat=yes

 

問題二:

parser.c:1427:54: error: 'versionsort' undeclared (first use in this function) parser.c:1427:54: note: each undeclared identifier is reported only once for each function it appears in

網上說法是uClib庫版本太低,先直接用alphasort這個函數:

更改位置:parser.c and conf.c

//#define SORTFUNC versionsort

//#else

#define SORTFUNC alphasort

 

問題三:

鏈接靜態庫時有snd_pcm_hwsync相關警告

直接把snd_pcm_hwsync調用的地方注釋掉。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM