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包里面, 整个应用程序会大很多.经过 ...
随机推荐
- (转)C# Xml进行序列化与反序列化
---------------------------------------------------------------文章1---------------------------------- ...
- 如何有效地使用t-SNE | How to Use t-SNE Effectively
熟练使用PCA和tSNE,彻底理解底层的原理是非常有必要的. 参考:How to Use t-SNE Effectively Real-time tSNE Visualizations with Te ...
- 单细胞数据初步处理 | drop-seq | QC | 质控 | 正则化 normalization
比对 The raw Drop-seq data was processed with the standard pipeline (Drop-seq tools version 1.12 from ...
- luffy之多条件登录与极验滑动验证码
多条件登录 JWT扩展的登录视图,在收到用户名与密码时,也是调用Django的认证系统中提供的authenticate()来检查用户名与密码是否正确. 我们可以通过修改Django认证系统的认证后端( ...
- 『cs231n』通过代码理解gan网络&tensorflow共享变量机制_上
GAN网络架构分析 上图即为GAN的逻辑架构,其中的noise vector就是特征向量z,real images就是输入变量x,标签的标准比较简单(二分类么),real的就是tf.ones,fake ...
- stl中的for_each() 函数的注意事项
#include<iostream> using namespace std; #include"vector" #include"algorithm&quo ...
- 关于react16.4——上下文Context
首先我们来聊一聊(上下文)Context. 上下文(Context) 提供了一种通过组件树传递数据的方法,无需在每个级别手动传递 props 属性. 在典型的 React 应用程序中,数据通过 pro ...
- Centos7 JDK安装过程中 解决java -version 报错: bash: /home/jdk1.8.0_161/bin/java: Permission denied
1.执行Linux命令 -----vim /etc/profile 编辑profile 文件,在里面添加: #set java enviroment JAVA_HOME=/opt/JavaHome ...
- CRS添加、删除节点
一.如何删除一个节点: 1.1 在存活的节点上操作,使用dbca删除DB实例 1.2 清除ASM实例 在存活的节点上做如下操作 1.2.1 停止ASM实例 export ORACLE_HOM ...
- maven中 install的install:install的区别
如果一个项目,你想安装jar包到本地仓库,可能会报The packaging for this project did not assign a file to the build artifact ...