如何在android 中编译alsa-utils工具
1个回答
推荐于2016-01-27 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517184
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
首先我从ALSA 官方网上下载了alsa-utils-1.0.23版本的工具,因为我android 的alsa-lib
也是1.023版本的,防止版本不一样出现问题,我就选择了版本一样,我们的alsa-lib放的路径是在android_source/external/alsa-lib目录下面,我们下载的alsa-utils-1.023工具包也下载放在里面。
接下来我们需要蠢州完成以下几个动作:
1、在alsa-utils下面创建一个Android.mk写的内容是:
ifeq ($(strip $(BOARD_USES_ALSA_AUDIO)),true)
LOCAL_PATH:= $(call my-dir)
#
# Build aplay command
#
include $(CLEAR_VARS)
LOCAL_CFLAGS := \
-fPIC -D_POSIX_SOURCE \
-DALSA_CONFIG_DIR=\"/system/usr/share/alsa\" \
-DALSA_PLUGIN_DIR=\"/system/usr/lib/alsa-lib\" \
-DALSA_DEVICE_DIRECTORY=\"/dev/snd/\"蚂哗
LOCAL_C_INCLUDES:= \
$(LOCAL_PATH)/include \
$(LOCAL_PATH)/android \
external/alsa-lib/include
LOCAL_SRC_FILES := \
aplay/aplay.c
LOCAL_MODULE_TAGS := debug
LOCAL_MODULE := alsa_aplay
LOCAL_SHARED_LIBRARIES := \
libasound \
libc
include $(BUILD_EXECUTABLE)
上面我只写了个编译aplay工具的代码,别的工具也是一样的写法
2、接下来进入alsa-utils工具包里面进行创建sys目录和aconfig.h文件,在aconfig.h文件里面编写以下内容
#define DATADIR "/system/usr/share/alsa"
#define rindex strrchr
#define open64 open
#undef __swab16
#define __swab16(x) __arch__swab16((x))
#undef __swab32
#define __swab32(x) __arch__swab32((x))
3、进入第2步中创建的sys目录,在sys目录中创建signal.h头文件,在这个头文件中写如以下内容
[plain] view plaincopyprint?
01.#include <signal.h>
#include <signal.h>4、接下来你直接编译android 就可以了,在编译过程中可能出现以下 错误“
4.1:kernel/common/linux/un.h:18: error: expected specifier-qualifier-list
before 'sa_family_t
那是因为我们在alsa-utils/alsactl/init_parse.c里面在include un.h之前没有#include
<sys/socket.h>,你只要在这之前include这个头文件就解决了
4.2:还有可能遇到这个错误:在aplay.c里面会提示报错'S_IRGRP' undeclared (first use in this
function,你只要在在aplay.c里面添加一个头文件:#include <sys/stat.h>,这样就解决了
4.3:接下来可能语言到这样的错误:speaker-test.c里面报wav_file_dir没有定义,这个值是用来定义你的wav文件存放在pad中的位置的,你随便放在哪里,我定义的路径
就是在/sdcard目录下面
经过上面的种种修改,alsa-utils工具带物蔽终于编译成功了
转载
也是1.023版本的,防止版本不一样出现问题,我就选择了版本一样,我们的alsa-lib放的路径是在android_source/external/alsa-lib目录下面,我们下载的alsa-utils-1.023工具包也下载放在里面。
接下来我们需要蠢州完成以下几个动作:
1、在alsa-utils下面创建一个Android.mk写的内容是:
ifeq ($(strip $(BOARD_USES_ALSA_AUDIO)),true)
LOCAL_PATH:= $(call my-dir)
#
# Build aplay command
#
include $(CLEAR_VARS)
LOCAL_CFLAGS := \
-fPIC -D_POSIX_SOURCE \
-DALSA_CONFIG_DIR=\"/system/usr/share/alsa\" \
-DALSA_PLUGIN_DIR=\"/system/usr/lib/alsa-lib\" \
-DALSA_DEVICE_DIRECTORY=\"/dev/snd/\"蚂哗
LOCAL_C_INCLUDES:= \
$(LOCAL_PATH)/include \
$(LOCAL_PATH)/android \
external/alsa-lib/include
LOCAL_SRC_FILES := \
aplay/aplay.c
LOCAL_MODULE_TAGS := debug
LOCAL_MODULE := alsa_aplay
LOCAL_SHARED_LIBRARIES := \
libasound \
libc
include $(BUILD_EXECUTABLE)
上面我只写了个编译aplay工具的代码,别的工具也是一样的写法
2、接下来进入alsa-utils工具包里面进行创建sys目录和aconfig.h文件,在aconfig.h文件里面编写以下内容
#define DATADIR "/system/usr/share/alsa"
#define rindex strrchr
#define open64 open
#undef __swab16
#define __swab16(x) __arch__swab16((x))
#undef __swab32
#define __swab32(x) __arch__swab32((x))
3、进入第2步中创建的sys目录,在sys目录中创建signal.h头文件,在这个头文件中写如以下内容
[plain] view plaincopyprint?
01.#include <signal.h>
#include <signal.h>4、接下来你直接编译android 就可以了,在编译过程中可能出现以下 错误“
4.1:kernel/common/linux/un.h:18: error: expected specifier-qualifier-list
before 'sa_family_t
那是因为我们在alsa-utils/alsactl/init_parse.c里面在include un.h之前没有#include
<sys/socket.h>,你只要在这之前include这个头文件就解决了
4.2:还有可能遇到这个错误:在aplay.c里面会提示报错'S_IRGRP' undeclared (first use in this
function,你只要在在aplay.c里面添加一个头文件:#include <sys/stat.h>,这样就解决了
4.3:接下来可能语言到这样的错误:speaker-test.c里面报wav_file_dir没有定义,这个值是用来定义你的wav文件存放在pad中的位置的,你随便放在哪里,我定义的路径
就是在/sdcard目录下面
经过上面的种种修改,alsa-utils工具带物蔽终于编译成功了
转载
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询