
系统架构
Linux内核层
Linux Kernel:Android 的核心系统服务基于Linux 内核,在此基础上添加了部分Android专用的驱动。系统的安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于该内核。
硬件抽象层
Hardware Abstraction Layer:对Linux内核驱动程序的封装,向上提供接口,向下屏蔽了具体的实现细节。硬件抽象层是位于操作系统内核与硬件电路之间的接口层,
其目的在于将硬件抽象化,为了保护硬件厂商的知识产权,它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。
从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。通俗来讲,就是将控制硬件的动作放在硬件抽象层中。
系统运行层
Native C/C++ Libraries:系统运行层分为C/C++运行时库和Android运行时环境。
Android运行时环境在4.4以前使用的是Dalvik,之后使用ART。从5.0开始,正式废弃了Dalvik。
Dalvik
什么是Dalvik?
- Dalvik是用于Android平台的Java虚拟机
 - Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一
 - 它可以支持已转换为.dex(即Dalvik Executable)格式的Java应用程序的运行
 - dex格式是专为Dalvik应用设计的一种压缩格式,适合内存和处理器速度有限的系统
 - Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik应用作为独立的Linux进程执行
 - 独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭
 
特点
- Dalvik是依靠一个Just-In-Time(JIT编译)编译器去解释字节码
 - Dalvik虚拟机下运行Java时,要将字节码通过即时编译器(just in time ,JIT)转换为机器码(机器码才是能真正运行的),这会拖慢应用的运行效率
 - 应用安装时,执行dexopt指令,将dex文件优化为odex文件
 - 应用运行时,会将二进制翻译成机器码流程
 
Android Runtime
Android Runtime特点
- 应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用,这个过程叫做预编译(AOT,Ahead-Of-Time)
 - 在移除解释代码这一过程后,应用程序执行将更有效率,启动更快
 - 系统性能的显著提升
 - 垃圾回收方面的优化
 
应用框架层
Application Framework:应用框架层,提供了应用开发的核心功能。在实际开发中会使用里面的API。
| 名称 | 描述 | 
|---|---|
| Activity Manager(活动管理器) | 管理各个应用程序生命周期以及通常的导航回退功能 | 
| Location Manager(位置管理器) | 提供地理位置以及定位功能服务 | 
| Package Manager(包管理器) | 管理所有安装在Android系统中的应用程序 | 
| Notification Manager(通知管理器) | 使得应用程序可以在状态栏中显示自定义的提示信息 | 
| Resource Manager(资源管理器) | 提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等 | 
| Telephony Manager(电话管理器) | 管理所有的移动设备功能 | 
| Window Manager(窗口管理器) | 管理所有开启的窗口程序 | 
| Content Providers(内容提供器) | 使得不同应用程序之间可以共享数据 | 
| View System(视图系统) | 构建应用程序的基本组件 | 
应用层
System Apps:这里存放的是Android自带的一些App,比如:电话、短信、图库、拍摄等。
源码目录
可以从 这里 在线阅读源码,也可以从 https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ 下载源码。
以下是Android9的源码目录结构:
art:全新的ART运行环境
- dalvlkvm:dalvik 运行时代码
 - dex2oat:
 - dexdump:
 - dexlayout:
 - disassembler:
 - openjdk|vm:
 - openjdk|jvmti:
 - runtime:
 - simulator:模拟器
 - tools:
- ahat:Android堆栈分析工具
 - amm:Actionable Memory Metric
 
 
bionic:google自己开发的内核库,比GNU的内核更适合移动设备
- apex:
 - libc:对系统调用的封装
- arch-arm:
 - arch-arm64:
 - arch-common:
 - arch-x86:
 - arch-x86_64:
 - stdio:标准IO
 - tools:一些python工具脚本
 
 - libdl: 用于动态库的装载
 - libm:数学库
- upstream-freebsd:很多来自FreeBSD的函数库
 
 - libstdc++:标准的C++的功能库
 - linker:链接模块
 - tools:
 
bootable:启动引导相关代码
- recovery:这个目录用于创建恢复程序
 
build:存放系统编译规则及generic等基础开发包配置
- bazel:
 - blueprint:
 - make:
- common:
 - core:构建系统的核心目录
- clang:
 - combo:编译、编译设置
 - tasks:
 
 - envsetup.sh
 - target:
- board:构建目标设备的配置
 - product: 哪些apps需要编译
 
 - tools:编译过程中需要用到的工具
- acp:
 - aplcheck:
 - atree:
 - check_prereq:
 - drolddoc:
 - rbb2565:
 - zipalign:
 
 
 - pesto:
 - soong:
 
compatibility
cts:Android兼容性测试套件标准
dalvik:dalvik虚拟机
- dexdump:
 - dexgen:
 - dexlist:
 - dx:
 - opcode-gen:
 
developers:开发者目录
- build:
 - demos:
 - docs:
 - samples:
 
development:应用程序开发相关
- apps:包含没有部署到系统到应用
- BluetoothDebug:
 - SdkSetup:
 
 - build:
- tools:构建过程中需要用到的一些工具
 
 - cmds:包含monkey tool
 - python-packages:
 - host:
- windows:包含Windows版USB驱动
 
 - ide:包含对IDE一些配置信息
- clion
 - eclipse
 - intellij
 
 - sdk:
 - scripts:
 - tools:
- apkcheck:APK检查工具
 - axl:TCP、HTTP测试
 - elftree:
 - idegen:
 - emulator:
 - bugreport:
 - ndk:
 - ota_analysis:
 - otagui:
 - winscope:
 - monkey:模拟用户点击的测试工具
 
 - vendor_snapshot:
 - vndk:
 
- apps:包含没有部署到系统到应用
 device:设备相关配置
- amlogic:
 - common:
 - generic:包含不同设备的配置信息
- arm64:
 - art:
 - goldfish:
 - goldfish-opengl:
 - x86:
 
 - google:
 - google_car:
 - linaro:
 - mediatek:
 - ti:
 
external:开源模组相关文件,可以理解成第三方库的依赖
- ImageMagick:
 - FXdiv:
 - OpenCL-CTS:
 - aac:
 - adhd:
 - adt-infra:
 - android-clat:
 - androidplot:
 - angle:
 - antlr:http://www.antlr.org
 - apache-commons-bcel:
 - apache-commons-compress:
 - apache-commons-math:
 - apache-harmony:
 - apache-http:
 - apache-xml:
 - auto:
 - clang:
 - bsdiff:
 - chromium-libpac:
 - chromium-trace:
 - chromium-webview:
 - cpuinfo:
 - curl:
 - dagger2:
 - dexmaker:
 - exoplayer:
 - libogg:
 - libopus:
 - libcap:
 - libpng:
 - lzma:
 - skia:http://code.google.com/p/skia/
 - v8:Javascript引擎
 - webp:http://code.google.com/speed/webp
 - webrtc:http://www.webrtc.org
 
frameworks:应用程序框架,Android系统核心部分,由Java和C++编写
- av:
- camera:
 - media:C实现系统媒体库
 
 - base:
- api:
 - boot:
 - cmds:重要命令
- am:
 - app_process:
 - pm:包管理工具
 
 - config:
 - data:包含字体文件、音频文件、视频文件等
 - location:
 - media:多媒体相关库
- java:
 - jni:
- audioeffect:
 - soundpool:
 
 - mca:
 - native:
 
 - multidex:
 - native:本地库
 - opengl:2D/3D 图形API
 - sax:XML解析器
 - wifi:wifi无线网络
 - packages:
- BackupRestoreConfirmation:
 - DefaultContainerService:
 - SystemUI:
 - Shell:
 - VpnDialogs:
 
 
 - compile:
 - ex:
 - hardware:
 - layoutlib:
 - libs:
 - native:
- opengl:第三方图形渲染库
 - services:
- audiomanager:
 - batteryservice:
 - displayservice:
 - gpuservice:
 - inputflinger:
 - surfaceflinger:图形显示库,主要负责图形的渲染、叠加和绘制等功能
 - sensorservice:
 - vr:
 
 
 
- av:
 hardware:主要是硬件抽象层的代码
- broadcom:
 - google:
 - libhardware:
 - libhardware_legacy:
 - nxp:
 - samsung:
 - st:
 
kernel:
libcore:核心库相关文件
- api:
 - dalvik:
 - dom:
 - json:
 - xml:
 
libnativehelper:动态库,实现JNI库的基础
packages:自带Apps应用程序包
- apps:系统App
- Bluetooth:
 - Calendar:
 - Camera2:
 - Dialer:
 - Launcher3:
 
 - inputmethods:输入法目录
 - modules:
- ArtPrebuilt:
 - DnsResolver: DNS解析
 - Permission: 权限
 - adb:adb工具
 
 - providers:内容提供者目录
- CalendarProvider:
 - DownloadProvider:
 - MediaProvider:
 - TelephonyProvider:
 
 - screensavers:屏幕保护
 - services:通信服务
- AlternativeNetworkAccess:
 - Telephony
 
 - wallpapers:墙纸
 
- apps:系统App
 pdk:Plug Development Kit 的缩写,本地开发套件
platform_testing:平台测试
prebuilts:x86和arm架构下预编译的一些资源
- bazel:
 - clang:
 - devtools:
 - gcc:
 - go:
 - gradle-plugin:
 - jdk:
 - python:
 - mlsc:
 - ndk:
 - runtime:
 - tools:
- common:
 - darwln-x86:
 - linux-x86:
 - linux-x86_64:
 
 
sdk:sdk和模拟器
- annotations:
 - apkbuilder:这个废弃了,推荐直接使用com.android.sdklib.build.ApkBuilder
 - find_java:
 - find_java2:
 - sdklauncher:
 - hierarchyviewer:视图查看器
 
system:底层文件系统库、应用和组件
- apex:
 - bpf:
 - core:
- debuggerd:
 - logcat:
 - toolbox:
 - watchdogd:
 
 - extras:
- ANRdaemon:
 - app-launcher:
 - su:
 - sound:播放wav文件工具
 - toolchain-extras:
 
 
test:
toolchain:工具链文件
tools:工具文件