Android 5.0 源代码结构

幼敏悟过人,读书辄成诵。这篇文章主要讲述Android 5.0 源代码结构相关的知识,希望能为你提供帮助。
android 5.0 源代码结构本节书摘来自异步社区《深入理解Android 5 源代码》一书中的第2章,第2.2节分析Android源代码结构,作者 李骏。
网址:https://yq.aliyun.com/articles/93279?spm=5176.100239.blogcont93310.17.gtBsUg
 
2.2 分析Android源代码结构
 
获得Android 5.0源代码后,源代码的全部工程分为以下3个部分。
              Core Project:核心工程部分,这是建立Android系统的基础,被保存在根目录的各个文件夹中。
              External Project:扩展工程部分,可以使其他开源项目具有扩展功能,被保存在“external”文件夹中。
            Package:包部分,提供了Android的应用程序、内容提供者、输入法和服务,被保存在“package”文件夹中。
 
在本节的内容中,将详细讲解Android 5.0源代码的目录结构。
 
2.2.1 总体结构
              无论是Android 1.5还是Android 5.0,各个版本的源代码目录基本类似。在里面包含了原始Android的目标机代码、主机编译工具和仿真环境。解压缩下载的Android 5.0源代码包后,可以看到第一级目录有多个文件夹和一个Makefile文件,如图2-14所示。
【Android 5.0 源代码结构】

Android 5.0 源代码结构

文章图片

Android 5.0 源代码结构

文章图片

Android 5.0 源代码结构

文章图片

由此可见,通过对源代码中根目录的每个文件夹的功能的介绍,可以看出源代码按功能分类还是非常清晰的,可以分为系统代码、工具、文档、开发环境、虚拟机、配置脚本和编译脚本等类别。并且也可以看出涉及的内容比较庞大和复杂,源代码分析工作需要多方面的理论和实践知识。
 
2.2.2 应用程序部分
              应用程序主要是UI界面的实现,广大开发者基于SDK上开发的一个个独立的APK包,都是属于应用程序这一层的,应用程序在Android系统中处于最上层的位置。源代码结构中的packages目录用来实现系统的应用程序,packages的目录结构如下所示。
packages/
├── apps //应用程序库
│    ├── BasicSmsReceiver                //基础短信接收
│    ├── Bluetooth                              //蓝牙         
│    ├── Browser                                    //浏览器
│    ├── Calculator                              //计算器
│    ├── Calendar                                  //日历
│    ├── Camera                                      //照相机
│    ├── CellBroadcastReceiver        //单元广播接收
│    ├── CertInstaller                        //被调用的包,在Android中安装数字签名
│    ├── Contacts                                  //联系人
│    ├── DeskClock                                //桌面时钟
│    ├── Email                                          //电子邮件
│    ├── Exchange                                  //Exchange服务     
│    ├── Gallery                                    //图库
│    ├── Gallery2                                //图库2
│    ├── htmlViewer                              //HTML查看器
│    ├── KeyChain                                  //密码管理
│    ├── Launcher2                                //启动器2
│    ├── Mms                                              //彩信
│    ├── Music                                          //音乐
│    ├── MusicFX                                    //音频增强
│    ├── Nfc                                                //近场通信
│    ├── PackageInstaller                    //包安装器
│    ├── Phone                                          //电话
│    ├── Protips                                      //主屏幕提示
│    ├── Provision                                  //引导设置
│    ├── QuickSearchBox                      //快速搜索框
│    ├── Settings                                    //设置
│    ├── SoundRecorder                        //录音机
│    ├── SpareParts                                //系统设置
│    ├── SpeechRecorder                      //录音程序
│    ├── Stk                                              //sim卡相关
│    ├── Tag                                              //标签
│    ├── VideoEditor                            //视频编辑
│    └── VoiceDialer                            //语音编号
├── experimental                                //非官方的应用程序
│    ├── BugReportSender                    //Bug的报告程序
│    ├── Bummer                                 
│    ├── CameraPreviewTest                //照相机预览测试程序
│    ├── DreamTheater                   
│    ├── ExampleImsFramework
│    ├── LoaderApp
│    ├── NotificationLog
│    ├── NotificationShowcase
│    ├── procstatlog
│    ├── RpcPerformance
│    └── StrictModeTest
├── inputmethods                                    //输入法
│    ├── LatinIME                                //拉丁文输入法
│    ├── OpenWnn                                    //OpenWnn输入法
│    └── PinyinIME                                //拼音输入法
├── providers                                          //提供器
│    ├── ApplicationsProvider            //应用程序提供器,提供应用程序所需的界面
│    ├── CalendarProvider                    //日历提供器
│    ├── ContactsProvider                    //联系人提供器
│    ├── DownloadProvider                    //下载管理提供器
│    ├── DrmProvider                              //数据库相关
│    ├── GoogleContactsProvider        //Google联系人提供器
│    ├── MediaProvider                          //媒体提供器
│    ├── TelephonyProvider                  //彩信提供器
│    └── UserDictionaryProvider        //用户字典提供器
├── screensavers                                        //屏幕保护
│    ├── Basic                                              //基本屏幕保护         
│    ├── PhotoTable                                  //照片方格         
│    ├── WebView                                        //网页
└── wallpapers                                            //墙纸     
  ├── Basic                                                //系统内置墙纸     
  ├── Galaxy4                                            //S4内置墙纸     
  ├── HoloSpiral                                    //手枪皮套墙纸     
  ├── LivePicker     
  ├── MagicSmoke     
  ├── MusicVisualization     
  ├── NoiseField     
  └── PhaseBeam
 
              通过上面的目录结构可以看出,package目录主要存放的是与Android系统应用层相关的内容,包括应用程序相关的包或者资源文件,其中包括系统自带的应用程序,及第三方开发的应用程序,还有屏幕保护和墙纸等应用,所以源代码中package目录对应着系统的应用层。
 
2.2.3 应用程序框架部分
              应用程序框架是Android系统中的核心部分,也就是SDK部分,它会提供接口给应用程序使用,同时应用程序框架又会和系统服务、系统程序库、硬件抽象层有关联,所以其作用十分重大,应用程序框架的实现代码大部分都在/frameworks/base和/framwworks/av目录下,/frameworks/base的目录结构如下所示。
 
frameworks/base
├── api                //全是XML文件,定义了API
├── cmds              //Android<

    推荐阅读