前言

在之前的文章中介绍了Android系统源码的下载,这篇文章简单介绍一下源码结构,并结合Android系统结构,熟悉一下源码工程。

阅读工具

关于阅读源码的工具,这里使用的是visual studio code,但是visual studio code本身不支持java和c++的相关提示,所以你必须安装java和c的拓展插件,帮助你更好的阅读代码。

源码结构

各个版本的源码目录结构基本上是大同小异,编译后的目录中会多一个out文件夹,里面用来存储编译后的文件。这里我下载的源码版本是9.0的,如果你不知道你下载的源码版本的话,可以打开build->core->version_defaults.md中找到PLATFORM_SDK_VERSION字段,PLATFORM_SDK_VERSION:=28就是Android源码的版本。Android源码目录结构如下:

  • art:Android Runtime,一种App运行模式,区别于传统的Dalvik虚拟机,旨在提高Android系统的流畅性
  • bionic:基础C库源代码,Android改造的C/C++库
  • bootable:Android程序启动导引,适合各种bootloader的通用代码,包括一个recovery目录
  • build:存放系统编译规则及generic等基础开发包配置
  • compatibility:Android兼容性计划
  • cts: Android兼容性测试套件标准
  • dalvik:Android Dalvik虚拟机相关内容
  • developers:Android开发者参考文档
  • development: Android应用开发基础设施相关
  • device:Android支持的各种设备及相关配置
  • external:Android中使用的外部开源库
  • frameworks:应用程序框架,Android系统核心部分,由Java和C++编写
  • hardware:硬件适配接口
  • kernel:Linux Kernel,不过Android默认不提供,需要单独下载,只有一个tests目录
  • libcore:Android Java核心类库
  • libnativehelper:Android动态库,实现JNI库的基础
  • packages:应用程序包
  • pdk:Plug Development Kit 的缩写,本地开发套件
  • platform_testing:Android平台测试程序
  • prebuilts:x86和arm架构下预编译的一些资源
  • sdk:Android的Java层sdk
  • system:Android底层文件系统库、应用和组件
  • test:Android Vendor测试框架
  • toolchain:Android工具链文件
  • tools:Android工具文件
  • Android.bp:Android7.0开始代替Android.mk文件,它是告诉ndk将jni代码编译成动态库的一个脚本
  • Makefile:全局Makefile文件,用来定义编译规则

Android系统结构与源码的对应关系

在之前的文章中介绍了一下Android系统架构,对于Android系统架构每一层,Android源码结构中都有相关目录与之对应。下图展示了在Android源码一级目录中,各框架层和部分目录的对应关系:

系统架构

对应关系

对于Android开发者而言,学习源码有助于帮助我们更好的理解Android,为此我们一般学习Framework层的代码。接下来介绍一下应用层、应用框架层相关目录结构。

应用层

应用层位于整个Android系统的最上层,开发者开发的应用程序以及系统内置的应用程序都是在应用层。其中目录结构如下:

  • apps:核心应用程序
  • inputmethods:输入法目录
  • providers:内容提供者目录
  • screensavers:屏幕保护
  • services:通信服务
  • wallpapers:墙纸

应用框架层

应用框架层是系统的核心部分,一方面向上提供接口给应用层调用,另一方面向下与C/C++程序库以及硬件抽象层等进行衔接。其中目录结构如下:

  • av:多媒体框架
  • base:Android源码的主要核心目录
  • compile:编译相关
  • ex:文件解析器
  • hardware:硬件适配接口
  • layoutlib:布局相关
  • minikin:Android原生字体,连体字效果
  • ml:机器学习
  • multidex:多dex加载器
  • native:native实现
  • opt:一些软件
  • rs:Render Script,可创建3D接口
  • support:framework支持文件
  • wilhelm:基于Khronos的OpenSL ES/OpenMAX AL的audio/multimedia实现

其中base目录中是应用框架层的主要核心代码,目录结构如下:

  • apct-tests:性能优化测试
  • api:android应用框架层声明类、属性和资源
  • cmds:android系统启动时用到的commands
  • core:framework的核心框架组件
  • data:android下的资源(字体、声音、视频、软盘等)
  • docs:android项目说明
  • drm:实现权限管理,数字内容解密等模块的工作
  • graphics:图像渲染模块
  • keystore:秘钥库
  • libs:库信息(界面、存储、USB)
  • location:位置信息
  • media:手机媒体管理(音频、视频等)
  • native:本地方法实现(传感器、输入、界面、窗体)
  • nfc-extras:近场通讯
  • obex:蓝牙
  • opengl:2D和3D图形绘制
  • packages:框架层的实现(界面、服务、存储)
  • proto:协议框架
  • rs:资源框架
  • samples:例子程序
  • sax:xml解析器
  • services:各种服务程序
  • telecomm:telecomm通信框架
  • telephony:电话通讯框架
  • tests:各种测试
  • vr:虚拟现实相关
  • wifi:wifi模块

参考

Android 8.0.0-r4源码目录结构详解

Android系统架构与系统源码目录

Android系统源码篇之(一)源码获取、源码目录结构及源码阅读工具简介

android framework源码目录介绍

更多精彩请关注我的微信公众号。


codeteenager
620 声望44 粉丝