Android核心服务解析篇(二)——Android源码结构分析(一)

简介: Android核心服务解析篇(二)——Android源码结构分析(一)

获得Android源码后,我们来分析源码结构。源码的全部工程分为如下三个部分。


①Core Project:核心工程部分,这是建立Android系统的基础,保存在根目录的各个文件夹中。


②External Project:扩展工程部分,可以使其他开源项目具有扩展功能,保存在external文件夹中。


③Package:包部分,提供了Android的应用程序,内容提供者,输入法和服务,保存在package文件夹中。


在获取的Android4.3源码目录中,包含了原始Android的目标机代码,主机编译工具和仿真环境。解压缩下载的Android4.3源码包后,第一级别目录结构的具体说明如下表所示:


表2-1 Android源码的根目录

根目录

描述

abi

abi相关代码,应用程序二进制接口
bionic bionic C库
bootable 启动引导相关代码
build 存放系统编译规则及generic等基础开发配置包
cts Android兼容性测试套件标准
dalvik dalvik Java虚拟机
development 应用程序开发相关代码
device 设备相关代码
docs 介绍开源的相关文档
external
Android使用的一些开源的模组
frameworks 核心框架——Java及C++语言,是Android应用程序的框架
gdk 即时通信模块
hardware 主要是硬件适配层HAL代码
kernel Linux的内核文件
libcore 核心库相关
libnativehelper  是Support functions for Android's class libraries的别名,表示动态库,是实现JNI库的基础
ndk ndk相关代码。Android NDK(Android Native Development Kit)是一系列的开发工具,允许程序开发人员在Android应用程序中嵌入C/C++语言编写的非托管代码
out 编译完成后的代码输出在此目录
packages 应用程序包
pdk
Plug Development Kit的缩写,是本地开发套件
prebuilts x86和ARM架构下预编译的一些资源
sdk SDK及模拟器
system 文件系统和应用及组件,是用C语言实现的
tools 工具文件夹
vendor 厂商定制代码
Makefile 全局的Makefile


文件夹目录如下:


13.png


1.Android源码的目录结构


当下载好Android源码后,可以看到,第一级目录有18个文件夹和一个Makefile文件,如果是编译后的源码目录,会增加一个out文件夹,用来存放编译产生的文件,下面具体来分析一下这些目录各自的作用:


|——abi //应用程序的二进制接口


|——bionic //Android基础C库的源码


|——bootable  //系统启动器的源码


|——build //编译和配置系统所需要的配置文件和脚本文件


|——cts //Android兼容性测试标准


|——dalvik //Android虚拟机源码


|——development  //程序开发的模板和工具


|——device //设备相关代码


|——docs //开源的相关文档


|——external  //Android使用的第三方开源库的源码


|——frameworks  //应用程序框架源码


|——gdk //即时通信模块


|——hardware  //硬件抽象层源码


|——libcore //相关核心库的代码


|——libnativehelper  //动态库


|——ndk //NDK开发环境


|——packages  //应用程序包


|——pdk //本地开发套件


|——prebuilt  //x86和ARM架构下预编译的一些资源


|——sdk //SDK和模拟器相关代码


|——system //文件系统,应用和组件


|——Makefile  //系统编译脚本


通过上面对源码根目录中的每个文件夹的介绍,可以看出源码是按照功能进行分类的,整个Android源码分为系统代码,工具,文档,开发环境,虚拟机,配置脚本和编译脚本等类别。


2.应用程序


在Android源码中,应用程序部分的功能是实现UI界面,开发人员基于SDK开发的APK包便属于应用程序层。应用程序层在Android系统中处于最顶层,Android 4.3源码结构中的packages目录用来实现系统的应用程序,此目录的具体结构如下所示:


packages /


|——apps //应用程序库


|——|——BasicSmsReceiver//基础短信接收


|——|——Bluetooth//蓝牙


|——|——Browser//浏览器


|——|——Calculator//计算器


|——|——Calendar//日历


|——|——Camera//照相机


|——|——CellBroadcastReceiver//单元广播接收


|——|——CertInstaller//被调用的包,在Android中安装数字签名


|——|——Contacts//联系人


|——|——DeskClock//桌面时钟


|——|——Email//电子邮件


|——|——Exchange//Exchange服务


|——|——Gallery//图库


|——|——Gallery2//图库2


|——|——HTMLViewer//HTML查看器


|——|——KeyChain//密码管理


|——|——Launcher2  //启动器


|——|——Mms//彩信


|——|——Music//音乐


|——|——MusicFX//音频增强


|——|——Nfc//近场通信


|——|——PackageInstaller//包安装器


|——|——Phone//电话


|——|——Protips//主屏幕提示


|——|——Provision//引导设置


|——|——QuickSearchBox//快速搜索框


|——|——Settings//设置


|——|——SoundRecorder//录音机


|——|——SpareParts//系统设置


|——|——SpeechRecorder//录音程序


|——|——Stk//sim卡相关


|——|——Tag//标签


|——|——VideoEditor//视频编辑


|——|——VoiceDialer//语音编号


|——experimental//非官方的应用程序


|——|——BugReportSender//Bug的报告程序


|——|——Bummer


|——|——CameraPreviewTest//照相机预览测试程序


|——|——DreaamTheater


|——|——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


通过上面的目录结构可以看出,在packages目录中包含了应用程序相关的包或者资源文件,不但包括系统自带的应用程序,也包括第三方开发的应用程序和屏幕保护和墙纸等应用。


3.应用程序框架


应用程序框架是Android系统中的核心部分,也就是SDK部分,它会提供接口给应用程序使用,同时应用程序框架又会与系统服务,系统程序库,硬件抽象层的关联,所以其作用十分重大,应用程序框架的实现代码大部分都在/frameworks/base和/frameworks/av目录下。


frameworks/base的目录结构如下所示:


frameworks/base


|——api //全是XML文件,定义了API


|——cmds //Android中的重要命令(am,app_proce等)


|——core //核心库


|——data //声音字体等数据文件


|——docs //文档


|——drm //数字版权管理


|——graphics  //图形图像


|——icu4j //用于解决国际化问题


|——include //头文件


|——keystore  //数字签名证书相关


|——libs //库


|——location  //地理位置


|——media //多媒体


|——native //本地库


|——nfc-extras  //NFC相关


|——obex //蓝牙传输


|——opengl //OpenGL相关


|——packages  //设置,TTS,VPN程序


|——policy //锁屏界面相关


|——sax //XML解析器


|——services  //Android服务


|——telephony  //电话相关


|——test-runner  //测试相关


|——tests //测试相关


|——tools //工具


|——voip //可视通话


|——wifi //无线网络




以上这些文件包含了应用程序框架层的大部分代码,正是这些目录下的文件构成了Android的应用程序框架层,暴露出接口给应用程序调用,同时衔接系统程序库和硬件抽象层,形成一个由上至下的调用过程。


4.系统服务


Android应用程序框架层的大部分实现代码被保存在/frameworks/base目录下,其实在这个目录中还有一个名为service的目录,里面的代码用于实现Android系统服务,其目录结构如下所示:


frameworks/base/services


|——common_time  //日期时间相关的服务


|——input //输入系统服务


|——java //其他重要服务的Java层


|——jni //其他重要服务的JNI层


|——tests //测试相关


其中java和jni两个目录分别是一些其他的服务的Java层和JNI层实现,java目录下的目录结构以及其他Android系统服务的相关说明如下所示:


frameworks/base/services/java/com/android/server


|——accessibility


|——am


|——connectivity


|——display


|——dreams


|——drm


|——input


|——location


|——net


|——pm


|——power


|——updates


|——usb


\——wm


|——AlarmManagerService.java//闹钟服务


|——AppWidgetService.java//应用程序小工具服务


|——AppWidgetServiceImpl.java


|——AttributeCache.java


\——BackupManagerService.java//备份服务


|——BatteryService.java//电池相关服务


|——BluetoothManagerService.java//蓝牙


|——BootReceiver.java


|——BrickReceiver.java


|——CertBlacklister.java


|——ClipboardService.java


|——CommonTimeManagementService.java//时间管理服务


|——ConnectivityService.java


|——CountryDetectorService.java


|——DevicePolicyManagerService.java


|——DeviceStorageMonitorService.java//设备存储器监听服务


|——DiskStatsService.java//磁盘状态服务


|——DockObserver.java//底座监视服务


|——DropBoxManagerService.java


|——EntropyMixer.java


|——EventLogTags.logtags


|——INativeDaemonConnectorCallbacks.java


|——InputMethodManagerService.java//输入法管理服务


|——IntentResolver.java


|——IntentResolverOld.java


|——LightsService.java


|——LocationManagerService.java//地理位置服务


|——MasterClearReceiver.java


|——MountService.java//挂载服务


|——NativeDaemonConnector.java


|——NativeDaemonConnectorException.java


|——NativeDaemonEvent.java


|——NetworkManagementService.java//网络管理服务


|——NetworkTimeUpdateService.java


|——NotificationManagerService.java//通知服务


|——NsdService.java


|——PackageManagerBackupAgent.java


|——PreferredComponent.java


|——ProcessMap.java


|——RandomBlock.java


|——RecognitionManagerService.java


|——SamplingProfilerService.java


|——SerialService.java//NFC相关


|——ServiceWatcher.java


|——ShutdownActivity.java


|——StatusBarManagerService.java//状态栏管理服务


|——SystemBackupAgent.java


|——SystemService.java


|——TelephonyRegistry.java


|——TextServicesManagerService.java


|——ThrottleService.java


|——TwilightCalculator.java


|——TwilightService.java


|——UiModeManagerService.java


|——UpdateLockService.java//锁屏更新服务


|——VibratorService.java//震动服务


|——WallpaperManagerService.java//壁纸服务


|——Watchdog.java//看门狗


|——WifiService.java//无线网络服务


|——WiredAccessoryManager.java//无线设备管理服务


从上面的文件夹和文件可以看出,Android中涉及的服务种类有:界面,网络,电话等核心模块,这些专属服务是系统级别的服务,这些系统服务一般都会在Android系统启动的时候加载,在系统关闭的时候结束,受到系统的管理,应用程序并没有权力去打开或者关闭,它们会随着系统的运行一直在后台运行,供应用程序和其他组件来使用。


另外,在framework/av/目录下面有一个services目录,在此目录中存放的是音频和照相机的服务的实现代码,此目录的具体结构如下所示:


frameworks/av/services


|——audioflinger//音频管理服务


|——camera//照相机的管理服务


av/services目录主要用来支持Android系统中的音频和照相机服务。

相关文章
|
4月前
|
XML 搜索推荐 Android开发
Android改变进度条控件progressbar的样式(根据源码修改)
本文介绍了如何基于Android源码自定义ProgressBar样式。首先分析了系统源码中ProgressBar样式的定义,发现其依赖一张旋转图片实现动画效果。接着分两步指导开发者实现自定义:1) 模仿源码创建一个旋转动画XML文件(放置在drawable文件夹),修改图片为自定义样式;2) 在UI控件中通过`indeterminateDrawable`属性应用该动画。最终实现简单且个性化的ProgressBar效果,附带效果图展示。
257 2
|
7月前
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
674 83
|
5月前
|
NoSQL 应用服务中间件 PHP
布谷一对一直播源码android版环境配置流程及功能明细
部署需基于 CentOS 7.9 系统,硬盘不低于 40G,使用宝塔面板安装环境,包括 PHP 7.3(含 Redis、Fileinfo 扩展)、Nginx、MySQL 5.6、Redis 和最新 Composer。Swoole 扩展需按步骤配置。2021.08.05 后部署需将站点目录设为 public 并用 ThinkPHP 伪静态。开发环境建议 Windows 操作系统与最新 Android Studio,基础配置涉及 APP 名称修改、接口域名更换、包名调整及第三方登录分享(如 QQ、微信)的配置,同时需完成阿里云与腾讯云相关设置。
|
6月前
|
数据采集 JSON 数据可视化
JSON数据解析实战:从嵌套结构到结构化表格
在信息爆炸的时代,从杂乱数据中提取精准知识图谱是数据侦探的挑战。本文以Google Scholar为例,解析嵌套JSON数据,提取文献信息并转换为结构化表格,通过Graphviz制作技术关系图谱,揭示文献间的隐秘联系。代码涵盖代理IP、请求头设置、JSON解析及可视化,提供完整实战案例。
407 4
JSON数据解析实战:从嵌套结构到结构化表格
|
6月前
|
数据采集 前端开发 JavaScript
金融数据分析:解析JavaScript渲染的隐藏表格
本文详解了如何使用Python与Selenium结合代理IP技术,从金融网站(如东方财富网)抓取由JavaScript渲染的隐藏表格数据。内容涵盖环境搭建、代理配置、模拟用户行为、数据解析与分析等关键步骤。通过设置Cookie和User-Agent,突破反爬机制;借助Selenium等待页面渲染,精准定位动态数据。同时,提供了常见错误解决方案及延伸练习,帮助读者掌握金融数据采集的核心技能,为投资决策提供支持。注意规避动态加载、代理验证及元素定位等潜在陷阱,确保数据抓取高效稳定。
157 17
|
6月前
|
传感器 监控 Java
Java代码结构解析:类、方法、主函数(1分钟解剖室)
### Java代码结构简介 掌握Java代码结构如同拥有程序世界的建筑蓝图,类、方法和主函数构成“黄金三角”。类是独立的容器,承载成员变量和方法;方法实现特定功能,参数控制输入环境;主函数是程序入口。常见错误包括类名与文件名不匹配、忘记static修饰符和花括号未闭合。通过实战案例学习电商系统、游戏角色控制和物联网设备监控,理解类的作用、方法类型和主函数任务,避免典型错误,逐步提升编程能力。 **脑图速记法**:类如太空站,方法即舱段;main是发射台,static不能换;文件名对仗,括号要成双;参数是坐标,void不返航。
241 5
|
9月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
9月前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
9月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
10月前
|
安全 Android开发 数据安全/隐私保护
深入探索Android与iOS系统安全性的对比分析
在当今数字化时代,移动操作系统的安全已成为用户和开发者共同关注的重点。本文旨在通过比较Android与iOS两大主流操作系统在安全性方面的差异,揭示两者在设计理念、权限管理、应用审核机制等方面的不同之处。我们将探讨这些差异如何影响用户的安全体验以及可能带来的风险。
432 21

热门文章

最新文章

推荐镜像

更多