一、官网下载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调用的地方注释掉。

Android : alsa-lib 移植的更多相关文章

  1. android多lib库工程的自动批量构建--编写ant脚本

    基本配置--build.properties 首先编写基本配置build.properties ,主要配置如下: android sdk所在目录 编译项目所使用的项目版本 Jdk所在目录 以及签名时, ...

  2. ALSA lib编译

    http://blog.sina.com.cn/s/blog_7d7e9d0f0101lqlp.html alsa  lib: #!bin/sh rm -rf ./output/* mkdir -p ...

  3. ALSA lib基本概念

    1.channel 通道,即我们熟知的声道数.左/右声道,5.1channel等等 2.sample A sample is a single value that describes the amp ...

  4. android wifi驱动移植详细过程

    转自:http://bbs.imp3.net/thread-10558924-1-1.html 对于刚入手android没多久的人来说,android wifi 驱动的移植确实还是有难度的,不过参考了 ...

  5. android bluetooth蓝牙移植

    http://blog.csdn.net/zhengmeifu/article/details/7705172 前段时间移植神念系统需要使用到bluetooth功能,现将移植过程中碰到的问题简要列一下 ...

  6. FFmpeg在Android上的移植之第一步

    http://blog.sina.com.cn/s/blog_69a04cf40100x1fr.html 从事多媒体软件开发的人几乎没有不知道FFmpeg的,很多视频播放器都是基于FFmpeg开发的. ...

  7. FFmpeg在Android上的移植优化步骤

    http://blog.csdn.net/feixiang_john/article/details/7894188 从事多媒体软件开发的人几乎没有不知道FFmpeg的,很多视频播放器都是基于FFmp ...

  8. android版本vqmon移植IOS版

    IOS交叉编译 1.android版本 vqmon已经正常运行,现需要开放IOS版本,作移植工作. 2. 注意事项: 1)ROOT权限,IOS必须越狱.  2)依赖库:pcap, ffmpeg,lib ...

  9. Android系统如何移植wpa_supplicant及wifi驱动

    一.WPA_SUPPLICANT简介 1. 什么是wpa_supplicant wpa_supplicant is a WPA Supplicant for Linux, BSD, Mac OS X, ...

  10. Android so lib库远程http下载和动态注册

    一.背景 在开发Android应用程序的实现,有时候需要引入第三方so lib库,但第三方so库比较大,例如开源第三方播放组件ffmpeg库, 如果直接打包的apk包里面, 整个应用程序会大很多.经过 ...

随机推荐

  1. ubuntu下安装Firefox中国版解决Ubuntu与Windows下Firefox账号同步问题(已解决)

    1. 下载最新版本火狐Linux版 下载地址:http://firefox.com.cn/download/ 选择火狐Linux64-bit版,下载后文件为:Firefox-latest-x86_64 ...

  2. learn python the hard way习题31~40总结以及列表的扩展知识

    Python 中的列表: 形式:[ 表示打开一个列表,中间的项目用 , 隔开,然后列表以 ] 结束. for循环 两种形式: for i in ArrayName: for i in range(0, ...

  3. wpf 使用DocumentViewer打印

    https://blog.csdn.net/duanzi_peng/article/details/14118937?locationNum=15 https://www.cnblogs.com/zl ...

  4. 自己动手编写IPv4地址包含关系测试的小脚本

    工作中需要对地址包含关系进行测试,现有ipaddress标准库和IPy无法满足,于是自己动手编写小脚本,主要实现== , in, <等专用功能,其他功能可以后续用到再补充,例如迭代打印网段内所有 ...

  5. canvas学习之小球动画

    项目地址:http://pan.baidu.com/s/1skZGPgL 最近学习使用canvas做动画效果,主要原理就是创建一个小球对象,然后小球对象有一个moveball方法,每次让小球沿着随机路 ...

  6. [转载]mapreduce合并小文件成sequencefile

    mapreduce合并小文件成sequencefile http://blog.csdn.net/xiao_jun_0820/article/details/42747537

  7. PHP 练习项目------歆语微博项目

    一个简单微博项目,php+mysql+apache开发,个人购买资料的项目练习,适合新手练习. 测试账号:zhangqie  密码:123456 功能列表: 数据库增删改查, 图片上传 表情,@好友 ...

  8. react中创建组件

    第1种 - 创建组件的方式 > 使用构造函数来创建组件,如果要接收外界传递的数据,需要在 构造函数的参数列表中使用`props`来接收:> 必须要向外return一个合法的JSX创建的虚拟 ...

  9. tmp目录自动清除和tmpwatch命令

    习惯性的将一些临时文件放在tmp目录下,让其自然删除.同时,为了保证tmp目录不爆满,系统默认情况下每日会处理一次tmp目录文件,原理就是使用了tmpwatch.在系统最小安装情况下,这个功能是没有安 ...

  10. 如何在VMware系统中的ubuntu16.04中建立与win7系统的共享文件夹

    点击虚拟机设置一次得到如图所示 系统默认放在了 /mnt/hgfs文件夹 点击虚拟机安装vmware tools 解压vmware tools压缩包 运行sudo ./vmware-install.p ...