相信大家对于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. Python的网络编程[0] -> socket[2] -> 利用 socket 建立 TCP/UDP 通信

    Socket 目录 socket 的 TCP/IP 通信基本建立过程 socket 的 UDP 通信基本建立过程 socket 的 UDP 广播式通信基本建立过程 socket 的多线程通信建立过程 ...

  2. 牛客nowcoder Noip提高组第四场

    https://www.nowcoder.com/acm/contest/175#question A-动态点分治 Description CJK 是一个喜欢数据结构的同学.一天他看到 BZOJ 40 ...

  3. EasyUI Datagrid 单元格编辑

    3:对于单元格的编辑 $('#Units').datagrid({ pageNumber: 1, //url: "@ViewBag.Domain/Paper/GetQuestionUnit& ...

  4. 一次PHP面试经历

    9月9号,去了一家朋友的公司参加面试,然后就被直接吊打了,问的许多问题居然是我压根没有关心过的,看起来只在高层搞框架不行啊,还是得自己造个轮子试试,下面回顾一下问到的问题和我自己找到的一些答案. fi ...

  5. 集合框架(02)List

    List的类型和特点: ArrayList:底层的数据结构使用的是数组结构.特点:查询的速度很快,但是增删稍慢 线程不同步 LinKedList:底层使用的链表数据结构.特点:增删的速度很快,查询稍慢 ...

  6. MySQL 中的 base64 函数

    1. 5.6版本及之后的版本的base64 主要就是两个mysql内部函数to_base64和from_base64,使用也很简单,如下: 5.6之前不支持 mysql> select vers ...

  7. MySQL配置参数:wait_timeout

    作者:老王 如果你没有修改过MySQL的配置,缺省情况下,wait_timeout 的初始值是. wait_timeout过大有弊端,其体现就是MySQL里大量的SLEEP进程无法及时释放,拖累系统性 ...

  8. Dreamweaver CS5个性化设置

    Dreamweaver CS5个性化设置 编辑 --> 转到行 显示工具栏(上面包含“新建.保存.保存全部”等按钮) 查看 --> 工具栏 --> 标准 也可右键单击显示菜单 延伸阅 ...

  9. 【微信】1.微信小程序开发--入门

    开始开发微信小程序咯!! ============================= 1.找到官网API地址 https://developers.weixin.qq.com/miniprogram/ ...

  10. Spring MVC 解读——<mvc:annotation-driven/>

    Spring MVC 解读——<mvc:annotation-driven/> 一.AnnotationDrivenBeanDefinitionParser 通常如果我们希望通过注解的方式 ...