Android 5.0内核和源代码学习(1)——系统简介

来源:互联网 发布:淘宝大件退货运费谁出 编辑:程序博客网 时间:2024/05/29 02:32


一、为什么要学习Android内核

Android应用以来,但是总感觉蒙了一层雾,为什么是activity的生命周期是这样?为什么要分UI线程和其他线程?AndroidLinux有什么区别?

我想要知其所以然,而不是天天学习搬砖,语言技术总是在变,程序员总要抓住其中不变的内涵。

因此,Android内核和源码学习之路开始了,既是总结以前看过的Android知识,也是督促自己继续深造。

废话到此,开始!

 

二、Android的系统架构图

每一个Android学习者总是要先看这张图的,这张图虽然简单,但是每个层次的开发者总能看到不一样的内涵

        

上图从上往下分为:(1)应用程序层(2)应用程序框架层(3)系统运行库层(4)硬件抽象接口层  (5)Linux内核层。

在开发应用的Android程序员看来,应该最关注第一、二层;更资深一点的程序员眼里应该会关注第三层(NDK开发);大牛级别的Android开发者,比如手机厂商的定制Android系统的人员,则会关注第四层。

    其实这张图应该叫做逻辑系统架构图,因为从源代码工程上没有划分层次的说法。

总之,正是应了一千个XXX有一千个XXX的那句话,每个级别的程序员关注的、看到的都不一样。

                  

三、Android的应用程序框架层详解

Android系统使用的是Linux内核,实际上Android只是在Linux内核之外加上了很多Android特有的东西:比如特定硬件的驱动、Android的类库、一些服务、JAVA运行时等等等等。

其中第二层,应用程序框架层是从事Android开发的基础,很多核心应用程序也是通过这一层来实现其核心功能。那么理解这一层对于理解Android系统的设计思想是很有帮助的。如图所示,这一层提供很多服务(不止下面介绍的),解析如下:

1 ActivityManager(活动管理器): 管理各个应用程序生命周期以及通常的导航回退功能。

2 WindowManager(窗口管理器):管理所有的窗口程序

3  ContentProvider(内容提供器):使得不同应用程序之间存取或者分享数据

4 ViewSystem(视图系统):构建应用程序的基本组件

5 NotificationManager(通告管理器):使应用程序可以在状态栏中显示提示信息

6 PackageManager(包管理器) Android系统内的程序管理

7TelephonyManager(电话管理器):管理所有的移动设备通话相关功能

8ResourceManager(资源管理器):提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等

9LocationManager(位置管理器):提供位置服务

10XMPPServiceXMPP服务):提供GoogleTalk服务 (可以做消息推送)

 

注:可能有人问了,为什么我把这些什么什么器叫做服务?其实从两个方面可以解答:

a) Android系统的启动过程中就把这些东西叫做服务;

b)从编程角度来看,你要获得上面一个什么什么器都是用这样的语句(这个是获取窗口,其他的都类似):

WindowManager mManager=(WindowManager)getSystemService(Context.WINDOW_SERVICE); 

从语句上来看getSystemService不正是获取服务的意思吗?

 

  四、Android的系统运行库层详解

  1、系统库

    系统库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带。其主要分为如下几个(还有更多):

  1SurfaceManager:执行多个应用程序时候,负责管理显示与存取操作间的互动,另外也负责2D绘图与3D绘图进行显示合成。 

  2MediaFramework 多媒体库,基于PacketVideoOpenCore;支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4MP3H.264AACARM

  3SQLite:存储在本地的小型的关系型数据库引擎 

  (4OpenGL|ES:根据OpenGL ES1.0API标准实现的3D绘图函数库 

  5FreeType:提供点阵字与向量字的描绘与显示 

  6WebKit:一套网页浏览器的软件引擎

  7SGL:底层的2D图形渲染引擎 

  8SSL:在Andorid上通信过程中实现加密 

  9Libc:标准C系统函数库(包含C语言最基本的函数库)

2Android运行时

   Android应用程序时采用Java语言编写,程序在Android运行时中执行,其运行时分为核心库和Dalvik虚拟机两部分。

  1)核心库:核心库提供了Java语言API中的大多数功能,同时也包含了Android的一些核心API,android.osandroid.netandroid.media等等。

  2Dalvik虚拟机:每个Android应用程序都有一个专有的Dalvik进程,并且不是多个程序运行在一个虚拟机中,而是每个Android程序都有一个Dalivik虚拟机的实例,并在该实例中执行。Dalvik虚拟机是一种基于寄存器的Java虚拟机,而不是传统的基于栈的虚拟机,并进行了内存资源使用的优化以及支持多个虚拟机的特点。Dalvik虚拟机中执行的并非编译后的字节码,而是通过转换工具dxJava字节码转成dex格式的中间码。

 

五、Android的硬件抽象层HAL

 Android的硬件抽象层,简单来说,就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节。


AndroidLinux内核层

早期的Android采用了Linux 2.3内核,最新的Android 5.0基于Linux 3.1,各大手机厂商订制的Android系统基于的Linux内核就看心情了(小米的是3.3)。

 

七、小结与下一篇

这一篇主要介绍了Android的层次结构,从宏观上了解系统的组成架构。下一篇将讲解如何获取Android源码,并结合源码详细解析Android系统的启动过程。

 

2 0
原创粉丝点击