`
hzbook
  • 浏览: 259130 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android系统架构概况

 
阅读更多

Android的架构图如下,图中按照功能结构及面向人群进行划分,可以看出Android分成三个部分:

  • 应用部分:包含在Android设备上运行的所有应用,它们是Android系统中直接面向用户的部分。
  • 核心部分: Android系统中核心的功能实现,包括应用框架、核心类库等,每个Android应用的开发者,都是在此基础上进行应用开发的。
  • 底层部分:主要指Android寄宿的Linux操作系统及相关驱动。通常来说,只有硬件厂商和从事Android移植的开发者,才会基于此来进行开发。

除了上述划分方式以外,从系统实际的架构模型来看,Android则可以分成以下几个层次:

  • 应用层
  • 框架层
  • 运行时
  • 核心类库
  • 硬件抽象层
  • Linux内核

本文的后续内容将针对以上各层逐一进行分析。

1.1.1 应用层

对于普通的用户而言,只能通过具体的应用来判断移动平台的优劣。即便一个移动平台具有最华丽的技术,但是如果不能给用户提供最得心应手的应用,顶多也只能赢得无冕之王的名头,而无法抓住用户的心,赢得市场的认可。

Android应用层由运行在Android设备上的所有应用共同构成,它不仅包括通话、短信、联系人等系统应用(随Android系统一起预装在移动设备上),还包括其他后续安装到设备中的第三方应用。

第三方应用都是基于Android提供的SDK(Software Development Kit)进行开发的,并受到SDK接口的约束。而预装在设备中的系统应用,则可以调用整个框架层的接口和模块,其中的很多接口在SDK中是隐藏的,因此,系统应用具有比第三方应用更多的权利。

Android的应用都是基于Java语言来开发的,但在很多应用(尤其是游戏)中,需要进行大规模的运算和图形处理,以及使用开源C/C++类库。通过Java来实现,可能会有执行效率过低和移植成本过高等问题。因此在Android开发中,开发者可以使用C/C++来实现底层模块,并添加JNI(Java Native Interface)接口与上层Java实现进行交互,然后利用Android提供的交叉编译工具生成类库并添加到应用中。

为了让应用开发者能够绕过框架层,直接使用Android系统的特定类库,Android还提供了NDK(Native Development Kit),它由C/C++的一些接口构成,开发者可以通过它更高效地调用特定的系统功能。

但在Android上,开发者通常只能使用C/C++编写功能类库,而不是整个应用。这是因为,诸如界面绘制、进程调度等核心机制是部署在框架层并通过Java来实现的,应用只有按照它们规定的模式去编写特定的Java模块和配置信息,才能够被识别、加载和执行。

小贴士 从Android 2.3(API 9)开始,新增了android.app.NativeActivity类,它是通过调用预定义的JNI接口来实现的。开发者可以基于NDK,通过C/C++语言来实现具体功能。这就意味着,开发者仅通过C/C++语言就能实现整个应用。这对于游戏开发者而言是一大喜讯,但由于控件在Android中并没有Native的实现,普通的应用开发者通常还是需要通过Java来实现上层界面。

1.1.2 框架层

框架层是Android系统中最核心的部分,它集中体现了Android系统的设计思想。在Android之前,有很多基于Linux内核打造的移动平台。作为超越前辈的成功范例,框架层的设计正是Android脱颖而出的关键所在。

框架层由多个系统服务(System Service)共同组成,包括组件管理服务、窗口管理服务、地理信息服务、电源管理服务、通话管理服务,等等。所有服务都寄宿在系统核心进程(System Core Process)中,在运行时,每个服务都占据一个独立的线程,彼此通过进程间的通信机制(Inter-Process Communication,IPC)发送消息和传输数据。

应用层中的应用,时刻都在与这些系统服务打交道。每一次构造窗口、处理用户交互事件、绘制界面、获得当前地理信息、了解设备信息等操作,都是在各个系统服务的支持下实现的。

而对于开发者而言,框架层最直观的体现就是SDK,它通过一系列的Java功能模块,来实现应用所需的功能。SDK的设计决定了上层应用的开发模式、开发效率及能够实现的功能范畴。因此,对于开发者而言,关注SDK的变迁是一件很有必要的事情,SDK每个新版本的诞生,都意味着一些老的接口会被调整或抛弃,另一些新的接口和功能火热出炉。开发者不但要查看和关注那些被修改的接口,来检查应用的兼容性,并采取相应的策略去适应这些变化,更重要的是,开发者还要追踪新提供的接口,寻找改进应用的机会,甚至是寻求开发新应用的可能。

从系统设计的角度来看,Android期望框架层是所有应用运行的核心,参与到应用层的每一次操作中,并进行全局统筹。Android应用的最大特征是基于组件的设计方式。每个应用都由若干个组件构成,组件和组件之间并不会建立通信信道,而是通过框架层的系统服务,集中地调度和传递消息。这样的设计方式相当于增加了一个中间层,该层了解所有组件的状况,可以更智能地进行协调,从而提升了整个系统的灵活性。

1.1.3 运行时

和所有的Java程序运行平台一样,为了实现Java程序在运行阶段的二次编译, Android为它们提供了运行时(Runtime)的支撑。

Android的运行时由Java核心类库和Java虚拟机Dalvik共同构成。Java核心类库涵盖了Android框架层和应用层所要用到的基础Java库,包括Java对象库、文件管理库、网络通信库,等等。

Dalvik是为Android量身打造的Java虚拟机,负责动态解析执行应用、分配空间、管理对象生命周期等工作。如果说框架层是整个Android的大脑,决定了Android应用的设计特征,那么,Dalvik就是Android的心脏,为Android的应用提供动力,决定它们的执行效率。

与为低端移动设备而设计的J2ME虚拟机不同,Dalvik是专门为高端设备而优化设计的。它没有采用基于栈的虚拟机架构,而是采取了基于寄存器的虚拟机架构设计。通常来说,基于栈的虚拟机对硬件的依赖程度小、生成的应用更节约空间,可以适配更多的低端设备;而基于寄存器的虚拟机,对硬件的门槛会更高一些,编译出的应用可能会耗费稍多的存储空间,但它的执行效率更高,更能够发挥高端硬件(主要指处理器)的能力。

Dalvik没有沿用传统的Java二进制码(JavaBytecode)作为其一次编译的中间文件,而是应用了新的二进制码格式文件.dex。在Android应用的编译过程中,它会先生成若干个.class文件,然后统一转换成一个.dex文件。在转换过程中,Android会对部分.class文件中的指令做转义,使用Dalvik特有的指令集OpCodes来替换,以提高执行效率。同时,.dex会整合多个.class文件中的重复信息,并对冗余部分做全局的优化和调整,合并重复的常量定义,以节约常量池耗费的空间。这使得最终得到的.dex文件通常会比将.class文件压缩打包得出的.jar文件更精简。

为了提升Android应用的执行效率,从垃圾回收器(Garbage Collection,GC)到编译器,Dalvik一直在各个方面进行优化。经常可以听到这样的消息:“新版本的Android系统,比上一个版本的效率高了x倍。”这大都是改善Dalvik的效果。在Android 2.2中,Dalvik引入了对JIT(Just-in-time)编译的支持,将上层应用的执行效率提升了2~4倍,开启了Android发展的新篇章。

由于对于大部分应用开发者而言,无须了解Android运行时的具体细节,因此,本书后续将不会详细介绍Android运行时的相关内容,有兴趣的读者,可以另行查阅相关资料和源代码。

1.1.4 核心类库

对于框架层而言,核心类库就是它的“贤内助”。每一次Android系统升级,能看到的都是框架层SDK的变迁,增加了新的功能,提供了新的接口。而在这些新功能的背后,核心类库都是居功至伟。

核心类库由一系列的二进制动态库共同构成,通常使用C/C++进行开发。与框架层的系统服务相比,核心类库不能够独立运行于线程中,而需要被系统服务加载到其进程空间里,通过类库提供的JNI接口进行调用。

核心类库的来源主要有两种,一种是系统原生类库,Android为了提高框架层的执行效率,使用C/C++来实现它的一些性能关键模块,如:资源文件管理模块、基础算法库,等等。而另一种则是第三方类库,大部分都是对优秀开源项目的移植,它们是Android能够提供丰富功能的重要保障,如:Android的多媒体处理,依赖于开源项目OpenCORE的支持;浏览器控件的核心实现,是从Webkit移植而来;而数据库功能,则是得益于Sqlite。Android会为所有移植而来第三方类库封装一层JNI接口,以供框架层调用。

为了帮助游戏和图形图像处理等领域的开发者搭建更高效的应用,Android将数学函数库、OpenGL库等核心类库以NDK的形式提供给开发者,开发者可以基于NDK更高效地构建算法,进行图形图像绘制。从实践的角度看,只要能获取到底层类库的头文件信息,开发者就可以逾越NDK的界限,用其他核心类库的接口进行开发。但这样做的危险之处在于兼容性差,Android在版本变迁时,可能会替换或修改一些类库接口或实现,这就会导致依赖于这些类库的应用无法运行。而NDK提供的都是稳定的类库实现,不会再做修改,以保证使用NDK的应用具有向上的兼容性。

1.1.5 硬件抽象层和Linux内核

Android系统并不是从零开始设计的,而是搭建在Linux内核之上。狭义的Android系统,主要指的是Linux内核以上的各层,从运行的角度来看,它们只是运行在Linux系统上的一些进程,并不是完整的系统,离开了Linux的支撑,就像鱼儿离开了水一样,无法运行。

Linux之于Android最大的价值,便是其强大的可移植性。Linux可以运行在各式各样的芯片架构和硬件环境下,而依托于它的Android系统,也便有了强大的可移植性。同时,Linux像一座桥梁,将Android的上层实现与底层硬件连接起来,使它们可以不必直接耦合,因此,降低了移植的难度。

而硬件抽象层(Hardware Abstract Layer,HAL),是Android为厂商定义的一套接口标准,它为框架层提供接口支持,厂商需要根据定义的接口实现相应功能。

------------------------------

本文节选自《Android开发精要》一书,范怀宇著,由机械工业出版社出版。

【内容简介】

如何才能写出贴近Android设计理念、能够更加高效和可靠运行的Android应用?通过Android的源代码去了解其底层实现细节是最重要的方法之一!然而,Android系统太过于庞大,源代码实现复杂,学习的技术门槛和时间成本都很高。有没有一种方法既能帮助开发者深入理解Android应用开发,又能不被底层大量的实现细节所羁绊,迅速掌握编写高质量Android应用所需的知识?本书针对这个问题给出了完美的答案!它从Android繁杂的源代码中抽取出了Android开发的“精华”和“要点”,剥离了大量琐碎的底层实现细节,进行了高度概括和总结,不仅能帮助开发者迅速地从宏观上理解整个Android系统的设计理念,而且能帮助开发者迅速地从微观上掌握核心知识点的原理,从而编写出高质量的Android应用。

本书共13章,在逻辑上分为4个部分。第一部分(1~2章):第1章系统介绍了Android的系统架构、核心模块和设计思想,旨在让读者真正理解它的设计理念;第2章讲解了Android源代码的获取、编译、阅读和编辑的方法。第二部分(3~6章):第3章深入阐述了Android组件机制的设计理念和重要特征,并详细介绍了4大组件的方法和原理;第4章讲解了Intent对象和Android的意图机制,阐明了Android是如何将来自不同应用、不同进程的组件整合在一起的;第5章解析了Android中各个组件的生命周期,包括组件的进程模型和线程模型;第6章从开发的角度详细阐述了组件间数据传输的解决方案,以及它们的优缺点和适用场景。第三部分(7~8章):第7章深入讲解了Android的控件框架,结合实际项目对重要控件的实现和使用逐一进行了分析,还包含Android 4.0界面开发的实践“精华”;第8章分析了Android的资源体系,剖析了Android底层对资源的处理。第四部分(9~13章):第9章讲解了Android的数据存储结构,以及不同数据存储模式的使用要点;第10章分析了Android的各种网络连接方式,涵盖NFC和基于WiFi的P2P连接等内容;第11章讲解了Android的定位服务、地址服务和地图服务的框架实现;第12章仔细分析了Android各种多媒体功能的实现机制;第13章对Android中比较有特色的一些模块的实现细节进行了分析。

【作者简介】

范怀宇,资深Android开发工程师,毕业于清华大学,从事移动开发多年,对Android系统有颇为深入的研究,开发经验十分丰富。曾就职于网易有道,负责完成了有道词典Android版、网易掌上邮Android版、网易八方Android版等项目的开发工作,现就职于豌豆实验室,负责豌豆荚2.0版本的设计和开发。

作者微博:@duguguiyu 个人站点:http://flyvenus.net

【样章下载】http://vdisk.weibo.com/s/a5xZe

【豆瓣收藏】http://book.douban.com/subject/11530748/

分享到:
评论

相关推荐

    基于Android的数独游戏设计说明.doc

    同时,文章还对Android系统架构和应用开发进行了详细介绍,包括Android的概况、开发环境、系统架构、应用程序组件、Intent消息组件等。 本文为用户提供了基于Android平台的数独游戏设计说明,旨在帮助用户快速掌握...

    (完整版)基于android的手机系统助手软件的实现——文献综述.doc

    本文档提供了基于 Android 的手机系统助手软件的实现的概况,涵盖了 Android 平台的发展历史、Android 的前世今生、Android 简介、Android 开发工具、Android 应用程序特点、Android 上的应用程序开发概要等方面。

    android高考宝典系统毕业设计论文

    1 系统总体概况描述 1 1.1 项目背景 1 1.2 开发原因 1 1.3 开发环境及运行环境 1 1.3.1 开发环境和使用工具 1 1.3.2 建议的运行环境 2 1.4 系统目标 2 1.6 可行性分析 2 1.6.1 技术实现可行性 2 1.6.2 软件经济可行...

    基于Android的茶树病虫害信息采集系统.pdf

    一、系统概况 本文介绍了一种基于Android平台的茶树病虫害信息采集系统。该系统旨在快速、方便地收集茶树病虫害信息,以减少病虫害造成的损失。系统的主要功能包括虫害信息浏览、虫害信息采集、照相功能、文件上传...

    基于android智能手机的车辆远程监控系统的设计与开发本科学位论文.doc

    1. Android 系统:该系统基于 Android 手机操作系统,利用 Android 的开放式架构,实现了数据采集、处理和传输。 2. 地理信息系统(GIS):该系统使用 GIS 技术来实现车辆的位置跟踪和路线规划。 3. 全球定位系统...

    基于Android天气预报系统的设计与实现.pdf

    在探讨基于Android的天气预报系统的设计与实现之前,我们首先需要了解Android平台的核心组件和数据存储方式,...通过各种组件的灵活运用和合理的系统架构设计,最终可以开发出一款满足用户需求的天气预报Android应用。

    基于android的图书管理系统的设计与实现本科论文.doc

    在第一章引言中,论文详细阐述了研究背景、意义及内容,概述了Android技术的发展概况,并明确了论文的主要内容,包括系统的设计、实现以及评估等方面。 第二章系统分析部分,论文深入探讨了系统的可行性。技术可行...

    基于Android平台的手机课表管理系统研究开发.pdf

    系统设计概况:本系统基于Android平台,采用软件堆层的架构,由操作系统、中间件、用户界面和应用软件组成。系统架构分为四层,应用层由运行在虚拟机上的应用程序组成,应用框架层由各种组件组成,系统运行库层对应...

    基于安卓的五子棋de游戏设计——论文.doc

    本文还对Android的开发环境进行了详细的介绍,包括Android系统的概况、Android的架构、Android的开发工具等。 在Android的开发环境中,我们使用Eclipse作为开发工具,通过ADT插件对Android应用程序进行开发。同时,...

    《Android应用开发实战》配套源码

     全面介绍了Android的系统架构、开发环境的搭建、Android应用程序的常用组件,以及一个简单的微博客户端的实现方法,为接下来动手实现本书中的完整案例(新浪微博客户端)奠定了基础;第二部分实例篇:介绍了微博...

    android智能家居app的设计与实现

    ##### 2.2 Android系统架构 从软件层次的角度来看,Android平台主要包括以下几个部分: - **应用程序层**:包含一系列预装的核心应用程序,如电子邮件、短信、日历等。这些应用程序均使用Java语言编写。 - **应用...

    基于Android平台的点检管理系统在紫金棒材公司的应用.pdf

    1. 系统架构与功能 紫金棒材公司的点检管理系统主要包括两个班组(钳工组和电工组)、两套设备(加热炉和35kV高配系统)以及八个巡检点。每个巡检点包含多个点检作业项目,覆盖了设备的各个关键部位。系统的功能...

    C#环境下开发Android软件环境搭建

    在C#环境下开发Android软件,主要是利用Microsoft的Visual Studio(VS)和开源的Mono框架,使得C#开发者能够利用熟悉的编程语言和工具构建Android应用程序。本篇将详细讲解如何搭建这样的开发环境。 ### 引言 ####...

    android-底层开发.docx编程资料

    #### 二、Android系统架构及底层技术 1. **Android APP开发语言**:Android应用主要是用Java语言编写,并运行在Dalvik虚拟机上。 2. **Android系统底层**:Android系统基于Linux Kernel 2.6版本之上构建。因此,...

    Android RIL结构分析

    Android RIL(Radio Interface Layer)是Android操作系统中用于管理无线通信硬件的重要组件,它作为抽象层,连接着操作系统内核和应用程序框架。本文档主要针对RIL的结构、原理以及移植进行深入分析。 1. Android ...

    《Android应用开发实战》

    全面介绍了Android的系统架构、开发环境的搭建、Android应用程序的常用组件,以及一个简单的微博客户端的实现方法,为接下来动手实现本书中的完整案例(新浪微博客户端)奠定了基础;第二部分实例篇:介绍了微博...

    QT210Android2.3手册.pdf

    - **Android架构**:Android系统基于Linux内核构建,具有分层结构,包括Linux Kernel、Android Runtime、Libraries、Application Framework和Applications等组成部分。 **1-3 支持的驱动** - **硬件驱动支持**:...

    毕业论文安卓685二维码名片系统app.doc

    - Android架构由Linux内核、硬件抽象层、系统库、应用程序框架和应用程序五部分组成,其中组件设计模型(Activity、Service、BroadcastReceiver、ContentProvider)是核心组成部分。 4. **Android应用程序的生命...

Global site tag (gtag.js) - Google Analytics