Android系统的整个源码目录结构分析
本文介绍的Android系统源码并不是像某一个类(比如:Handler)的源码,而是支持整个Android系统能够运行的源码。
这里只对Android系统源码目录进行分析,具体的源码一般都是根据需求来看。
一.Android源码的基本知识
Android源码包含比较多的文件,比如Android系统的所有页面,里面的所有app程序,还包含了sdk,各种镜像img等等
像我接触过的几个完整Android源码基本在200G左右!而且这还是比较初始的设计板,里面几个基本功能的app程序。
Android源码编译得到镜像文件img并不是很大,一般1-2G,把这几个镜像烧录到我们的Android设备上,Android设备就可以运行起来,就像我们正常使用的手机那样。
Android系统架构分为四层,从上到下依次是应用层、应用框架层、系统运行库层和Linux内核层。
大部分Android程序员开发App都是只接触应用层。即使那些很复杂的App,或者需要很多C语言类库支持的App的开发,都只是应用层的开发。
应用框架层是能管理这些App的程序,或者镶嵌在设备本身的那些程序的管理开发。
比如手机Home键,Back键的逻辑都可以在框架层做处理,通知窗口,电话窗口。。。
还有Android系统本身的音乐播放,系统设置这些程序都是在框架层的源码中可以修改的。
1.Android系统源码目录
我们要先了解Android系统源码目录,为后期源码学习打下基础。
关于源码的阅读,你可以访问:
http://androidxref.com/
来阅读系统源码。
当然,最好是将源码下载下来。下载源码可以使用清华大学开源软件镜像站提供的Android 镜像:
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ 。
如果觉得麻烦也可以查找国内的网盘进行下载,推荐使用该百度网盘地址下载:http://pan.baidu.com/s/1ngsZs,
它提供了多个Android版本的的源码下载。
整体结构
各个版本的源码目录基本是类似,如果是编译后的源码目录会多增加一个out文件夹,用来存储编译产生的文件。
Android7.0的根目录结构说明如下表所示。
Android源码根目录 | 描述 |
---|---|
abi | 应用程序二进制接口 |
art | 全新的ART运行环境 |
bionic | 系统C库 |
bootable | 启动引导相关代码 |
build | 存放系统编译规则及generic等基础开发包配置 |
cts | Android兼容性测试套件标准 |
dalvik dalvik | 虚拟机 |
developers | 开发者目录 |
development | 应用程序开发相关 |
device | 设备相关配置 |
docs | 参考文档目录 |
external | 开源模组相关文件 |
frameworks | 应用程序框架,Android系统核心部分,由Java和C++编写 |
hardware | 主要是硬件抽象层的代码 |
libcore | 核心库相关文件 |
libnativehelper | 动态库,实现JNI库的基础 |
ndk | NDK相关代码,帮助开发人员在应用程序中嵌入C/C++代码 |
out | 编译完成后代码输出在此目录 |
packages | 应用程序包 |
pdk | Plug Development Kit 的缩写,本地开发套件 |
platform_testing | 平台测试 |
prebuilts | x86和arm架构下预编译的一些资源 |
sdk | sdk和模拟器 |
system | 底层文件系统库、应用和组件 |
toolchain | 工具链文件 |
tools | 工具文件 |
Makefile | 全局Makefile文件,用来定义编译规则 |
上面这么多文件夹,有些是一直不需要去理会的,比如说我接触较多的就文件夹:device,build,out,packages。
device下都是一些配置文件,比如Wifi Adb端口如果需要写死,可以添加属性并设置里面的参数
build下是一些编译规则,比如可以设置某些程序是否安装。
out下是编译完成后生产的各种文件,比如各种系统的apk文件,这些都是即将安装到Android设备上面的
package下包含很多Android项目的源码,手机上所有可以点击的图标其实都是一个Android项目,比如录音,电话,系统设置,或者三方的一些程序(阅读器,应用商城)等等
Android系统源码也不是没有bug的,比如我之前的一个Android板子上的Music就有几个bug,需要进去package/apps/Music里面修改源码
把源码修改后重新编译,再把编译生成的镜像文件烧录到Android设备上就可以了。
接下来分析packages中的内容,也就是应用层部分。
2.应用层packages部分
应用层位于整个Android系统的最上层,开发者开发的应用程序以及系统内置的应用程序都是在应用层。
源码根目录中的packages目录对应着系统应用层。它的目录结构:
packages目录 | 描述 |
---|---|
apps | 核心应用程序 |
experimental | 第三方应用程序 |
inputmethods | 输入法目录 |
providers | 内容提供者目录 |
screensavers | 屏幕保护 |
services | 通信服务 |
wallpapers | 墙纸 |
可以看到package中还包含内容提供者,像我们在应用上能都访问手机系统通讯录,系统日历,
都是package中写好的内容提供者,所以我们才能调用那些uri对系统数据进行增删改查操作。
3.其他
我们如果要修改源码,就要先知道修改的文件在源码目录的哪个位置。这个不懂可以上网多查查。
然后修改源码,也不是一个简单的活。如果只是一两行代码,随便打开一个文本编辑器,编辑保持即可。
如果是编辑里面一个大项目,并且要看里面的相关逻辑,可以使用Source Insight这个专门查看编辑源码的工具。
如果编辑的是源码里面的小Demo,我建议可以把代码复制出来,弄到Eclipse或Studio中调试,
因为源码的调试真的很麻烦,改几句代码编译、烧录半小时就过去了。
但是源码的代码也不能直接Import 到Eclipse或Studio中,源码有的是java代码和res代码
所以我的做法是创建一个项目然后报源码中的java代码和res代码复制进去,记得AndroidManifest复制进去。
在Studio中记得改app中的build.gradle的包名和版本。
运行程序后,不断调试,修改源码。
记得把修改的位置用另一个文档记录下来,然后在源码目录中修改代码。
这里只是简单分享了一下Android系统源码的知识。后面还会深入探究的。