Android框架与Android音频框架

来源:互联网 发布:java企业微信发送消息 编辑:程序博客网 时间:2024/06/05 13:33

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才是隔离板。

参考

  1. Android基本架构
  2. 从代码了解AOSP
  3. Android音频系统之音频框架
0 0