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调用的地方注释掉。
Android : alsa-lib 移植的更多相关文章
- android多lib库工程的自动批量构建--编写ant脚本
		
基本配置--build.properties 首先编写基本配置build.properties ,主要配置如下: android sdk所在目录 编译项目所使用的项目版本 Jdk所在目录 以及签名时, ...
 - ALSA lib编译
		
http://blog.sina.com.cn/s/blog_7d7e9d0f0101lqlp.html alsa lib: #!bin/sh rm -rf ./output/* mkdir -p ...
 - ALSA lib基本概念
		
1.channel 通道,即我们熟知的声道数.左/右声道,5.1channel等等 2.sample A sample is a single value that describes the amp ...
 - android wifi驱动移植详细过程
		
转自:http://bbs.imp3.net/thread-10558924-1-1.html 对于刚入手android没多久的人来说,android wifi 驱动的移植确实还是有难度的,不过参考了 ...
 - android bluetooth蓝牙移植
		
http://blog.csdn.net/zhengmeifu/article/details/7705172 前段时间移植神念系统需要使用到bluetooth功能,现将移植过程中碰到的问题简要列一下 ...
 - FFmpeg在Android上的移植之第一步
		
http://blog.sina.com.cn/s/blog_69a04cf40100x1fr.html 从事多媒体软件开发的人几乎没有不知道FFmpeg的,很多视频播放器都是基于FFmpeg开发的. ...
 - FFmpeg在Android上的移植优化步骤
		
http://blog.csdn.net/feixiang_john/article/details/7894188 从事多媒体软件开发的人几乎没有不知道FFmpeg的,很多视频播放器都是基于FFmp ...
 - android版本vqmon移植IOS版
		
IOS交叉编译 1.android版本 vqmon已经正常运行,现需要开放IOS版本,作移植工作. 2. 注意事项: 1)ROOT权限,IOS必须越狱. 2)依赖库:pcap, ffmpeg,lib ...
 - Android系统如何移植wpa_supplicant及wifi驱动
		
一.WPA_SUPPLICANT简介 1. 什么是wpa_supplicant wpa_supplicant is a WPA Supplicant for Linux, BSD, Mac OS X, ...
 - Android so lib库远程http下载和动态注册
		
一.背景 在开发Android应用程序的实现,有时候需要引入第三方so lib库,但第三方so库比较大,例如开源第三方播放组件ffmpeg库, 如果直接打包的apk包里面, 整个应用程序会大很多.经过 ...
 
随机推荐
- 昂达 v891 连接上adb 调试
			
这篇文章可以删除了. 可以看看有关v891root和分区的文章,里面介绍了驱动程序的工具了. USB线连上之后,可以直接访问文件,所以连接本身肯定没有问题的. 可是,总是Windows 那边MTP驱 ...
 - makefile 里的 := , = , +=
			
:= 是在这行代码的时候,直接展开右边的变量. = 是在最终左边变量被使用的时候,才把右边的变量展开. https://stackoverflow.com/questions/10227598/wha ...
 - LeetCode--367--有效的完全平方数
			
问题描述: 给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False. 说明:不要使用任何内置的库函数,如 sqrt. 示例 1: 输入:16 输 ...
 - Vue.js表单校验;动画指令;避免内存泄露。
			
Vue.js表单校验: 动画指令:创建自定义的滚动指令. 避免内存泄露. 避免内存泄露 在单页面应用开发时SPA,用户无需刷新浏览器.所以javascript应用需要自行清理组件来防止内存占用不断增长 ...
 - codeforces587a//Duff and Weight Lifting//  Codeforces Round #326 (Div. 1)
			
题意:一数列an,如果存在一个k,有2^(ai)+2^(aj)+......=2^k成立,那么一次能拿走ai,aj这些全部.问最少拿的次数. 太简单. 乱码 //#pragma comment(lin ...
 - python:字典嵌套列表
			
Python的字典{ }以键值对的形式保存数据,可以以键来访问字典中保存的值而不能用下标访问.字典中几乎可以包含任意的变量,字典,数列,元组.数列也一样. python的列表[ ]与字典不同,列表通过 ...
 - python-MongoDB 非关系型数据库
			
一 简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库1.易用性 MongoDB是一个面向文档(document-oriented)的数据库,而不是关系型数据库.不采用关系型主要是为了获得 ...
 - MySQL主从同步最佳实践
			
#!/bin/bash export master_ip=192.168.7.206 export slave_ip=192.168.7.207 export root_passwd=123456 ...
 - Hadoop介绍-3.HDFS介绍和YARN原理介绍
			
一. HDFS介绍: Hadoop2介绍 HDFS概述 HDFS读写流程 1. Hadoop2介绍 Hadoop是Apache软件基金会旗下的一个分布式系统基础架构.Hadoop2的框架最核心的 ...
 - 用javascript切换bootstrap的tab
			
html: <button class="tabContainer" data-toggle="tab" href="#note" i ...