Android框架与Android音频框架
Posted wkw1125
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android框架与Android音频框架相关的知识,希望对你有一定的参考价值。
android框架
Android本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个Java的Application Framework,所有的应用程序app都是基于该Framework之上。
Android在框架上分为Application应用层、Application Framework应用框架层、libraries类库、Linux kernel内核。在应用框架层以及之上,使用Java语言进行开发;在此之下,Android包含一些C/C++库,如硬件驱动,这些库通过JNI提供接口给Android系统中不同的组件(上层Java)使用。
AOSP
Android是开源项目(AOSP,Android Open-Source Project),这个“开源”包括Application Framework以及之上的Java代码的完全开放,还包括之下的C/C++源码。手机中运行的Android系统只是AOSP编译出的Java的.class与C/C++的.so库组成的运行环境,想要查看、修改底层类库的实现,需要下载AOSP源码(而不只是Android SDK源码)。
Android主要应用于ARM平台,但通过编译控制,在X86、MAC等体系结构的机器上同样可以运行。
AOSP下载
AOSP源码可以从Android官网下载,下载过程(git)可以参考从代码了解AOSP。
一个AOSP源码在线浏览网站:
http://androidxref.com
NDK
可想而知,AOSP是个巨大的项目(Android5.1的源码约60G,编译出的类库约67G)。Android NDK(Android Native Development Kit),是Google推出的帮助开发者通过C/C++编写应用的开发包,包含部分AOSP中常用的C/C++的头文件、库文件、说明文档和示例代码(ndk-r13b约650M)。
Android音频框架
发展:
- OSS (Open Sound System):早期Linux内核采用的音频框架,因知识产权的问题被Linux kernel废弃
- ALSA(Advanced Linux Sound Architecture):Linux社区提出的开源框架,相对于OSS提供了更多,更复杂的API接口,因而开发难度相对加大。Android早期采用ALSA作为音频框架。
- TinyAlsa:ALSA的缩减版本,目前Android采用的框架。
Android音频框架图:
- APP:应用实现,如某个播放器
- Framework:Java类(“中介”而已),如MediaPlayer/MediaRecorder、AudioTrack/AudioRecorder、AudioManager、Audioservice、AudioSystem,音频中控AudioFlinger和AudioPolicyService。
- Libraries:Framework中介类的底层实现,多数是C++语言编写的库,源代码在AOSP的frameworks/av/media/libmedia。
HAL:硬件抽象层,是音频中控AudioFlinger直接访问的对象。HAL将AudioFlinger/AudioPolicyService真正地与硬件设备关联起来,但又灵活应对硬件变化(如Android音频系统从ALSA-lib变为tinyalsa)。当AudioFlinger/AudioPolicyService初始化时,它们会通过HAL去寻找系统中最匹配的硬件实现。可以认为HAL是Android音频系统中的“隔离板”,无论下面如何变化,上层的实现都可以保持兼容。
[参考3]原文中:“可以认为AudioFlinger是Android音频系统中真正的“隔离板””,而按我理解,HAL才是隔离板。
参考
以上是关于Android框架与Android音频框架的主要内容,如果未能解决你的问题,请参考以下文章
Android 音频系统:从 AudioTrack 到 AudioFlinger
Android 音频系统:从 AudioTrack 到 AudioFlinger