Android的编译环境--Build系统
Android的Build系统是基于GNU Make和Shell构建的一套编译环境。
从大的方面讲,Android的Build系统可以分成三大块:第一块是位于build/core目录下的文件,这是Android Build系统的框架和核心;第二块是位于device目录下的文件,存放的是具体产品的配置文件;第三块是各模块的编译文件:Android.mk,位于模块的源文件目录下。
Android Build系统核心
Android Build系统的核心位于目录build/core,这个目录中有几十个mk文件以及一些shell脚本和perl脚本,他们构成了Android Build系统的基础和框架。
产品的Image文件
Android编译完成后会生成几个Image文件,包括ramdist.img、boot.img、cache.img、system.img、recovery.img、userdata.img等映像文件。
ramdisk.img是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator负责加载这三个映像文件后,会把system.img和userdata.img分别加载到ramdisk文件系统中的system和userdata目录下。
ramdisk根文件系统中包含一些对于启动android的很重要的文件,比如内核启动完成后加载的第一个进程init、一些重要的配置文件等,总之它控制着整个android的启动。根据init.rc等来初始化并装载系统库、程序等直到开机完成。init.rc脚本包括了文件系统初始化、装载的许多过程。
init.rc的工作主要是:
- 设置一些环境变量;
- 创建system、sdcard、data、cache等目录;
- 把一些文件系统mount到一些目录去,如mount tmpfs tmpfs/sqlite_stmt_journals;
- 设置一些文件的用户群组、权限;
- 设置一些线程参数;
- 设置TCP缓存大小;
boot.img
boot.img是一种Android自定义的文件格式。该格式包括一个2*1024大小的文件头,文件头后面是用gzip压缩过的kernel映像,再后面是一个ramdisk映像,最后是一个载入器程序,这个载入器是可选的,某些映像文件中没有这部分。
ramdisk.img
是一个分区映像文件,会在kernel启动的时候,以只读的方式被mount,这个文件只是包含了/init以及一些配置文件,这个ramdisk.img被用来调用init,以及把真正的root file system mount起来。
ramdisk.img的内容就是out/target.product/generic(具体的产品目录)/root目录下的文件。
在root目录下的文件也就是设备连接usb数据线之后,在Android Studio的DeviceFile Explorer中显示的所有文件及大部分文件夹,也就是根目录。
system.img
包含了整个系统,android的framework、application等,会被挂接到“/system”下,包含了系统中所有的二进制文件。
system.img是out/target/product/generic(具体的产品目录)/system的一个映射,类似于根文件系统的映像,放着android的应用程序、配置文件和字体等。
在system目录下的文件,就是对应根目录下的system目录下的文件。在设备连接了usb数据线之后,在Android Studio的DeviceFile Explorer中的system目录下显示的所有文件及文件夹。
system目录下的文件夹和文件:
文件 | 解释 |
---|---|
app目录 | 存放一般的apk文件 |
bin目录 | 存放一些Linux的工具,但是大部分都是toolbox的链接 |
etc目录 | 存放系统的配置文件 |
fonts目录 | 存放系统的字体文件 |
framework目录 | 存放系统平台所有jar包和资源文件包 |
lib目录 | 存放系统的共享库 |
media目录 | 存放系统的多媒体资源,主要是铃声 |
priv-app目录 | android 4.4开始新增加的目录,存放系统核心的apk文件 |
tts目录 | 存放系统的语音合成文件 |
usr目录 | 存放各种键盘布局、时间区域文件 |
vendor目录 | 存放一些第三方厂商的配置文件、firmware以及动态库 |
xbin目录 | 存放系统管理工具,这个文件夹的作用相当于标准Linux文件系统的sbin |
build.prop文件 | 系统属性的定义文件 |
userdata.img
将会被挂接到/data下,包含了所有应用相关的配置文件,以及用户相关的数据。
userdata.img是设备中/data目录的镜像,初始时一般不包含任何文件。Android系统初始化时会在/data目录下创建一些子目录和文件。
recover.img
相当于一个小型文本界面的Linux系统,它有自己的内核和文件系统。recovery.img的作用是恢复或升级文件系统,因此,在sbin目录下会有一个recover程序。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
---------------------last line for now---------------------