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系统中的音频和照相机服务。

相关文章
|
1天前
|
Linux 开发工具 Android开发
Docker系列(1)安装Linux系统编译Android源码
Docker系列(1)安装Linux系统编译Android源码
3 0
|
2天前
|
存储 开发工具 对象存储
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
9 0
|
2天前
|
JSON 编译器 开发工具
VS Code阅读Android源码
VS Code阅读Android源码
9 1
|
7天前
yolo-world 源码解析(六)(2)
yolo-world 源码解析(六)
18 0
|
7天前
yolo-world 源码解析(六)(1)
yolo-world 源码解析(六)
12 0
|
8天前
yolo-world 源码解析(五)(4)
yolo-world 源码解析(五)
19 0
|
8天前
yolo-world 源码解析(五)(1)
yolo-world 源码解析(五)
31 0
|
8天前
yolo-world 源码解析(二)(2)
yolo-world 源码解析(二)
21 0
|
8天前
Marker 源码解析(二)(3)
Marker 源码解析(二)
13 0

推荐镜像

更多