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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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系统中的音频和照相机服务。

相关文章
|
5天前
|
机器学习/深度学习 自然语言处理 算法
生成式 AI 大语言模型(LLMs)核心算法及源码解析:预训练篇
生成式 AI 大语言模型(LLMs)核心算法及源码解析:预训练篇
|
3月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
3月前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
3月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
2月前
|
自然语言处理 数据处理 索引
mindspeed-llm源码解析(一)preprocess_data
mindspeed-llm是昇腾模型套件代码仓,原来叫"modelLink"。这篇文章带大家阅读一下数据处理脚本preprocess_data.py(基于1.0.0分支),数据处理是模型训练的第一步,经常会用到。
62 0
|
2月前
|
人工智能 供应链 搜索推荐
中国CRM市场深度分析:主流供应商排名与特点解析
随着中国企业数字化转型的深入,CRM(客户关系管理)软件市场迅速发展,形成了多个优秀解决方案提供商。销售易、纷享销客、明源云客、金蝶云之家、简道云、红圈营销和爱客CRM等供应商各具特色。销售易在大型企业市场表现突出,提供全链路营销销售一体化及强大的AI能力;纷享销客以易用性和高性价比著称,适合中小企业;明源云客专注房地产行业,提供全流程解决方案;金蝶云之家与ERP系统深度整合,适合传统制造业;简道云是低代码平台,灵活性高;红圈营销专注零售业,支持全渠道营销;爱客CRM则主打智能营销功能。企业在选择CRM时需综合考虑实施难度、价格定位、技术支持等因素,并结合自身需求进行试用和调研,确保选择最适合
|
3月前
|
安全 搜索推荐 数据挖掘
陪玩系统源码开发流程解析,成品陪玩系统源码的优点
我们自主开发的多客陪玩系统源码,整合了市面上主流陪玩APP功能,支持二次开发。该系统适用于线上游戏陪玩、语音视频聊天、心理咨询等场景,提供用户注册管理、陪玩者资料库、预约匹配、实时通讯、支付结算、安全隐私保护、客户服务及数据分析等功能,打造综合性社交平台。随着互联网技术发展,陪玩系统正成为游戏爱好者的新宠,改变游戏体验并带来新的商业模式。
|
17天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
41 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡

推荐镜像

更多