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的工作主要是:

  1. 设置一些环境变量;
  2. 创建system、sdcard、data、cache等目录;
  3. 把一些文件系统mount到一些目录去,如mount tmpfs tmpfs/sqlite_stmt_journals;
  4. 设置一些文件的用户群组、权限;
  5. 设置一些线程参数;
  6. 设置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---------------------