相信大家对于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. LINUX学习资源

    鸟哥:http://vbird.dic.ksu.edu.tw/linux_basic/0430cron.php#cron 五分钟教程:http://roclinux.cn/?page_id=3759

  2. 818E - Card Game Again(尺取法)

    818E - Card Game Again 题意 给出一个数列,选择连续的一段使得这些数字的乘积是 k 的倍数,问合法的方案数. 分析 尺取法.设 num 为连续的数的乘积,只要对于 k 的每个素因 ...

  3. 浅析 Node.js 单线程模型

    总结笔记:对于每个用户请求,由主线程接收并存放于一个事件队列中(不做任何处理),当无请求发生时,即主线程空闲,主线程开始循环处理事件队列中的任务: 对于非阻塞JS程序: 1.若某事件需要I/O操作,则 ...

  4. 新博客:11101001.com

    开了一个新blog 但还是会用这个写博客 新博客地址11101001.com

  5. Extjs Ext.grid.column.Column 隐藏显示列

    1.根据字段名字 grid.down("gridcolumn[dataIndex=PLAN_QTY]").show();//hide() 2.根据列号 grid.columns[1 ...

  6. springmvc使用StringHttpMessageConverter需要配置编码

    Spring controller 如下 @Controller public class SimpleController { @ResponseBody @RequestMapping(value ...

  7. Jackson的高级应用(转)

    Jackson 是当前用的比较广泛的,用来序列化和反序列化 JSON 的 Java 的开源框架.Jackson 社 区相对比较活跃,更新速度也比较快, 从 Github 中的统计来看,Jackson ...

  8. Android - toolbar navigation 样式

    1.修改title 边距 修改边距使用系统的app属性来引入使用,即: xmlns:app="http://schemas.android.com/apk/res-auto" 1 ...

  9. c++ comment

    一.匈牙利命名法[Hungarian]: 广泛应用于象 Microsoft Windows 这样的环境中. Windows 编程中用到的变量(还包括宏)的命名规则匈牙利命名法,这种命名技术是由一 位能 ...

  10. How does a single thread handle asynchronous code in JavaScript?

    原文:https://www.quora.com/How-does-a-single-thread-handle-asynchronous-code-in-JavaScript ----------- ...