Android 操作系统平台
2008-11-(OS小组评估)
近期,我们OS小组一直在关注整个Android操作系统的平台,目前整体上对他有个比较清楚的认识。我们公司也买了几台G1手机作为样机,大家也都把玩了一下。目前Android系统平台的第三方软件较为稀缺,限制了Google手机的可玩性。但作为一个完全开源的系统平台,第三方软件的出现仅仅只是时间问题。
Android作为一个移动设备的平台,其软件层次结构包括了一个操作系统(OS),中间件(MiddleWare)和应用程序(Application)。根据Android的软件框图,其软件层次结构自下而上分为以下几个层次:
第一、操作系统层(OS)
第二、各种库(Libraries)和Android 运行环境(RunTime)
第三、应用程序框架(Application Framewo)
第四、应用程序(Application)
以下分别介绍Andoid各个层次的软件的重点及其相关技术:
● 操作系统层(OS)
Android使用Linux2.6作为操作系统,Linux2.6是一种标准的技术,Linux也是一个开放的操作系统。Android对操作系统的使用包括核心和驱动程序两部分,Android的Linux核心为标准的Linux2.6内核,Android更多的是需要一些与移动设备相关的驱动程序。主要的驱动如下所示:
显示驱动(Display Driver):常用基于Linux的帧缓冲(Frame Buffer)驱动。
Flash内存驱动(Flash Memory Driver)
照相机驱动(Camera Driver):常用基于Linux的v4l(Video for )驱动。
音频驱动(Audio Driver):常用基于ALSA(Advanced Linux Sound Architecture,高级Linux声音体系)驱动。
WiFi驱动(Camera Driver):基于IEEE 802.11标准的驱动程序
键盘驱动(KeyBoard Driver)
蓝牙驱动(Bluetooth Driver)
Binder IPC驱动: Android一个特殊的驱动程序,具有单独的设备节点,提供进程间通讯的功能。
Power Management(能源管理)
● 各种库(Libraries)和Android 运行环境(RunTime)
本层次对应一般嵌入式系统,相当于中间件层次。Android的本层次分成两个部分一个是各种库,另一个是Android 运行环境。本层的内容大多是使用C++实现的。 在其中,各种库包括:
1) C库 :C语言的标准库,这也是系统中一个最为底层的库,C库是通过Linux的系统调用来实现。
2)多媒体框架(MediaFrameword):这部分内容是Android多媒体的核心部分,基于PacketVideo(即PV)的OpenCORE,从功能上本库一共分为两大部分,一个部分是音频、视频的回放(PlayBack),另一部分是则是音视频的纪录(Recorder)。
3) SGL:2D图像引擎。
4) SSL:即Secure Socket Layer位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。
5) OpenGL ES 1.0 :本部分提供了对3D的支持。
6) 界面管理工具(Surface Management):本部分提供了对管理显示子系统等功能。
7) SQLite:一个通用的嵌入式数据库
8) WebKit:网络浏览器的核心
9) FreeType:位图和矢量字体的功能。
Android 的各种库一般是以系统中间件的形式提供的,它们均有的一个显著特点就是与移动设备的平台的应用密切相关。
Android 运行环境主要指的虚拟机技术——Dalvik。Dalvik虚拟机和一般JAVA虚拟机(Java VM)不同,它执行的不是JAVA标准的字节码(bytecode )而是Dalvik可执行格式(.dex)中执行文件。在执行的过程中,每一个应用程序即一个进程(Linux的一个Process)。二者最大的区别在于Java VM是以基于栈的虚拟机(Stack-based),而Dalvik是基于寄存器的虚拟机(Register-based)。显然,后者最大的好处在于可以根据硬件实现更大的优化,这更适合移动设备的特点。
● 应用程序框架(Application Framewo)
Android的应用程序框架为应用程序层的开发者提供APIs,它实际上是一个应用程序的框架。由于上层的应用程序是以JAVA构建的,因此本层次提供的首先包含了UI程序中所需要的各种控件:
例如: Views (视图组件)包括 lists(列表), grids(栅格), text boxes(文本框), buttons(按钮)等。甚至一个嵌入式的Web浏览器。
一个Andoid的应用程序可以利用应用程序框架中的以下几个部分:
Activity (活动)
Broadcast Intent Receiver (广播意图接收者)
Service (服务)
Content Provider (内容提供者)
● 应用程序(Application)
Android的应用程序主要是用户界面(User Interface)方面的,通常以JAVA程序编写,其中还可以包含各种资源文件(放置在res目录中)JAVA程序及相关资源经过编译后,将生成一个APK包。Android本身提供了主屏幕(Home),联系人(Contact),电话(Phone),浏览器(Browers)等众多的核心应用。同时应用程序的开发者还可以使用应用程序框架层的API实现自己的程序。这也是Android开源的巨大潜力的体现。
附加:google提供的Andoid体系结构图。
接下来就是我们要怎样利用我们现在有的资源去完成一个合适我们系统的平台。我们需要做些什么?达到什么目的?工作任务怎么划分?
根据最近对Android系统结构和代码分析,OS平台小组的目标就是在最短的时间能完成整个Android的软件在我们上的运行,且能够实现一些简单应用程序。通过对上的运行表现和测试,进一步评估Android中各个模块上运行的资源情况。实现该Android的运行需要以下资源同步配合:
1)
YMC:
Android是建立在Linux操作系统之上的一种应用框架。我们可以将工作分为Linux OS的开发及Android应用框架的开发:
Linux OS的开发应该做的事情,从下往上看,分别是:
1、BootLoader的实现
2、驱动程序编写(需熟悉Linux驱动架构) 重点。包括驱动的模块单独调试(驱动组)和在Linux上整合两部分
3、Linux内核的移植(需要知道的知识:常用命令、Makefile语法、Linux内核的配置、编译出错的处理等)重点。
我补充这几点:
4、Linux内核源代码的掌握,OS组应基本掌握linux内核主要源码,为将来的应用开发提供支持
5、Linux各种工具包括调试工具,平台性工具的掌握,为后续开发提供支持。
6、Linux各种功能,协议的裁减和移植(linux支持很多功能和协议,要掌握如何进行添加,裁减模块,如蓝牙,WIFI等)
7、在芯片Linux系统上运行一些中间件和库的性能情况简单测试,为后续功能的可行性评估提供参考,如是否能跑3D引擎能跑到多大屏等。
8、将Android系统原封不动地移植到Linux平台上运行
9、进行JAVA虚拟机应用程序对Linux系统底层C语言实现的功能的调用分析测试。
Android应用框架的开发应该做的事情,从上往下看:
1、 面向用户的应用程序开发。该层主要的工作是实现用户界面及事件处理流程等,不涉及具体的实现。使用JAVA语言开发。需要熟悉Java及XML的开发人员。
2、 应用程序框架。对上层的应用程序,它提供了接口供上层程序调用,用Java实现,这一层尽量不改变(或者只加不减),则基于该框架开发的程序都可直接拿来用,这一层可由上层人员来实现;对下层的组件,它提出了要求下层组件实现的接口,用C/C++实现;Java代码通过JNI/AIDL来调用C/C++代码,这一层可由下层组件开发人员来实现。
3、 组件开发和替换。组件做具体的实现并向上层的应用程序框架提供接口。使用C/C++语言进行开发。需要熟悉C++的开发人员。重点。
4、 Android上作为demo开发出一套自己设计的UI界面。
5、 Android上嵌入芯片的视音频解码器,增强Android的多媒体功能。
6、
YMC:
传统的嵌入式思想把系统分为三层:应用程序、OS、硬件。但在Android中,应该要有新的思维,把嵌入式系统分为五层:应用程序、应用程序框架、C/C++组件、OS、硬件。只要我们不改变应用程序框架,则其上的应用程序可拿来即用,而C/C++组件是可更换的,我们可将Android里面的组件替换成我们需要的、适合我们的,也可以添加新的组件(这可能就要给应用程序框架添加新接口)。Android的应用程序开发可以不用担心,一方面是障碍较少;另一方面是网上会有越来越多的应用程序,而只要我们不改应用程序框架,就可直接拿来使用。Android上大部分工作应该是花在组件的替换、以及实现新组件,那么有哪些组件是需要替换的?还需要实现哪些新组件?如何实现新组件及如何替换旧组件?
HSF:
1) 各种库的增加与移植修改。
在多媒体方面,文件格式的处理和编解码(Codec)是很基础的两个方面的内容。多媒体应用的两个方面是媒体的播放(PlayBack)和媒体的记录(Recording)。
在媒体的播放过程中,通常情况是从对媒体文件的播放,必要的两个步骤为文件的解析和媒体流的解码。例如对于一个mp4的文件,其中可能包括AMR和AAC的音频流,H263、MPEG4以及AVC(H264)的视频流,这些流被封装在3GP的包当中,媒体播放器要做的就是从文件中将这些流解析出来,然后对媒体流进行解码,解码后的数据才可以播放。
在媒体的记录过程中,通过涉及到视频、音频、图像的捕获功能。对于将视频加音频录制成文件功能,其过程与播放刚好相反,首先从硬件设备得到视频和音频的媒体流,然后对其进行编码,编码号的流还需要被分层次写入到文件之中,最终得到组成好的文件。
OpenCore有关文件格式处理和编解码部分两部分的内容,分别在目录fileformats和codecs_v2当中。这两部分都属于基础性的功能,不涉及具体的逻辑,因此它们被别的模块调用来使用,例如:构建各种Node。
目前Android 上提供的多媒体的库比较少,且效率不高。我们需要专门需要去按照目前OPENMAX的接口去增加和修改。如果要做好多媒体这一块,算法处理只是其中一个很小很单一的工作,而最大的工作量在于怎么样去适应整个Android系统。怎样增加模块,调用下层接口,编写MAKEFILE等。 事实上,OpenCore中包含的内容非常多:从播放的角度,PVPlayer的输入的(Source)是文件或者网络媒体流,输出(Sink)是音频视频的输出设备,其基本功能包含了媒体流控制、文件解析、音频视频流的解码(Decode)等方面的内容。除了从文件中播放媒体文件之外,还包含了与网络相关的RTSP流(Real Time Stream Protocol,实时流协议)。在媒体流记录的方面,PVAuthor的输入的(Source)是照相机、麦克风等设备,输出(Sink)是各种文件,包含了流的同步、音频视频流的编码(Encode)以及文件的写入等功能。 在使用OpenCore的SDK的时候,有可能需要在应用程序层实现一个适配器(Adaptor),然后在适配器之上实现具体的功能,对于PVMF的NODE也可以基于通用的接口,在上层实现,以插件的形式使用。
分为几个阶段:
1、必须从整体上熟悉并了解整个Android的多媒体框架OpenCore。
2、熟悉Player和Author的功能。
3、OpenCore和Android其他部分的集成关系。
4、哪写模块需要移植使用CEVA进行处理。
5、如何增加算法功能模块,并调试编译。
===========================
YMC:
对于Java应用程序开发人员,需要掌握如下的知识:
1、 Java语言
2、 XML语言
3、 利用Eclipse工具开发可在Android上运行的Java程序
4、 要了解Android应用程序框架层提供了哪些调用接口
5、 了解JNI如何实现,才能提出新的接口需求
对于C/C++组件开发人员,需要掌握如下的知识:
1、 C++语言,要明白继承、多态、模板,私有、公有、虚拟、纯虚、重载等面向对象的概念,否则很难阅读Android中提供的组件(Libraries)。
2、 要理解Android的应用框架,知道如何提供接口、编译程序是如何运作。
3、 要了解组件如何实现。只能通过阅读代码来了解组件。
有了上面这些基础,你才能写新组件,或对组件进行修改、或替换已有的组件。
OS小组的工作:
1、先实现Bootloader,才能加载Linux。
2、实现启动Linux所需的基本驱动(如RTC、串口等),才可运行Linux。
3、实现最小Linux的移植(只包含基本驱动)
在实现上述步骤的同时,可进行驱动程序的开发,但还无法测试驱动程序。
4、将写好的驱动以模块形式在Linux中进行测试
在Linux2.6版本中,驱动可以模块的形式存在,在系统跑起来后,通过insmod命令加载指定的驱动模块。
5、将测试OK的驱动添加到内核中。
驱动程序的开发与Linux的移植是可以并行的,当Linux移植成功后,就可以对驱动程序进行测试,测试通过的驱动就可以集成到Linux内核中。所以在一定的程序上,OS小组与驱动小组的工作是可以并行的。
应用程序小组的工作:
1、先了解要开发的应用程序,要先了解网络上已有的应用程序。
2、学习Android上应用程序开发所需具备的知识。
3、在Android提供的应用程序框架上,进行新的应用程序的开发。
组件小组的工作:
1、 学习Android上组件开发所需具备的知识。
2、 分析哪些组件应保留、替换、修改、添加。
3、 在Android限定的应用程序框架下,进行组件的替换、修改、添加。
只要我们遵循应用程序框架,则应用程序小组与组件小组的工作是可以并行的。
分享到:
相关推荐
Android操作系统是Google公司开发的一款基于Linux内核的开源移动操作系统,自2007年发布以来,已经成为全球最受欢迎的智能手机和平板电脑操作系统之一。Android以其开放源代码特性,吸引了众多开发者和制造商,形成...
在Android系统中,多任务键(通常位于设备屏幕下方的硬件按钮或屏幕内的虚拟按键区域)用于开启任务切换器,让用户能够快速在已打开的应用之间切换或者关闭应用。然而,有时候开发者可能希望自定义这个键的功能,...
在Android开发中,高效地管理线程和任务执行是至关重要的,这关乎到应用的性能、响应速度以及用户体验。线程池和任务队列是实现这一目标的关键工具。本文将深入探讨Android中线程池与任务队列的概念、工作原理以及...
在Android操作系统中,任务管理器是一个至关重要的组件,它负责监控和管理系统的应用程序及进程,确保设备高效、稳定地运行。下面将详细讲解Android任务管理器的工作原理、功能以及如何查看和管理正在运行的任务和...
任务管理器是智能手机操作系统中的一种应用程序,负责管理和调度智能手机上的应用程序和进程。任务管理器可以根据不同的分类方法进行分类,例如根据功能可以分类为基本任务管理器和高级任务管理器,根据平台可以分类...
Android操作系统的核心是基于Linux内核的,这为其提供了强大的多任务处理能力。在多任务环境中,系统的稳定性主要受到以下因素的影响: 1. **内存管理**:Android系统采用了一种称为“最小RAM预留”(Minimum RAM ...
Android操作系统是全球最广泛使用的移动操作系统之一,由Google公司领导的开放手机联盟开发并维护。这个"Android操作系统开发培训课件"旨在为开发者提供深入理解Android系统架构、应用程序开发以及相关工具使用的...
`AlarmManager`是Android系统级别的服务,它可以安排应用程序在未来的某个时间点接收意图(Intent)。相比于前面的方法,`AlarmManager`更适合于需要在设备休眠状态下仍然执行的任务,如闹钟、定时提醒等。它支持...
在Android开发中,多线程和多任务处理是提高应用程序性能和用户体验的关键技术。断点续传功能则常用于大文件下载,它允许用户在任意时间点暂停下载,然后在之后重新启动时从上次停止的地方继续,极大地提升了用户...
`AlarmManager`是Android系统提供的一个强大的工具,它可以按照设定的时间间隔或特定时间点执行操作,例如启动服务、发送广播等。`TimeTask`框架巧妙地将`AlarmManager`与任务队列相结合,为开发者提供了一种易于...
### 基于 ARM2440平台的 Android操作系统的移植 #### 一、引言 随着移动互联网技术的快速发展,智能手机操作系统的需求日益增长。**Android操作系统**自2007年底发布以来,因其开放源代码特性以及强大的应用层API...
《Android操作系统移植及关键技术研究》一文聚焦于探讨Android操作系统的移植过程与核心关键技术,为从事移动设备开发、系统优化及跨平台应用的工程师提供了一份详尽的技术指南。以下是对该主题的深入解析: ### ...
在本文中,我们将深入探讨这一技术,并围绕"Android操作录制、操作回放"这一主题展开讨论。 首先,我们需要了解操作录制的基本原理。Android系统通过跟踪触摸事件、键盘输入和其他用户交互来实现操作录制。这通常...
2011 年初数据显示,仅正式上市两年的操作系统 Android 已经超越称霸十年的塞班系统,使之跃居全球最受欢迎的智能手机平台。 Android 的主要竞争对手是苹果公司的 iOS 以及 RIM 的 Blackberry OS。 基于 Android ...
android中定时有很多种是实现,常见的Handler 与Thread的结合,handler.postDelayed ,以及要使用的AlarmManger 等都可以实现定时任务的执行,但是使用场景却大不相同,这里主要是怎么用AlarmManager实现定时任务。...
Android 操作系统广泛应用于智能手机、平板电脑、电视盒子等各类智能设备。其主要优点包括: 1. 开源:允许开发者自由定制和修改,有利于应用程序的开发与普及。 2. 易用性:拥有丰富的用户界面和 API,使用户...
作为一款Android应用,OpenTasks充分考虑了Android平台的特性,与系统深度集成,提供原生的用户体验。开发者在设计时遵循了Android的设计原则,使得用户能够快速上手,同时也考虑到了与其他Android应用的兼容性和互...
在Android系统中,任务管理器(Task Manager)扮演着至关重要的角色,它负责监控和管理运行中的应用程序,优化系统资源的分配,以及协助用户管理和控制设备的性能。Android任务管理器的工作原理、功能以及如何使用是...
在Android平台上,多任务断点下载是一项常见的功能,尤其对于大型应用或文件的下载场景尤为重要。这个DEMO展示了如何在Android应用中实现这样的功能。在本文中,我们将深入探讨这个DEMO涉及的关键技术和知识点。 ...
在Android平台上,我们可以利用其强大的开发能力构建一款智能家居管理系统,实现设备的远程控制、状态监测等功能。本文将深入探讨如何在Android环境中,通过源码实现智能家居的应用。 一、智能家居系统基础 智能...