资讯专栏INFORMATION COLUMN

Android系统源码目录解析

khlbat / 3391人阅读

摘要:下图展示了在源码一级目录中,各框架层和部分目录的对应关系系统架构对应关系对于开发者而言,学习源码有助于帮助我们更好的理解,为此我们一般学习层的代码。

前言

在之前的文章中介绍了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源码目录介绍

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/14810.html

相关文章

  • Android版本介绍 - 收藏集 - 掘金

    摘要:前言整体架构掘金概述该篇文章主要讲解的整体框架和工作流程,不会涉及到具体的实现。产品汪了解安卓的历史版本吗产品掘金最近在看的设计规范,顺便也熟悉下的版本历史。 关于 Android 7.0 适配中 FileProvider 部分的总结 - 掘金由于 Android 7.0 或更高版本的系统在国内手机市场上的占比不是很高,很多 Android 开发人员并没有做 7.0 适配工作,同时测试...

    teren 评论0 收藏0
  • 安卓新建项目 - 收藏集 - 掘金

    摘要:经也要热更新掘金本文同步自的地方酒馆好久没写博客了。好了,说了这么多还没见到图从零开始搭建一个项目第章掘金鸡汤成功其实很简单,定下一个合理的计划,然后坚持按照计划执行。 用RecyclerView展示错误和空白界面 附加详情界面实践-MultiItem进阶 | 掘金技术征文 - 掘金前言 本文是MultiItem系列的进阶文章,讲解如何展示空白、错误等状态页,这个功能比较常用,实现的思...

    Sanchi 评论0 收藏0
  • SegmentFault 技术周刊 Vol.4 - 这份 Android 有点甜

    摘要:阅读本期周刊,你将快速入门,开启甜蜜之旅。然则的原理负责发送以及处理消息,创建消息队列并不断从队列中取出消息交给,则用于保存消息。 showImg(/img/bVCN99?w=900&h=385); 2016 年 8 月,Android 7.0 Nougat(牛轧糖)正式发布,那么问题来了,你 Marshmallow 了么(¬ -̮ ¬) Cupcake、Donut、Gingerbre...

    jay_tian 评论0 收藏0
  • SegmentFault 技术周刊 Vol.4 - 这份 Android 有点甜

    摘要:阅读本期周刊,你将快速入门,开启甜蜜之旅。然则的原理负责发送以及处理消息,创建消息队列并不断从队列中取出消息交给,则用于保存消息。 showImg(https://segmentfault.com/img/bVCN99?w=900&h=385); 2016 年 8 月,Android 7.0 Nougat(牛轧糖)正式发布,那么问题来了,你 Marshmallow 了么(¬ -̮ ¬)...

    shinezejian 评论0 收藏0
  • 理解Android编译命令

    摘要:二编译命令准备好编译环境后,编译源码的第一步是,其中命令就是用于运行脚本命令,功能等价于,因此该命令也等价于。当需要重新编译所有的相关模块,则需要编译命令后增加参数,比如,或者。对于这些命令的实现都是通过方式来完成的。 工欲善其事,必先利其器,对于想要深入学习Android源码,必须先掌握Android编译命令. 一、引言 关于Android Build系统,这个话题很早就打算整理下,...

    aristark 评论0 收藏0

发表评论

0条评论

khlbat

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<