相信大家对于Google给出的那副经典Android架构图非常的熟悉,从下往上依次是Linux内核层(主要是负责硬件管理调度),HAL层(主要是硬件抽象层),libs层+Runtime,Framework层,App层。今天在这里我想对于各个层级的目录结构做一个细分整理,本次的目录结构是基于Android7.0系统,如果有什么不对的地方欢迎拍砖。

当我们进到Android源码目录之后,从左往右依次有bionic文件夹,该文件夹里面放置主要是Google为了取代Glibc而开发出来的C运行库,官方的解释是能够带来更好的性能提升,对于这个文件夹里面的内容笔者不想过多说明,因为我也不太清楚各文件是对应什么功能。

bootable文件夹,相信大家从名字应该就能一窥功能,主要是加载器了。当Android系统启动的时候,就是通过该文件夹提供的功能装载整个系统。点击进入包括三个子文件夹:bootloader、fbd、recovery,bootloader文件夹应该就是装载的主要执行者,其他两个文件夹呢?分别对应不同启动模式下的装载方式,recovery就是对应复原模式,fbd的功能笔者也不太清楚,如果有知道的朋友可以留言指教。

build文件夹对应的是Android系统编译构建,在该文件夹里面有各模块对应的mk文件,相当于编译过程的执行脚本。然后还有个envsetup.sh脚本,通过执行该脚本可以实现Android模块编译。

cts文件夹主要为了兼容Google的CTS测试而创建的了。

device文件夹用于放置不同厂商的硬件驱动了,点开可以发现google呀、htc呀、华为呀子文件夹。

external文件夹用于放置第三方扩展的文件,点开可以发现里面的文件数量挺多的,对此笔者的研究不多,所以略过。

frameworks文件夹是我们进行修改定制的主要对象了,在该文件夹里面我们可以找到Activity、Service、Handler、WindowManager、Message、Thread等java源码,对于我们了解Android原生的一些控件、组件很有帮助。

hardware文件夹对应的就是HAL层,主要提供硬件抽象层的功能。

kernel文件夹笔者理解的就是Linux内核层了,虽然在我们下载源码的时候,内核需要我们单独去下载。

libcore文件夹,笔者理解的是主要提供链接器、编译器、词语法分析等功能的地方。

ndk、sdk文件夹就不用过多解释了,相信大家都懂的。

packages文件夹用于我们放置一些系统原生集成的App源码,点击进入我们可以发现里面有个Apps文件夹,然后就分目录放置不同的App,通过修过mk文件链接编译就行。

system文件夹具体功能笔者不太清楚,如果说是硬件驱动吧,不是还有device吗?如果说是system运行时环境吧,不是还有libcore吗?

当我们编译Android系统之后,应该会多创建一个out文件夹,里面存放了编译之后的.img文件,如果我们需要烧录系统的时候,就可以用它们重刷系统。

上面的一些整理,只是笔者自己对着系统源码目录以及自己的一些分析理解而得,如果有什么不对的地方,欢迎交流。

Android开发系列之系统源码目录的更多相关文章

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

    前言 技术博客终于可以恢复正常的更新速度了,原因是我编写的进阶书籍的初稿已经完成,窃以为它将会是Android应用书籍中最有深度的一本,可以说是<Android开发艺术探索>的姊妹篇.在这 ...

  2. Android系统源码目录

    Android系统源码目录 我们要先了解Android系统源码目录,为后期源码学习打下基础.关于源码的阅读,你可以访问http://androidxref.com/来阅读系统源码.当然,最好是将源码下 ...

  3. Android 7.1.1系统源码下载、编译、刷机-Nexus 6实战

    想成为一位合格的Android程序员或者一位Android高级工程师是十分有必要知道Android的框架层的工作原理,要知道其工作原理那么就需要阅读Android的源代码. 想要阅读Android的源 ...

  4. 基于Android开发的天气预报app(源码下载)

    原文:基于Android开发的天气预报app(源码下载) 基于AndroidStudio环境开发的天气app -系统总体介绍:本天气app使用AndroidStudio这个IDE工具在Windows1 ...

  5. 迅为4412开发板QtE系统源码-屏幕横竖屏切换修改方法

    迅为4412开发板QtE系统源码-屏幕横竖屏切换修改方法 详情了解:http://topeetboard.com 更多了解:https://arm-board.taobao.com/ 用户在开发板上运 ...

  6. Linux基础系列—Linux内核源码目录结构

    /** ****************************************************************************** * @author    暴走的小 ...

  7. ubuntu配置android开发环境和编译源码遇到的一些问题

    ---------------------------------------------环境变量设置--------------------------------------------- 1.设 ...

  8. java开发JSP+Servlet+bootstrap开发电影院购票系统 源码

    基于JSP+Servlet+bootstrap开发电影院购票系统:开发环境: Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+Mysql数据库 程序要求:电影院订票系统 用 ...

  9. ssm开发垃圾分类查询系统 源码 mysql

    需求 基于SSM实现一个垃圾分类查询管理系统, 用户可以根据自定义查询分类信息, 管理员可以对分类信息, 垃圾详情信息进行增删改查的管理 运行环境 jdk1.8,tomcat8.5,mysql5.6, ...

随机推荐

  1. 解析Java的volatile关键字

    众所周知,无限制下多线程操作共享变量是危险的,为了保证线程安全语义,一般的建议是在操作共享变量时加锁,比方说在用synchronized关键字修饰的方法内读写共享变量. 但是synchronized开 ...

  2. 计蒜客 28449.算个欧拉函数给大家助助兴-大数的因子个数 (HDU5649.DZY Loves Sorting) ( ACM训练联盟周赛 G)

    ACM训练联盟周赛 这一场有几个数据结构的题,但是自己太菜,不会树套树,带插入的区间第K小-替罪羊套函数式线段树, 先立个flag,BZOJ3065: 带插入区间K小值 计蒜客 Zeratul与Xor ...

  3. java Iterable

    Iterable

  4. bzoj 5163: 第k大斜率

    5163: 第k大斜率 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 15  Solved: 4[Submit][Status][Discuss] D ...

  5. php的function() use($args)用法

    使用use返回 aaa aaa.使用函数传参数aaa bbb. use的参数必须是已经存在的,如果没有定义返回Notice: Undefined variable: word ,使用函数参数方式不需要 ...

  6. background属性总结,background-image路径问题相对于css和js

    (1)background属性总结 background 简写属性在一个声明中设置所有的背景属性. 可以设置如下属性:background-color规定要使用的背景颜色.background-pos ...

  7. Http协议三次握手过程

    Http协议三次握手过程   TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: ...

  8. 全国省会城市路网以及POI 数据

  9. Solr6.6.0 用 SimplePostTool索引文件

    一.背景介绍 Solr启动并运行之后,并不包含任何数据,在solr的安装目录下的bin目录中,有一个post工具,我们可以使用这个工具往solr上传数据,这个工具必须在命令行中执行,post工具是一个 ...

  10. linux fork的缺点

    Disadvantage of fork linux环境下, JBoss中调用curl下载文件,  发现curl占用的内存和JBoss一样多. Historical Background and Pr ...