2022年Android核心模块 .pdf
Android 作为一个移动设备的平台,其软件层次结构包括了一个操作系统(OS),中间件(MiddleWare)和应用程序(Application)。根据 Android 的软件框图,其 Android 核心模块结构自下而上分为以下几个层次:第一、操作系统层(OS)第二、各种库(Libraries)和 Android 运行环境(RunTime)第三、应用程序框架(Application Framework)第四、应用程序(Application)以下分别介绍 Andoid 各个层次的软件的重点及其相关技术:Android核心模块之操作系统层(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 驱动:Andoid 一个特殊的驱动程序,具有单独的设备节点,提供进程间通讯的功能。Power Management(能源管理)Android 核心模块之各种库(Libraries)和 Android 运行环境(RunTime)名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 10 页 -本层次对应一般 嵌入式 系统,相当于中间件层次。Android 的本层次分成两个部分一个是各种库,另一个是Android 运行环境。本层的内容大多是使用 C+实现的。在其中,各种库包括:C 库:C语言的标准库,这也是系统中一个最为底层的库,C库是通过Linux 的系统调用来实现。多媒体框架(MediaFrameword):这部分内容是Android 多媒体的核心部分,基于PacketVideo(即 PV)的 OpenCORE,从功能上本库一共分为两大部分,一个部分是音频、视频的回放(PlayBack),另一部分是则是音视频的纪录(Recorder)。SGL:2D图像引擎。SSL:即 Secure Socket Layer 位于 TCP/IP 协议与各种应用层 协议之间,为数据通讯提供 安全支持。OpenGL ES 1.0:本部分提供了对3D的支持。界面管理工具(Surface Management):本部分提供了对管理显示子系统等功能。SQLite:一个通用的 嵌入式 数据库 WebKit:网络浏览器的核心 FreeType:位图和矢量字体的功能。Android 的各种库一般是以系统中间件的形式提供的,它们均有的一个显着特点就是与移动设备的平台的应用密切相关。Android 运行环境主要指的虚拟机技术Dalvik。Dalvik 虚拟机和一般JAVA虚拟机(Java VM)不同,它执行的不是JAVA标准的字节码(bytecode)而是 Dalvik可执行格式(.dex)中执行文件。在执行的过程中,每一个应用程序即一个进程(Linux 的一个 Process)。二者最大的区别在于Java VM是以基于栈的虚拟机(Stack-based),而 Dalvik 是基于寄存器的虚拟机(Register-based)。显然,后者最大的好处在于可以根据硬件实现更大的优化,这更适合移动设备的特点。Android核心模块之应用程序框架(Application Framework)Android 的应用程序框架为应用程序层的开发者提供APIs,它实际上是一个应用程序的框架。由于上层的应用程序是以JAVA构建的,因此本层次提供的首先包含了 UI 程序中所需要的各种控件:名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 10 页 -例如:Views(视图组件)包括 lists(列表),grids(栅格),text boxes(文本框),buttons(按钮)等。甚至一个嵌入式的Web浏览器。一个 Andoid 的应用程序可以利用应用程序框架中的以下几个部分:Activity(活动)Broadcast Intent Receiver(广播意图接收者)Service(服务)Content Provider(内容提供者)Android核心模块之应用程序(Application)Android 的应用程序主要是用户界面(User Interface)方面的,通常以 JAVA程序编写,其中还可以包含各种资源文件(放置在res 目录中)JAVA程序及相关资源经过编译后,将生成一个APK包。Android 本身提供了主屏幕(Home),联系人(Contact),电话(Phone),浏览器(Browers)等众多的核心应用。同时应用程序的开发者还可以使用应用程序框架层的API 实现自己的程序。这也是 Android 开源的巨大潜力的体现。Android 架构详解Android 系统架构由 5 部分组成,分别是:Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。第二部分将详细介绍这5个部分。下面自底向上分析各层。名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 10 页 -Android 架构1、Linux KernelAndroid 基于 Linux 2.6 提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说各层各尽其职,各层提供固定的SAP(Service Access Point),专业点可以说是高内聚、低耦合。如果你只是做应用开发,就不需要深入了解Linux Kernel层。2、Android RuntimeAndroid 包含一个核心库的集合,提供大部分在Java 编程语言核心类库中可用的功能。每一个Android 应用程序是 Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik 虚拟机设计成,在一个设备可以高效地运行多个虚拟机。Dalvik 虚拟机可执行文件格式是.dex,dex 格式是专为 Dalvik 设计的一种压缩格式,适合内存和处理器速度有限的系统。大多数虚拟机包括JVM都是基于栈的,而 Dalvik 虚拟机则是基于寄存器的。两种架构各有优劣,一般而言,基于名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 10 页 -栈的机器需要更多指令,而基于寄存器的机器指令更大。dx 是一套工具,可以将 Java.class 转换成 .dex 格式。一个 dex 文件通常会有多个.class。由于dex 有时必须进行最佳化,会使文件大小增加1-4 倍,以 ODEX 结尾。Dalvik虚拟机依赖于 Linux 内核提供基本功能,如线程和底层内存管理。3、LibrariesAndroid 包含一个 C/C+库的集合,供 Android 系统的各个组件使用。这些功能通过 Android 的应用程序框架(application framework)暴露给开发者。下面列出一些核心库:系统 C库-标准 C系统库(libc)的 BSD衍生,调整为基于嵌入式 Linux 设备 媒体库-基于 PacketVideo 的 OpenCORE。这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括 MPEG4、H.264、MP3、AAC、AMR、JPG、PNG 界面管理-管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层 LibWebCore-新式的 Web浏览器引擎,驱动Android 浏览器和内嵌的 web视图 SGL-基本的 2D图形引擎 3D 库-基于OpenGL ES 1.0 APIs 的实现。库使用硬件3D加速或包含高度优化的3D软件光栅 FreeType-位图和矢量字体渲染 SQLite-所有应用程序都可以使用的强大而轻量级的关系数据库引擎4、Application Framework通过提供开放的开发平台,Android 使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。开发者可以完全使用核心应用程序所使用的框架APIs。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。所有的应用程序其实是一组服务和系统,包括:视图(View)-丰富的、可扩展的视图集合,可用于构建一个应用程序。包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器内容提供者(Content Providers)-使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据资源管理器(Resource Manager)-提供访问非代码资源,如本地化字符串、图形和布局文件通知管理器(Notification Manager)-使所有的应用程序能够在状态栏显示自定义警告活动管理器(Activity Manager)-管理应用程序生命周期,提供通用的导航回退功能5、ApplicationsAndroid 装配一个核心应用程序集合,包括电子邮件客户端、SMS 程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java 编程语言写的。更加丰富的应用程序有待我们去开发!从上面我们知道 Android 的架构是分层的,非常清晰,分工很明确。Android 本身是一套软件堆迭(Software Stack),或称为软件迭层架构,迭层主要分成三层:操作系统、中间件、应用程序。从上面我们也看到了开源的力量,一个个熟悉的开源软件在这里贡献了自己的一份力量。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 10 页 -Android 应用程序开发入门Android 会同一个核心应用程序包一起发布,该应用程序包包括email 客户端,SMS 短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是用 JAVA编写的。Android 应用程序框架 开发者也完全可以访问核心应用程序所使用的API框架。该应用程序架构用来简化组件软件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的 安全性限制)。该应用程序重用机制使得组件可以被用户替换。以下所有的应用程序都由一系列的服务和系统组成,包括:一个可扩展的视图(Views)可以用来建应用程序,包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),甚至包括一个可嵌入的 web浏览器内容管理器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。一个资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和分层文件(layout files)。一个通知管理器(Notification Manager)使得应用程序可以在状态栏中显示客户通知信息。一个活动类管理器(Activity Manager)用来管理应用程序生命周期并提供常用的导航回退功能。有关更多的细节和怎样从头写一个应用程序,请参考 写一个 Android 应用程序 部分。Android 程序库 Android 包括一个被 Android 系统中各种不同组件所使用的 C/C+库集。该库通过 Android 应用程序框架为开发者提供服务。以下是一些主要的核心库:系统 C 库-一个从 BSD 继承来的标准 C 系统函数库(libc),专门为基于 embedded linux的设备定制。媒体库 -基于 PacketVideo OpenCORE;该库支持录放,并且可以录制许多流行的音频视频格式,还有静态印像文件包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG。Surface Manager-对显示子系统的管理,并且为多个应用程序提供2D和 3D图层的无缝融合。LibWebCore-一个最新的 web浏览器引擎用来支持Android 浏览器和一个可嵌入的web视图。SGL-一个内置的 2D图形引擎 3D libraries-基于 OpenGL ES 1.0 APIs 实现;该库可以使用硬件 3D加速(如果可用)或者使用高度优化的3D软加速。FreeType 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 10 页 -位图(bitmap)和向量(vector)字体显示。SQLite-一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。Android 运行库Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik 虚拟机实例。Dalvik 是针对于同时高效地运行多个VMs来实现的。Dalvik虚拟机执行.dex 的 Dalvik 可执行文件,该格式文件针对最小内存使用做了优化。该虚拟机是基于寄存器的,所有的类都经由JAVA汇编器编译,然后通过SDK中的 dx 工具转化成.dex 格式由虚拟机执行。Dalvik 虚拟机依赖于 linux的一些功能,比如线程机制和底层内存管理机制。Linux 内核 Android 的核心系统服务依赖于 Linux 2.6 内核,如 安全性,内存管理,进程管理,网络协议栈和驱动模型。Linux 内核也同时作为硬件和软件堆栈之间的硬件抽象层。未来发展老牌智能手机软件平台制造商Symbian发言人则表示:Google 的 android只不过是另一个 linux,symbian 对其它软件与其形成的竞争并不感到担心。除了北美之外,Symbian在其它地区智能手机市场都占有大部分市场份额。与 iPhone 相似,Android 采用 WebKit 浏览器引擎,具备触摸屏、高级图形显示和上网功能,用户能够在手机上查看电子邮件、搜索网址和观看视频节目等,比 iPhone 等其他手机更强调搜索功能,界面更强大,可以说是一种融入全部Web应用的单一平台。但其最震撼人心之处在于Android 手机系统的开放性和服务免费。Android是一个对第三方软件完全开放的平台,开发者在为其开发程序时拥有更大的自由度,突破了 iPhone 等只能添加为数不多的固定软件的枷锁;同时与WindowsMobile、Symbian等厂商不同,Android 操作系统免费向开发人员提供,这样可节省近三成成本。Android 项目目前正在从手机运营商、手机厂商、开发者和消费者那里获得大力支持。谷歌移动平台主管安迪鲁宾(Andy Rubin)表示,与软件开发合作伙伴的密切接触正在进行中。从去年11 月开始,谷歌开始向服务提供商、芯片厂商和手机销售商提供Android 平台,并组建“开放手机联盟”,其成员超过30家。市场前景Google 手机于 08 年 10月 22 日正式上市,与运营商捆绑的合约价为179 美元(约合人民币 1200 元),现有的 T-Mobile 用户可以通过网络订购。在10 月 22日发布当天,将有22 个国家和地区可以买到谷歌手机。在11 月,将增至 27 个名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 10 页 -国家和地区。谷歌手机将只能在 T-Mobile 网络内使用,将会有SIM卡锁定限制。T-Mobile USA 提供了两种流量和短信近曝光的moto sholes(也有人称之为moto tao)将搭载最新的 android2.0操作系统包月计划。第一档为25美元,包括不限制的网络流量,以及一定数量的短信;第二档为35 美元,包括不限制的网络流量和不限数量的短信。G1支持各种谷歌的服务,包括 Gmail、Google Maps、YouTube、Google 日历和 Google Talk,内置 Chrome Lite 浏览器。使用这款手机也需要 Gmail 账号。“我爱死我的 G1了!”谷歌联合创始人拉里佩奇(Larry Page)憧憬:“对于我来说,谷歌手机最激动人心的一点就是它的未来。它的功能很强,正如几年前的电脑一样。你可以上网,安装软件。”T-Mobile USA为德国电信旗下移动子公司,运营GSM/HSPA 网络,拥有用户近 3000 万。此次发布的谷歌手机采用高通MSM7201A 处理器,支持 7.2Mbps下载速率,美国运营商 3G网络设定的套餐速率一般可达1Mbps以上。MSM7201A 为单芯片、双核,整合硬件加速多媒体功能、支持3D图形,300 万像素的摄像功能可以扫描条形码,并且有GPS 功能。在美国四大移动运营商中,T-Mobile USA 处于相对弱势的地位,不过T-Mobile 在欧洲有更为强势的是CDMA EV-DO 网络,而 T-Mobile USA 和苹果iPhone 的独家运营商 AT&T为 GSM/HSPA 网络,后者在 2005年 12月就推出了全球第一个 HSDPA 商用服务。T-Mobile USA今年 5 月方才在纽约推出了3G服务,目前已经在奥斯汀、巴尔的摩、波士顿、达拉斯、休斯敦、拉斯维加斯、迈阿密、明尼阿波利斯、凤凰城、波特兰、圣安东尼奥和圣地亚哥等12 个城市增加了 3G覆盖,公司计划年底前将 3G覆盖的城市从目前的13 个增加到 27 个,能够为其超过2/3 的用户提供3G服务。Android 使用 SDK方法详解Android 手机操作系统可以在模拟器中进行一些特定的修改以此满足用户的各种需求。那么如何能在模拟器中正确的应用Android 使用 SDK呢?我们将会在这里对这一应用技巧进行一个详细的介绍。1.在 Android 模拟器上安装和卸载APK包1.adb install-l-r -push this package file to the device and install it 2.(-l means forward-lock the app)(-r means reinstall the app,keeping its data)名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 10 页 -3.adb uninstall-k -remove this app package from the device 4.(-k means keep the data and cache directories)安装:1.adb install filename.apk 2.D:android-sdktoolsadb install filename.apk 3.*daemon not running.starting it now*4.*daemon started successfully*5.347 KB/s(111196 bytes in 0.312s)6.pkg:/data/local/tmp/filename.apk 7.Success 卸载:adb uninstall filename.apk 或者adb shell rm data/app/filename.apk 2.在 Android 模拟器上使用 sd card 生成 sdcard 镜像文件:1.mksdcard:create a blank FAT32 image to be used with the Android emulator 2.usage:mksdcard-l label 3.if is a simple integer,it specifies a size in bytes 4.if is an integer followed by K,it specifies a size in KiB 名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 10 页 -5.if is an integer followed by M,it specifies a size in MiB 6.D:android-sdktoolsmksdcard.exe-l sdcard 2048M sdcard.img 启动模拟器:emulator-sdcard sdcard镜像文件例如:emulator-sdcard sdcard.img 将资源放入到 sdcard 里面:adb push source-file/sdcard 例如:1.D:android-sdktoolsadb push NOTICE.txt/sdcard 2.1088 KB/s(156733 bytes in 0.140s)使用命令 adb shell 查看 sdcard 目录:1.D:android-sdktoolsadb shell 2.#ls sdcard 3.NOTICE.txt 名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 10 页 -